From: Neil Smith Date: Thu, 22 Feb 2018 20:54:39 +0000 (+0000) Subject: Tweaked to have separate script for boilerplate X-Git-Url: https://git.njae.me.uk/?a=commitdiff_plain;h=923ed635a8798313db455184de7a575f49e7d05c;p=ou-jupyter-r-demo.git Tweaked to have separate script for boilerplate --- diff --git a/plot_extensions.R b/plot_extensions.R new file mode 100644 index 0000000..b72ddb0 --- /dev/null +++ b/plot_extensions.R @@ -0,0 +1,60 @@ +# Multiple plot function +# +# ggplot objects can be passed in ..., or to plotlist (as a list of ggplot objects) +# - cols: Number of columns in layout +# - layout: A matrix specifying the layout. If present, 'cols' is ignored. +# +# If the layout is something like matrix(c(1,2,3,3), nrow=2, byrow=TRUE), +# then plot 1 will go in the upper left, 2 will go in the upper right, and +# 3 will go all the way across the bottom. +# +multiplot <- function(..., plotlist=NULL, file, cols=1, layout=NULL) { + library(grid) + + # Make a list from the ... arguments and plotlist + plots <- c(list(...), plotlist) + + numPlots = length(plots) + + # If layout is NULL, then use 'cols' to determine layout + if (is.null(layout)) { + # Make the panel + # ncol: Number of columns of plots + # nrow: Number of rows needed, calculated from # of cols + layout <- matrix(seq(1, cols * ceiling(numPlots/cols)), + ncol = cols, nrow = ceiling(numPlots/cols)) + } + + if (numPlots==1) { + print(plots[[1]]) + + } else { + # Set up the page + grid.newpage() + pushViewport(viewport(layout = grid.layout(nrow(layout), ncol(layout)))) + + # Make each plot, in the correct location + for (i in 1:numPlots) { + # Get the i,j matrix positions of the regions that contain this subplot + matchidx <- as.data.frame(which(layout == i, arr.ind = TRUE)) + + print(plots[[i]], vp = viewport(layout.pos.row = matchidx$row, + layout.pos.col = matchidx$col)) + } + } +} + +# From https://sejohnston.com/2012/08/09/a-quick-and-easy-function-to-plot-lm-results-in-r/ +ggplotRegression <- function (fit) { + +require(ggplot2) + +ggplot(fit$model, aes_string(x = names(fit$model)[2], y = names(fit$model)[1])) + + geom_point() + + stat_smooth(method = "lm", col = "red") + + labs(title = paste("Adj R2 = ",signif(summary(fit)$adj.r.squared, 5), + "Intercept =",signif(fit$coef[[1]],5 ), + " Slope =",signif(fit$coef[[2]], 5), + " P =",signif(summary(fit)$coef[2,4], 5))) + + theme(plot.title = element_text(size=12)) +} diff --git a/section5.1.ipynb b/section5.1.ipynb index 9a234b9..3539ef0 100644 --- a/section5.1.ipynb +++ b/section5.1.ipynb @@ -16,14 +16,13 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": null, "metadata": { "init_cell": true }, "outputs": [], "source": [ "library(tidyverse)\n", - "# library(cowplot)\n", "library(repr)\n", "library(ggfortify)\n", "\n", @@ -33,81 +32,13 @@ }, { "cell_type": "code", - "execution_count": 26, - "metadata": { - "init_cell": true - }, - "outputs": [], - "source": [ - "# Multiple plot function\n", - "#\n", - "# ggplot objects can be passed in ..., or to plotlist (as a list of ggplot objects)\n", - "# - cols: Number of columns in layout\n", - "# - layout: A matrix specifying the layout. If present, 'cols' is ignored.\n", - "#\n", - "# If the layout is something like matrix(c(1,2,3,3), nrow=2, byrow=TRUE),\n", - "# then plot 1 will go in the upper left, 2 will go in the upper right, and\n", - "# 3 will go all the way across the bottom.\n", - "#\n", - "multiplot <- function(..., plotlist=NULL, file, cols=1, layout=NULL) {\n", - " library(grid)\n", - "\n", - " # Make a list from the ... arguments and plotlist\n", - " plots <- c(list(...), plotlist)\n", - "\n", - " numPlots = length(plots)\n", - "\n", - " # If layout is NULL, then use 'cols' to determine layout\n", - " if (is.null(layout)) {\n", - " # Make the panel\n", - " # ncol: Number of columns of plots\n", - " # nrow: Number of rows needed, calculated from # of cols\n", - " layout <- matrix(seq(1, cols * ceiling(numPlots/cols)),\n", - " ncol = cols, nrow = ceiling(numPlots/cols))\n", - " }\n", - "\n", - " if (numPlots==1) {\n", - " print(plots[[1]])\n", - "\n", - " } else {\n", - " # Set up the page\n", - " grid.newpage()\n", - " pushViewport(viewport(layout = grid.layout(nrow(layout), ncol(layout))))\n", - "\n", - " # Make each plot, in the correct location\n", - " for (i in 1:numPlots) {\n", - " # Get the i,j matrix positions of the regions that contain this subplot\n", - " matchidx <- as.data.frame(which(layout == i, arr.ind = TRUE))\n", - "\n", - " print(plots[[i]], vp = viewport(layout.pos.row = matchidx$row,\n", - " layout.pos.col = matchidx$col))\n", - " }\n", - " }\n", - "}" - ] - }, - { - "cell_type": "code", - "execution_count": 27, + "execution_count": null, "metadata": { "init_cell": true }, "outputs": [], "source": [ - "# From https://sejohnston.com/2012/08/09/a-quick-and-easy-function-to-plot-lm-results-in-r/\n", - "ggplotRegression <- function (fit) {\n", - "\n", - "require(ggplot2)\n", - "\n", - "ggplot(fit$model, aes_string(x = names(fit$model)[2], y = names(fit$model)[1])) + \n", - " geom_point() +\n", - " stat_smooth(method = \"lm\", col = \"red\") +\n", - " labs(title = paste(\"Adj R2 = \",signif(summary(fit)$adj.r.squared, 5),\n", - " \"Intercept =\",signif(fit$coef[[1]],5 ),\n", - " \" Slope =\",signif(fit$coef[[2]], 5),\n", - " \" P =\",signif(summary(fit)$coef[2,4], 5))) + \n", - " theme(plot.title = element_text(size=12))\n", - "}" + "source('plot_extensions.R')" ] }, { @@ -121,7 +52,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 4, "metadata": { "scrolled": true }, @@ -290,7 +221,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 5, "metadata": { "scrolled": false }, @@ -322,7 +253,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 6, "metadata": {}, "outputs": [ { @@ -400,34 +331,18 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 7, "metadata": {}, - "outputs": [ - { - "data": {}, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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\nzJgxIyoqyvShWCyePXt2WFiYKx7LifQBARWLFhXk5BSnp6vM6icIQlFU1G/16hEzZ/bKyBBZ\nGzDiFcQOALgvnBZrncefFutSpaWlRUVFwcHBQ4YMsbFOxP63KHtOi2VZ9urVq2VlZQqFIiYm\nxs/Pr3NFu4Wt02JZ1vf06bCsLPPpHUaMQlH3+OOVqanqvn3dV6tNEomEZVmrk/AFNMiC02L5\nBqfF8orTT4tF4LAOgaNrtFrt66+/vnnzZuOHAwcO/L//+7+4uDjbX3Xf5MGT4+kdZ8/x9Iqr\nV0O3bQvas8dyPIWilOPGVSxe3BIb6/JC78dG4DASROxA4OAbBA5eQeCwhMBhg/sDx9///vcv\nvvjCvKVnz54///yzaf8G2zpKHt0qcBhJqqtDt2wJzcmh270XtowYUZmaqnz0UZbibEj0voHD\niOexw/7AodfrGYaRSCTuKawLEDh4BYHDKszhAKfRaDTr16+3aCwvL9+5c6edd4g04+zqBEYb\nGlr68stnd+26uWqVxUiK97lzA1auHD5rVo8NG0x7mPKTB8ztuHr1akpKSt++fSMiIqZMmZKf\nn891RQBChcABTlNTU2N1Q7rS0tIu3A3JgzCdCZedfW316pbhw80vScvLe69dO2LmzN5r10r4\nvWmYcGNHbW1tUlLS4cOHtVqtwWA4e/ZsSkpKQUEB13UBCBICBzhNcHCw1T7nnj17OnJbY+yI\niYlx5CaCxlJUw+TJhV9/Xfj11w2TJ5uPpIiam3ts2DAiKSkqPV1RVMRhkfclxNixdu1ai+3j\nNBrNu+++y1U9AIKGwAFOI5PJFi1aZNEYFhaWlJTklPujz6Nl+PBrq1ef/+GHqpQUxuzAAlKn\nC8rLG7pw4aCXXvJrt8iFV4QVOy5dutS+8eLFi+6vBMADYKdRcKZ//OMf9fX127dvN37Yr1+/\nzz//PDAw0LmPwtsTa91D06tXyYoVZc8/H5qTE5qdbT6e4nv6tO/p06p+/apSU+sSEhi+TnIU\nygm0Pj4+7Rt9fX3dXwmYtLW1bdu2raioKDw8fObMmX369OG6IrAXVqlYh1UqjiguLi4sLAwJ\nCYmNjXXKxH6SJP39/RsaGmw8ouOP4gb2r1KxE6nXBxw5Ep6Z6XXhgsUlfUBATWJiVUrKPTuZ\nOomdq1TswWHsuO8qlV27di1ZssSi8bXXXnvjjTdcX13ndJNVKjdu3Jg1a1ZZWZnxQ5lM9umn\n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\nSUVORK5CYII=", - "text/plain": [ - "plot without title" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ - "ggplot(rubber, aes(x=hardness, y=loss)) + \n", - " geom_point() +\n", - " stat_smooth(method = \"lm\", col = \"red\")" + "# ggplot(rubber, aes(x=hardness, y=loss)) + \n", + "# geom_point() +\n", + "# stat_smooth(method = \"lm\", col = \"red\")" ] }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 8, "metadata": {}, "outputs": [ { @@ -467,13 +382,88 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "# Your solution here" ] }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "\n", + "Call:\n", + "lm(formula = loss ~ strength, data = rubber)\n", + "\n", + "Residuals:\n", + " Min 1Q Median 3Q Max \n", + "-155.640 -59.919 2.795 61.221 183.285 \n", + "\n", + "Coefficients:\n", + " Estimate Std. Error t value Pr(>|t|) \n", + "(Intercept) 305.2248 79.9962 3.815 0.000688 ***\n", + "strength -0.7192 0.4347 -1.654 0.109232 \n", + "---\n", + "Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1\n", + "\n", + "Residual standard error: 85.56 on 28 degrees of freedom\n", + "Multiple R-squared: 0.08904,\tAdjusted R-squared: 0.0565 \n", + "F-statistic: 2.737 on 1 and 28 DF, p-value: 0.1092\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "
DfSum SqMean SqF valuePr(>F)
strength 1 20034.7720034.7722.736769 0.1092317
Residuals28 204976.59 7320.593 NA NA
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|lllll}\n", + " & Df & Sum Sq & Mean Sq & F value & Pr(>F)\\\\\n", + "\\hline\n", + "\tstrength & 1 & 20034.77 & 20034.772 & 2.736769 & 0.1092317\\\\\n", + "\tResiduals & 28 & 204976.59 & 7320.593 & NA & NA\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "| | Df | Sum Sq | Mean Sq | F value | Pr(>F) | \n", + "|---|---|\n", + "| strength | 1 | 20034.77 | 20034.772 | 2.736769 | 0.1092317 | \n", + "| Residuals | 28 | 204976.59 | 7320.593 | NA | NA | \n", + "\n", + "\n" + ], + "text/plain": [ + " Df Sum Sq Mean Sq F value Pr(>F) \n", + "strength 1 20034.77 20034.772 2.736769 0.1092317\n", + "Residuals 28 204976.59 7320.593 NA NA" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fit <- lm(loss ~ strength, data = rubber)\n", + "summary(fit)\n", + "anova(fit)" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -483,7 +473,7 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 11, "metadata": { "solution2": "hidden" }, @@ -560,7 +550,7 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 12, "metadata": {}, "outputs": [ { @@ -614,7 +604,7 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 13, "metadata": {}, "outputs": [ { @@ -694,7 +684,7 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 14, "metadata": {}, "outputs": [ { @@ -779,7 +769,7 @@ }, { "cell_type": "code", - "execution_count": 38, + "execution_count": 15, "metadata": {}, "outputs": [ { @@ -846,7 +836,7 @@ }, { "cell_type": "code", - "execution_count": 39, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -863,25 +853,9 @@ }, { "cell_type": "code", - "execution_count": 40, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": {}, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAtAAAAHgCAMAAAC7G6qeAAADAFBMVEUAAAABAQECAgIDAwME\nBAQFBQUGBgYHBwcICAgJCQkKCgoLCwsMDAwNDQ0ODg4PDw8QEBARERESEhITExMUFBQVFRUW\nFhYXFxcYGBgZGRkaGhobGxscHBwdHR0eHh4fHx8gICAhISEiIiIjIyMkJCQlJSUmJiYnJyco\nKCgpKSkqKiorKyssLCwtLS0uLi4vLy8wMDAxMTEyMjIzMzM0NDQ1NTU2NjY3Nzc4ODg5OTk6\nOjo7Ozs8PDw9PT0+Pj4/Pz9AQEBBQUFCQkJDQ0NERERFRUVGRkZHR0dISEhJSUlKSkpLS0tM\nTExNTU1OTk5PT09QUFBRUVFSUlJTU1NUVFRVVVVWVlZXV1dYWFhZWVlaWlpbW1tcXFxdXV1e\nXl5fX19gYGBhYWFiYmJjY2NkZGRlZWVmZmZnZ2doaGhpaWlqampra2tsbGxtbW1ubm5vb29w\ncHBxcXFycnJzc3N0dHR1dXV2dnZ3d3d4eHh5eXl6enp7e3t8fHx9fX1+fn5/f3+AgICBgYGC\ngoKDg4OEhISFhYWGhoaHh4eIiIiJiYmKioqLi4uMjIyNjY2Ojo6Pj4+QkJCRkZGSkpKTk5OU\nlJSVlZWWlpaXl5eYmJiZmZmampqbm5ucnJydnZ2enp6fn5+goKChoaGioqKjo6OkpKSlpaWm\npqanp6eoqKipqamqqqqrq6usrKytra2urq6vr6+wsLCxsbGysrKzs7O0tLS1tbW2tra3t7e4\nuLi5ubm6urq7u7u8vLy9vb2+vr6/v7/AwMDBwcHCwsLDw8PExMTFxcXGxsbHx8fIyMjJycnK\nysrLy8vMzMzNzc3Ozs7Pz8/Q0NDR0dHS0tLT09PU1NTV1dXW1tbX19fY2NjZ2dna2trb29vc\n3Nzd3d3e3t7f39/g4ODh4eHi4uLj4+Pk5OTl5eXm5ubn5+fo6Ojp6enq6urr6+vs7Ozt7e3u\n7u7v7+/w8PDx8fHy8vLz8/P09PT19fX29vb39/f4+Pj5+fn6+vr7+/v8/Pz9/f3+/v7////i\nsF19AAAACXBIWXMAABJ0AAASdAHeZh94AAAgAElEQVR4nO3de4BM9f/H8eMSYQkpVER3hfq6\ndPUNSemyG7Jkk0tUSj+pvgklEUmJ+ipfkco3XYhCpZtck9Z3V25Zu+6X3bU7WrvW3mf28zvn\n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\nzC8txQAAAABJRU5ErkJggg==", - "text/plain": [ - "plot without title" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "anaerobic <- read.csv('anaerob.csv')\n", "ggplot(anaerobic, aes(x=oxygen, y=ventil)) + geom_point()" @@ -895,7 +869,7 @@ "\n", "a. Using GenStat, perform the regression of expired ventilation (`ventil`) on oxygen uptake (`oxygen`). Are you at all surprised by how good this regression model seems?\n", "\n", - "b. Now form a new variable `oxy2`, say, by squaring oxygen. (Create a new column in the `anearobic` dataframe which is `anaerobic$oxygen ^ 2`.) Perform the regression of ventil on `oxygen` and `oxy2`. Comment on the fit of this model according to the printed output (and with recourse to Figure 3.2 in Example 3.1).\n", + "b. Now form a new variable `oxy2`, say, by squaring oxygen. (Create a new column in the `anearobic` dataframe which is `anaerobic$oxygen ^ 2`.) Perform the regression of `ventil` on `oxygen` and `oxy2`. Comment on the fit of this model according to the printed output (and with recourse to Figure 3.2 in Example 3.1).\n", "\n", "c. Make the usual residual plots and comment on the fit of the model again.\n", "\n", @@ -904,7 +878,7 @@ }, { "cell_type": "code", - "execution_count": 41, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ diff --git a/section5.1solutions.ipynb b/section5.1solutions.ipynb index 4c7507a..1ef5c8e 100644 --- a/section5.1solutions.ipynb +++ b/section5.1solutions.ipynb @@ -18,7 +18,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "metadata": { "hidden": true, "init_cell": true @@ -36,83 +36,13 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "metadata": { - "hidden": true, "init_cell": true }, "outputs": [], "source": [ - "# Multiple plot function\n", - "#\n", - "# ggplot objects can be passed in ..., or to plotlist (as a list of ggplot objects)\n", - "# - cols: Number of columns in layout\n", - "# - layout: A matrix specifying the layout. If present, 'cols' is ignored.\n", - "#\n", - "# If the layout is something like matrix(c(1,2,3,3), nrow=2, byrow=TRUE),\n", - "# then plot 1 will go in the upper left, 2 will go in the upper right, and\n", - "# 3 will go all the way across the bottom.\n", - "#\n", - "multiplot <- function(..., plotlist=NULL, file, cols=1, layout=NULL) {\n", - " library(grid)\n", - "\n", - " # Make a list from the ... arguments and plotlist\n", - " plots <- c(list(...), plotlist)\n", - "\n", - " numPlots = length(plots)\n", - "\n", - " # If layout is NULL, then use 'cols' to determine layout\n", - " if (is.null(layout)) {\n", - " # Make the panel\n", - " # ncol: Number of columns of plots\n", - " # nrow: Number of rows needed, calculated from # of cols\n", - " layout <- matrix(seq(1, cols * ceiling(numPlots/cols)),\n", - " ncol = cols, nrow = ceiling(numPlots/cols))\n", - " }\n", - "\n", - " if (numPlots==1) {\n", - " print(plots[[1]])\n", - "\n", - " } else {\n", - " # Set up the page\n", - " grid.newpage()\n", - " pushViewport(viewport(layout = grid.layout(nrow(layout), ncol(layout))))\n", - "\n", - " # Make each plot, in the correct location\n", - " for (i in 1:numPlots) {\n", - " # Get the i,j matrix positions of the regions that contain this subplot\n", - " matchidx <- as.data.frame(which(layout == i, arr.ind = TRUE))\n", - "\n", - " print(plots[[i]], vp = viewport(layout.pos.row = matchidx$row,\n", - " layout.pos.col = matchidx$col))\n", - " }\n", - " }\n", - "}" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": { - "hidden": true, - "init_cell": true - }, - "outputs": [], - "source": [ - "# From https://sejohnston.com/2012/08/09/a-quick-and-easy-function-to-plot-lm-results-in-r/\n", - "ggplotRegression <- function (fit) {\n", - "\n", - "require(ggplot2)\n", - "\n", - "ggplot(fit$model, aes_string(x = names(fit$model)[2], y = names(fit$model)[1])) + \n", - " geom_point() +\n", - " stat_smooth(method = \"lm\", col = \"red\") +\n", - " labs(title = paste(\"Adj R2 = \",signif(summary(fit)$adj.r.squared, 5),\n", - " \"Intercept =\",signif(fit$coef[[1]],5 ),\n", - " \" Slope =\",signif(fit$coef[[2]], 5),\n", - " \" P =\",signif(summary(fit)$coef[2,4], 5))) + \n", - " theme(plot.title = element_text(size=12))\n", - "}" + "source('plot_extensions.R')" ] }, { @@ -131,7 +61,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 4, "metadata": {}, "outputs": [ { @@ -202,7 +132,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 5, "metadata": {}, "outputs": [ { @@ -223,6 +153,13 @@ "multiplot(taheat, tsheat, cols=2)" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Blah, blah, comment, blah." + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -232,7 +169,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 11, "metadata": {}, "outputs": [ { @@ -300,14 +237,14 @@ } ], "source": [ - "fit <- lm(heat ~ TA, data = cemheat)\n", - "summary(fit)\n", - "anova(fit)" + "fit.ta <- lm(heat ~ TA, data = cemheat)\n", + "summary(fit.ta)\n", + "anova(fit.ta)" ] }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 12, "metadata": {}, "outputs": [ { @@ -327,12 +264,12 @@ } ], "source": [ - "ggplotRegression(fit)" + "ggplotRegression(fit.ta)" ] }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 13, "metadata": {}, "outputs": [ { @@ -400,14 +337,14 @@ } ], "source": [ - "fit <- lm(heat ~ TS, data = cemheat)\n", - "summary(fit)\n", - "anova(fit)" + "fit.ts <- lm(heat ~ TS, data = cemheat)\n", + "summary(fit.ts)\n", + "anova(fit.ts)" ] }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 14, "metadata": {}, "outputs": [ { @@ -427,12 +364,12 @@ } ], "source": [ - "ggplotRegression(fit)" + "ggplotRegression(fit.ts)" ] }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 15, "metadata": {}, "outputs": [ { @@ -505,9 +442,71 @@ } ], "source": [ - "fit <- lm(heat ~ TA + TS, data = cemheat)\n", - "summary(fit)\n", - "anova(fit)" + "fit.tats <- lm(heat ~ TA + TS, data = cemheat)\n", + "summary(fit.tats)\n", + "anova(fit.tats)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now combine the results into one dataframe for easy comparison." + ] + }, + { + "cell_type": "code", + "execution_count": 112, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
VarsAdj.R.2
TA 0.4915797
TS 0.6359290
TA, TS 0.9744140
\n" + ], + "text/latex": [ + "\\begin{tabular}{r|ll}\n", + " Vars & Adj.R.2\\\\\n", + "\\hline\n", + "\t TA & 0.4915797\\\\\n", + "\t TS & 0.6359290\\\\\n", + "\t TA, TS & 0.9744140\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "Vars | Adj.R.2 | \n", + "|---|---|---|\n", + "| TA | 0.4915797 | \n", + "| TS | 0.6359290 | \n", + "| TA, TS | 0.9744140 | \n", + "\n", + "\n" + ], + "text/plain": [ + " Vars Adj.R.2 \n", + "1 TA 0.4915797\n", + "2 TS 0.6359290\n", + "3 TA, TS 0.9744140" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fits <- list(fit.ta, fit.ts, fit.tats)\n", + "data.frame(\n", + " \"Vars\" = sapply(fits, function(x) toString(attr(summary(x)$terms, \"variables\")[-(1:2)]) ),\n", + " \"Adj R^2\" = sapply(fits, function(x) summary(x)$adj.r.squared)\n", + ")" ] }, { @@ -519,7 +518,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 113, "metadata": {}, "outputs": [ { @@ -543,7 +542,7 @@ } ], "source": [ - "predict(fit, data.frame(\"TA\" = 15, \"TS\" = 55))" + "predict(fit.tats, data.frame(\"TA\" = 15, \"TS\" = 55))" ] }, { @@ -555,7 +554,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 114, "metadata": {}, "outputs": [ { @@ -575,7 +574,7 @@ } ], "source": [ - "autoplot(fit)" + "autoplot(fit.tats)" ] }, { @@ -587,7 +586,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 35, "metadata": {}, "outputs": [ { @@ -620,7 +619,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 36, "metadata": {}, "outputs": [ { @@ -695,7 +694,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 37, "metadata": {}, "outputs": [ { @@ -720,7 +719,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 38, "metadata": {}, "outputs": [ { @@ -748,12 +747,12 @@ "metadata": {}, "source": [ "### Now form a new variable `oxy2`, say, by squaring oxygen.\n", - "(Create a new column in the `anearobic` dataframe which is `anaerobic$oxygen ^ 2`.) Perform the regression of ventil on `oxygen` and `oxy2`. Comment on the fit of this model according to the printed output (and with recourse to Figure 3.2 in Example 3.1)." + "(Create a new column in the `anearobic` dataframe which is `anaerobic$oxygen ^ 2`.) Perform the regression of `ventil` on `oxygen` and `oxy2`. Comment on the fit of this model according to the printed output (and with recourse to Figure 3.2 in Example 3.1)." ] }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 39, "metadata": {}, "outputs": [ { @@ -817,7 +816,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 40, "metadata": {}, "outputs": [ { @@ -904,7 +903,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 41, "metadata": {}, "outputs": [ { @@ -929,7 +928,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 42, "metadata": {}, "outputs": [ {