diff --git a/src/polynomials_and_splines.ipynb b/src/polynomials_and_splines.ipynb index 866df40..fede905 100644 --- a/src/polynomials_and_splines.ipynb +++ b/src/polynomials_and_splines.ipynb @@ -1,980 +1,980 @@ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Polynomials and Splines" ] }, { "cell_type": "code", "execution_count": 191, "metadata": { "hide_input": true }, "outputs": [ { "data": { "text/html": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "IRdisplay::display_html('')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "New R commands:\n", "* `poly(predictor, order, raw = FALSE)`\n", "* `I()`\n", "* `cbind()`\n", "* `cut(predictor, number_of_cuts)`\n", "* `bs(predictor, degree = 3, knots = , df = )`\n", "* `ns(predictor, degree = 3, knots = , df = )`\n", "* `smooth.spline(predictor, response)`\n", "\n", "Useful R commands to remember:\n", "* `range(column)` gives lower and upper bounds for the data in `column`.\n", " \n", "\n", "This section is inspired by the Lab in chapter 7 from the textbook.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Regression" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "library(ISLR)\n", "attach(Wage)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We will look at the Wage data, which contains the following columns." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "names(Wage)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let us have a look at the first five rows of columns age (the second column) and wage (the 11th column).\n", "We see that the first individual has age 18 and a wage of 75'000 US Dollar per year." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "Wage[1:5,c(2, 11)]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To use multiple powers of `age` as predictors, we can use the `poly` function. With the argument `raw = T` (short form of `raw = TRUE`), we see that it effectively computes higher powers of `age`." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "poly(Wage$age[1:5], 4, raw = T)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "By default, `raw = F`, in which case the `poly` function returns an orthogonal basis formed by linear combination of all powers of `age`." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "poly(Wage$age[1:5], 4)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We will now see that the estimate of the coefficients depends on whether we choose the orthogonal or the raw basis, but the predictions do not depend on this choice." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "fit1 = lm(wage ~ poly(age, 4), data = Wage)\n", "coef(summary(fit1))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "fit2 = lm(wage ~ poly(age, 4, raw = TRUE), data = Wage)\n", "coef(summary(fit2))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Remember that the `predict` function without any further arguments computes the prediction of the model on the training set.\n", "We see here that the prediction for the first individual is approximately 52'000 USD. Remember that the first individiual is 18 years old and has an actual wage of 75'000 USD. There are probably other individuals of 18 years of age in the training set with a much lower income." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "predict(fit1)[1:5]" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "predict(fit2)[1:5]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As an alternative to the `poly` function we could have explicitly defined our predictors using the wrappers `I` (the \"as-is\" operator) or `cbind`. These wrappers are needed because `^` has a special meaning in formulas.\n", "The `cbind` function builds a matrix from a collection of vectors.\n", "\n", "Both variants create a predictors of the same form as `poly(age, 4, raw = T)`." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "fit3 = lm(wage ~ I(age) + I(age^2) + I(age^3) + I(age^4), data = Wage)\n", "predict(fit3)[1:5]" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "fit4 = lm(wage ~ cbind(age, age^2, age^3, age^4), data = Wage)\n", "predict(fit4)[1:5]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We now create a grid of values for `age` at which predictions. We first extract the lower and upper bound of the values in the `age` column." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "agelims = range(age)\n", "agelims" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Then create a grid of 50 points between these bounds." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "age.grid = seq(from = agelims[1], to = agelims[2], length = 50)\n", "age.grid" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And then call the generic `predict()` function, specifying that we want standard errors as well." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "predictions = predict(fit1, newdata = list(age = age.grid), se = T)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The prediction of the standard errors is stored in the column `se.fit`." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "names(predictions)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We create now a matrix that contains the predictions plus/minus two times the standard deviation, which corresponds to an approximate 95% confidence interval for normally distributed errors." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "se.bands = cbind(predictions$fit - 2 * predictions$se.fit, predictions$fit + 2 * predictions$se.fit)\n", "se.bands[1:5,]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We will plot now the data together with the predictions. Use `?par` or `?plot` to get help on arguments that you don't understand." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "plot(age, wage, xlim = agelims, cex = .5, col = \"darkgrey\")\n", "title(\"Degree-4 Polynomial\")\n", "lines(age.grid, predictions$fit, lwd = 2, col = \"blue\")\n", "matlines(age.grid, se.bands, lwd = 1, col = \"blue\", lty = 3)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In order to fit a step function we use the `cut()` function. We use the function `table()` to display what `cut()` does." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "table(cut(age, 4))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here, `cut()` automatically picked the cutpoints at 33.5, 49 and 64.5 years of age.\n", "The lower row displays the number of data points that fall into each region.\n", "\n", "The function `cut()` returns an ordered categorical variable; the `lm()` function then creates a set of dummy variables for use in the regression. The `age < 33.5` category is left out, so the intercept coefficient of 94'160 USD can be interpreted as the average salary for those under 33.5 years of age, and the other coefficients can be interpreted as the average additional salary for those in the other age groups." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "fit.steps = lm(wage ~ cut(age, 4), data = Wage)\n", "coef(summary(fit.steps))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Classification" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Next we consider the task of predicting whether an individual earns more than 250'000 USD per year." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "fit = glm(I(wage > 250) ~ poly(age, 4), data = Wage, family = binomial)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note that we again use the wrapper `I()` to create this binary response variable on the fly. The expression `wage>250` evaluates to a logical variable containing `TRUE`s and `FALSE`s, which `glm()` coerces to binary by setting the `TRUE`s to 1 and the `FALSE`s to 0.\n", "\n", "Once again, we make predictions using the `predict()` function." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "preds = predict(fit, newdata = list(age = age.grid), se = T)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "However, calculating the confidence intervals is slightly more involved than in the linear regression case.\n", "The default prediction type for a `glm()` model is `type = \"link\"`, which is what we use here. This means we get predictions for the logit." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "se.bands.logit = cbind(preds$fit - 2*preds$se.fit, preds$fit + 2*preds$se.fit)\n", "se.bands.logit[1:5,]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To transform them to probabilities we use the formula $p(Y=1|X) = \\frac{\\exp(\\beta X)}{1 + \\exp(\\beta X)}$, where $\\beta X = \\beta_0 + \\beta_1 X + \\beta_2 X^2 + \\beta_3X^3 + \\beta_4X^4$." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "se.bands = exp(se.bands.logit)/(1 + exp(se.bands.logit))\n", "cbind(age.grid[1:5], se.bands[1:5,])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We see that the predicted confidence interval for the probabilities to earn more than 250'000USD per year is rather narrow and at low probabilities for ages up to 23 years.\n", "\n", "Now we will plot again. The `jitter` function is used to jitter the `age` values a bit so that observations with the same `age` value do not cover each other up. This is often called a rug plot." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "plot(age, I(wage>250), xlim = agelims, type = \"n\", col = \"darkgrey\", ylim = c(0, .2))\n", "points(jitter(age), I((wage>250)*.2), cex = .5, pch = \"|\", col = \"darkgrey\") # since we plot only up to 0.2 we plot the TRUEs at 0.2\n", "title(\"Degree-4 Polynomial\")\n", "lines(age.grid, exp(preds$fit)/(1 + exp(preds$fit)), lwd = 2, col = \"blue\")\n", "matlines(age.grid, se.bands, lwd = 1, col = \"blue\", lty = 3)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Splines" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We use the `splines` library.\n", "\n", "In the lecture we saw that regression splines can be fit by constructing an appropriate matrix of basis functions. The `bs()` function generates the entire matrix of basis functions for splines with the specified set of knots. By default, cubic splines are produced." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "library(splines)\n", "spline.fit = lm(wage ~ bs(age, knots = c(25, 40, 60)), data = Wage)\n", "spline.pred = predict(spline.fit, newdata = list(age = age.grid), se = T)\n", "plot(age, wage, col = \"gray\")\n", "lines(age.grid, spline.pred$fit, lwd = 2)\n", "lines(age.grid, spline.pred$fit - 2*spline.pred$se.fit, lty = \"dashed\")\n", "lines(age.grid, spline.pred$fit + 2*spline.pred$se.fit, lty = \"dashed\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Above we have prespecified knots at ages 25, 40 and 60. This produces a spline with six basis functions.\n", "Recall that a cubic spline with three knots has seven degrees of freedom; these degrees of freedom are used up by an intercept, plus six basis functions. " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "dim(bs(age, knots = c(25, 40, 60)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We could also use the `df` option to produce a spline with knots at uniform quantiles of the data." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "dim(bs(age, df = 6))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this case `R` chooses knots at ages 33.8, 42 and 51, which corresponds to the 25th, 50th and 75th percentiles of age." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "attr(bs(age, df = 6), \"knots\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The function `bs()` also has a `degree` argument, so we can fit splines of any degree, rather than the default degree of 3 (which yields a cubic spline)." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "dim(bs(age, knots = c(25, 40, 60), degree = 5))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In order to instead fit a natural spline, we use the `ns()` function." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "ns.fit = lm(wage ~ ns(age, knots = c(25, 40, 60), Boundary.knots = c(0, 100)), data = Wage)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To compare the different methods in how they interpolate and extrapolate we use now a larger range and plot the predictions of the different methods." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "age.grid = seq(0, 100, length = 100)\n", "ns.pred = predict(ns.fit, newdata = list(age = age.grid), se = T)\n", "bs.pred = predict(lm(wage ~ bs(age, knots = c(25, 40, 60), Boundary.knots = c(0, 100)), data = Wage), newdata = list(age = age.grid), se = T)\n", "p4.pred = predict(lm(wage ~ poly(age, 4), data = Wage), newdata = list(age = age.grid), se = T)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To make the plotting a bit more convenient we use the following function" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "plot.predictions = function(ages, pred, col = \"blue\") {\n", " se.bands = cbind(pred$fit - 2 * pred$se.fit, pred$fit + 2 * pred$se.fit)\n", " lines(ages, pred$fit, lwd = 2, col = col)\n", " matlines(ages, se.bands, lty = \"dashed\", col = col)\n", "}\n", "plot(age, wage, cex = .5, col = \"darkgrey\", xlim = c(0, 100), ylim = c(-20, 300))\n", "plot.predictions(age.grid, ns.pred, col = \"red\")\n", "plot.predictions(age.grid, bs.pred, col = \"darkgreen\")\n", "plot.predictions(age.grid, p4.pred, col = \"blue\")\n", "legend(x = 25, y = 20, legend = c(\"natural cubic spline\", \"cubic spline\", \"4th order polynomial\"),\n", " col = c(\"red\", \"darkgreen\", \"blue\"), lty = 1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Smoothing Splines" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In order to fit a smoothing spline, we use the `smooth.spline()` function." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "fit.smooth.cv = smooth.spline(age, wage)\n", "fit.smooth.cv" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We see the selected Degrees of Freedom using cross-validation.\n", "If instead we wish to set the defgrees of freedom manually, we can use" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "fit.smooth = smooth.spline(age, wage, df = 16)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now, let us plot the two smoothing splines." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "plot(age, wage, cex = .5, col = \"darkgrey\", xlim = agelims)\n", "lines(fit.smooth, col = \"red\", lwd = 2)\n", "lines(fit.smooth.cv, col = \"blue\", lwd = 2)\n", "legend(\"topright\", legend = c(\"16 Df\", \"6.5 DF\"), col = c(\"red\", \"blue\"), lty - 1, lwd = 2, cex = .8)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## GAMs" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We now fit a GAM to predict `wage` using natural spline functions of `year` and `age`, treating `education` as a qualitative predictor. Since this is just a big linear regressions model using an appropriate choice of basis functions, we can simply do this using the `lm()` function." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "gam1 = lm(wage ~ ns(year, 4) + ns(age, 5) + education, data = Wage)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can now plot predictions of `wage` given `age` while fixing the other variables to e.g. `year = 2005` and `education = \"1. < HS Grad\"`." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "pred.1 = predict(gam1, newdata = data.frame(age = age.grid,\n", " year = rep(2005, length(age.grid)),\n", " education = rep(\"1. < HS Grad\", length(age.grid))))\n", "pred.2 = predict(gam1, newdata = data.frame(age = age.grid,\n", " year = rep(2005, length(age.grid)),\n", " education = rep(\"4. College Grad\", length(age.grid))))\n", "pred.3 = predict(gam1, newdata = data.frame(age = age.grid,\n", " year = rep(2009, length(age.grid)),\n", " education = rep(\"1. < HS Grad\", length(age.grid))))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For plotting we select now all data in the years 2004 to 2006 for individuals with less than a High School degree and plot it together with our prediction." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ - "subset = year >= 2004 && year <= 2006 & education == \"1. < HS Grad\"\n", + "subset = year >= 2004 & year <= 2006 & education == \"1. < HS Grad\"\n", "plot(age[subset], wage[subset])\n", "lines(age.grid, pred.1, type = \"l\", col = \"red\")\n", "lines(age.grid, pred.2, type = \"l\", col = \"blue\")\n", "lines(age.grid, pred.3, type = \"l\", col = \"darkgreen\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note that the prediction for individual with a College Graduation or the prediction for the year 2009 is merely a shifted version of the original prediction. This is a consequence of the additivity of the model. The shape of the function `wage = f(age)` is independent of the other predictors; only the absolute level is influenced by the intercept and the other predictors." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For smoothing splines we use the `gam` library. The `s()` function is used to indicate that we would like to use a smoothing spline.\n", " \n", "The `gam` library also has a built-in plotting function that allows us to see the dependence of the `wage` independently of the other variables. Note that we would have to add the intercept and the choices for the other predictors to get the effective prediction of wage." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "library(gam)\n", "gam.m3 = gam(wage ~ s(year, 4) + s(age, 5) + education, data = Wage)\n", "plot(gam.m3, se = T, col = \"red\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Bias-Variance Decomposition (optional)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In the first lecture we saw the decomposition of the test error into bias and variance as a function of the flexibility of the method. With smoothing splines one can nicely generate such plots.\n", "\n", "The following code is at parts more involved than what you are used to. Try nevertheless to understand what is happing. You are not yet expected to write such code without guidance.\n", "\n", "The idea is to generate artificial data, where we know exactly what the true model is. The true model is given by the non-linear function `noisefree.generator`. The function `data.generator` creates each time a new data set by sampling some `x` values, applying the `noisefree.generator` function and adding normal noise with standard deviation 1 to get `y`." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "noisefree.generator = function(x) (-.1*(x-1)^4*(x < 1) - 2*x^3*sin(5*x) + x^2 - 4*x*(x > 0))\n", "data.generator = function(n) {\n", " x = 3*runif(n) - 1.5\n", " y = noisefree.generator(x) + rnorm(length(x))\n", " data.frame(x = x, y = y)\n", "}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let us plot some data points and some smooth spline fits together with the true function in red." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "data = data.generator(200)\n", "fit.1 = smooth.spline(data$x, data$y, df = 2)\n", "fit.2 = smooth.spline(data$x, data$y, df = 20)\n", "fit.3 = smooth.spline(data$x, data$y, df = 100)\n", "plot(data, col = \"darkgray\")\n", "lines(fit.1, col = \"purple\")\n", "lines(fit.2, col = \"darkgreen\")\n", "lines(fit.3, col = \"blue\")\n", "plot(noisefree.generator, add = T, xlim = c(-1.5, 1.5), col = \"red\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we create to functions that compute test and training errors for a given fit. The test error will be evaluated over 10000 new data points." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "test.error = function(fit) {\n", " test.data = data.generator(10000)\n", " pred = predict(fit, test.data$x)\n", " mean((pred$y - test.data$y)^2)\n", "}\n", "train.error = function(fit, x, y) {\n", " mean((predict(fit, x)$y - y)^2)\n", "}" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "list(test.error(fit.1), test.error(fit.2), test.error(fit.3))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "list(train.error(fit.1, data$x, data$y), train.error(fit.2, data$x, data$y), train.error(fit.3, data$x, data$y))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The following function `bias.variance` takes as input the number `k` of repetitions and the degree of freedom `df`. It then fits `k` times a smoothing spline of degree `df` on `k` different training sets from the same population.\n", "\n", "The squared bias of the model is then the mean squared difference between the average of the `k` smoothing splines and the true function.\n", "\n", "The variance is simply the variance of the `k` smoothing splines.\n", "\n", "Additionally we return the average test and training error." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "bias.variance = function(k, df = df) {\n", " predictions = matrix(rep(NA, k*1000), k, 1000)\n", " train.errors = rep(NA, k)\n", " test.errors = rep(NA, k)\n", " test.x = seq(-1.5, 1.5, length = 1000)\n", " for (i in 1:k) {\n", " data = data.generator(200) # each time another training set\n", " fit = smooth.spline(data$x, data$y, df = df)\n", " train.errors[i] = train.error(fit, data$x, data$y)\n", " test.errors[i] = test.error(fit)\n", " predictions[i,] = predict(fit, test.x)$y # function values for this fit\n", " }\n", " mean.pred = apply(predictions, 2, mean)\n", " bias.squared = mean((mean.pred - noisefree.generator(test.x))^2)\n", " var = mean(sweep(predictions, 2, mean.pred)^2)\n", " data.frame(bias.squared = bias.squared,\n", " variance = var, \n", " test.error = mean(test.errors), \n", " train.error = mean(train.errors))\n", "}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we run this function for many different degrees of freedom and plot the result. Evaluating this cell takes some minutes. You can also just look at the output from a previous run. We marked the irreducible error with a dashed line." ] }, { "cell_type": "code", "execution_count": 185, "metadata": {}, "outputs": [ { "data": { "image/png": "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\ngg==", "text/plain": [ "plot without title" ] }, "metadata": { "image/png": { "height": 420, "width": 420 }, "text/plain": { "height": 420, "width": 420 } }, "output_type": "display_data" } ], "source": [ "biases = rep(NA, 50)\n", "variances = rep(NA, 50)\n", "trainerr = rep(NA, 50)\n", "testerr = rep(NA, 50)\n", "for (i in 1:50) {\n", " res = bias.variance(1000, 2*i)\n", " biases[i] = res$bias.squared\n", " variances[i] = res$variance\n", " trainerr[i] = res$train.error\n", " testerr[i] = res$test.error\n", "}\n", "df = 2*(1:50)\n", "plot(df, biases, col = \"black\", type = \"l\", ylim = c(0, 4), xlab = \"DF\", ylab = \"error\")\n", "lines(df, variances, col = \"darkgreen\")\n", "lines(df, trainerr, col = \"blue\")\n", "lines(df, testerr, col = \"red\")\n", "lines(df, rep(1, 50), lty = \"dashed\")\n", "legend(\"topright\", legend = c(\"bias^2\", \"variance\", \"training error\", \"test error\"),\n", " col = c(\"black\", \"darkgreen\", \"blue\", \"red\"), lty = 1)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "R", "language": "R", "name": "ir" }, "language_info": { "codemirror_mode": "r", "file_extension": ".r", "mimetype": "text/x-r-source", "name": "R", "pygments_lexer": "r", "version": "3.6.1" } }, "nbformat": 4, "nbformat_minor": 2 }