class: center, middle, inverse, title-slide # Kable and Plotting and Code, Oh My! ### Chris Mellinger ### CU Boulder ### 2016/12/12 (updated: 2020-02-11) --- # Dimension Names in R **Reminder:** Matrices can have arbitrary numbers of dimensions, and have to contain values of all the same type. A vector can be thought of as a 1-dimensional matrix. ```r mat <- matrix( c( 3, 1, 5, 3, 5, 1 ), nrow = 3, byrow = TRUE ) ``` --- # Dimension Names in R ```r dimnames(mat) ``` ``` ## NULL ``` ```r rownames(mat) ``` ``` ## NULL ``` ```r colnames(mat) ``` ``` ## NULL ``` There are no dimension names yet! --- # Dimension Names in R Let's assign some row names. ```r rownames(mat) <- c("First Row", "Second Row", "Third Row") rownames(mat) ``` ``` ## [1] "First Row" "Second Row" "Third Row" ``` Notice that `rownames` works to both *see* and *assign* row names. --- # Dimension Names in R `colnames` is the same. ```r colnames(mat) <- c("Col 1", "Cool Column 2") colnames(mat) ``` ``` ## [1] "Col 1" "Cool Column 2" ``` Why do we care? Because we will use this when plotting. Jk, it's because everyone loves R!! --- # Barplots `barplot` takes a matrix of means. We made a matrix on the first slide. ```r mat ``` ``` ## Col 1 Cool Column 2 ## First Row 3 1 ## Second Row 5 3 ## Third Row 5 1 ``` --- # Barplots .pull-left[ What does `barplot` do by default? ```r barplot(mat) ``` ] .pull-right[ <!-- --> ] --- # Barplots .pull-left[ Ok, potentially useful, but not what we are used to. Let's change that: ```r barplot( mat, beside = T ) ``` So, columns define the level of 1 factor, and rows define the level of the other. ] .pull-right[ <!-- --> ] --- # Barplots Let's play around. ```r (matT <- t(mat)) # transpose the matrix ``` ``` ## First Row Second Row Third Row ## Col 1 3 5 5 ## Cool Column 2 1 3 1 ``` --- # Barplots .pull-left[ Let's play around. ```r barplot(matT, beside = T) ``` ] .pull-right[ <!-- --> ] --- # Barplots .pull-left[ We might want to know what those different columns mean. ```r barplot( matT, beside = T, legend.text = T ) ``` ] .pull-right[ <!-- --> ] --- # Barplots .pull-left[ We can change things about the legend, like where it goes. ```r barplot( matT, beside = T, legend.text = T, args.legend = list( x = "topleft" ) ) ``` Other viable `x` values are "topright", "bottomleft", "bottomright", "bottom", "top", "left", etc. See the help for `legend`. ] .pull-right[ <!-- --> ] --- # Barplots You may have noticed that the matrix we are working with contained the means from the homework last week. Let's regenerate it, but with more appropriate dimension names, and in the order we want the plot to appear in. ```r mat <- matrix( c( 1, 3, 3, 5, 1, 5 ), nrow = 3, byrow = TRUE ) colnames(mat) <- c("Low Expertise", "High Expertise") rownames(mat) <- c("Low Disc.", "Moderate Disc.", "High Disc.") ``` --- # Barplots .pull-left[ The full code I show in the key. ```r barplot( mat, beside = T, legend.text = T, ylim = c(0, 8), ylab = "Rating Change", main = "Rating Change by Condition" ) ``` ] .pull-right[ <!-- --> ] --- # Barplots .pull-left[ You can also use `ggplot`. ```r library(ggplot2) hDf <- data.frame( ratingChange=c(1,3,1, 3,5,5), expertise=factor( c("Non-Expert", "Non-Expert", "Non-Expert", "Expert", "Expert", "Expert"), levels=c("Non-Expert", "Expert") ), discrepancy=factor( c("low", "moderate", "high", "low", "moderate", "high"), levels = c("low", "moderate", "high") ) ) p <- ggplot(data=hDf, aes(x=expertise, y=ratingChange, fill=discrepancy)) + geom_bar(stat="identity", position=position_dodge()) + ggtitle("Rating Change by Condition") + labs(y = "Rating Change", x = "Expertise") print(p) ``` ] .pull-right[ <!-- --> I don't know about ggplot, but this was what I figured out for the key as an example. ] --- # Kable Kable just makes a table. You've seen it before, but here's a reminder. ```r library(knitr) kable(mat, format = 'html') ``` <table> <thead> <tr> <th style="text-align:left;"> </th> <th style="text-align:right;"> Low Expertise </th> <th style="text-align:right;"> High Expertise </th> </tr> </thead> <tbody> <tr> <td style="text-align:left;"> Low Disc. </td> <td style="text-align:right;"> 1 </td> <td style="text-align:right;"> 3 </td> </tr> <tr> <td style="text-align:left;"> Moderate Disc. </td> <td style="text-align:right;"> 3 </td> <td style="text-align:right;"> 5 </td> </tr> <tr> <td style="text-align:left;"> High Disc. </td> <td style="text-align:right;"> 1 </td> <td style="text-align:right;"> 5 </td> </tr> </tbody> </table> --- # Kable and a Source Table Last week, we wanted codes that would comprise the 2 (expertise: high vs. low) x 2 (discrepancy: low vs. moderate vs. high) ANOVA. ```r exp <- c( 1, 1, 1, -1, -1, -1) dLin <- c(-1, 0, 1, -1, 0, 1) dQuad <- c(-1, 2, -1, -1, 2, -1) codeMat <- rbind( exp, dLin, dQuad, eXdL = exp * dLin, # these two lines provide names eXdQ = exp * dQuad ) # add column names so Kable works better. colnames(codeMat) <- c( "HE, LD", "HE, MD", "HE, HD", "LE, LD", "LE, MD", "LE, HD" ) ``` --- # Kable and a Source Table ```r kable(codeMat, format = "html") ``` <table> <thead> <tr> <th style="text-align:left;"> </th> <th style="text-align:right;"> HE, LD </th> <th style="text-align:right;"> HE, MD </th> <th style="text-align:right;"> HE, HD </th> <th style="text-align:right;"> LE, LD </th> <th style="text-align:right;"> LE, MD </th> <th style="text-align:right;"> LE, HD </th> </tr> </thead> <tbody> <tr> <td style="text-align:left;"> exp </td> <td style="text-align:right;"> 1 </td> <td style="text-align:right;"> 1 </td> <td style="text-align:right;"> 1 </td> <td style="text-align:right;"> -1 </td> <td style="text-align:right;"> -1 </td> <td style="text-align:right;"> -1 </td> </tr> <tr> <td style="text-align:left;"> dLin </td> <td style="text-align:right;"> -1 </td> <td style="text-align:right;"> 0 </td> <td style="text-align:right;"> 1 </td> <td style="text-align:right;"> -1 </td> <td style="text-align:right;"> 0 </td> <td style="text-align:right;"> 1 </td> </tr> <tr> <td style="text-align:left;"> dQuad </td> <td style="text-align:right;"> -1 </td> <td style="text-align:right;"> 2 </td> <td style="text-align:right;"> -1 </td> <td style="text-align:right;"> -1 </td> <td style="text-align:right;"> 2 </td> <td style="text-align:right;"> -1 </td> </tr> <tr> <td style="text-align:left;"> eXdL </td> <td style="text-align:right;"> -1 </td> <td style="text-align:right;"> 0 </td> <td style="text-align:right;"> 1 </td> <td style="text-align:right;"> 1 </td> <td style="text-align:right;"> 0 </td> <td style="text-align:right;"> -1 </td> </tr> <tr> <td style="text-align:left;"> eXdQ </td> <td style="text-align:right;"> -1 </td> <td style="text-align:right;"> 2 </td> <td style="text-align:right;"> -1 </td> <td style="text-align:right;"> 1 </td> <td style="text-align:right;"> -2 </td> <td style="text-align:right;"> 1 </td> </tr> </tbody> </table> --- # Kable and a Source Table Now we need to calculate SSRs and betas. Here's our formulas: `$$b = \frac{\sum \lambda_k \bar{Y}_k}{\sum \lambda^2}$$` `$$SSR = \frac{\Big( \displaystyle\sum_{k} \lambda_k \bar{Y}_k \Big)^2}{\displaystyle\sum_{k} \frac{\lambda^2_k}{n_k}}$$` And translating to code: ```r betaCalc <- function (lVec, yBarVec) { sum(lVec * yBarVec) / sum(lVec^2) } ssrCalc <- function (lVec, yBarVec, nVec) { sum(lVec * yBarVec)^2 / sum(lVec^2 / nVec) } ``` --- # Kable and a Source Table We need cell means... ```r yBar <- c(3, 5, 5, 1, 3, 1) ``` ...and cell ns. ```r ns <- c(5, 5, 5, 5, 5, 5) ``` --- # Kable and a Source Table Now, our strategy is to just build vectors that represent each column we want. Let's initiate a matrix so we know what we are going for. We have: - 5 codes, a model line, an error line, a total line, and two extra rows for the 2-df discrepancy and interaction effects. - betas, dfs, SSs, MSs, Fs, ps, and PREs. *Pro tip:* It can really help to write this out on paper first, and then build it in R. --- # Kable and a Source Table .pull-left[ ```r (tmat <- matrix( nrow = 10, ncol = 7, dimnames = list( c( "Model", "Expertise", "Discrepancy", "linear", "quadratic", "interaction", "Exp*Lin", "Exp*Quad", "Error", "Total" ), c( "b", "df", "SS", "MS", "F", "p", "PRE" ) ))) ``` ] .pull-right[ ``` ## b df SS MS F p PRE ## Model NA NA NA NA NA NA NA ## Expertise NA NA NA NA NA NA NA ## Discrepancy NA NA NA NA NA NA NA ## linear NA NA NA NA NA NA NA ## quadratic NA NA NA NA NA NA NA ## interaction NA NA NA NA NA NA NA ## Exp*Lin NA NA NA NA NA NA NA ## Exp*Quad NA NA NA NA NA NA NA ## Error NA NA NA NA NA NA NA ## Total NA NA NA NA NA NA NA ``` ] --- # Kable and a Source Table It turns out that it is very useful to have our table array be a dataframe. This let's us use different kinds of values in different columns. ```r tdf <- as.data.frame(tmat) ``` --- # Kable and a Source Table Get the betas. When we put them in the matrix, we just need to leave NAs where the blanks should go. ```r tdf[,'b'] <- c( NA, # Model line betaCalc(codeMat['exp',], yBar), NA, # discrepancy line betaCalc(codeMat['dLin',], yBar), betaCalc(codeMat['dQuad',], yBar), NA, # interaction line betaCalc(codeMat['eXdL',], yBar), betaCalc(codeMat['eXdQ',], yBar), NA, # Error line NA # Total ) ``` --- # Kable and a Source Table Check out the result! ```r tdf ``` ``` ## b df SS MS F p PRE ## Model NA NA NA NA NA NA NA ## Expertise 1.3333333 NA NA NA NA NA NA ## Discrepancy NA NA NA NA NA NA NA ## linear 0.5000000 NA NA NA NA NA NA ## quadratic 0.5000000 NA NA NA NA NA NA ## interaction NA NA NA NA NA NA NA ## Exp*Lin 0.5000000 NA NA NA NA NA NA ## Exp*Quad -0.1666667 NA NA NA NA NA NA ## Error NA NA NA NA NA NA NA ## Total NA NA NA NA NA NA NA ``` So far so good. --- # Kable and a Source Table Keep going. I copied and pasted most of this, changed the `betaCalc` to `ssrCalc`, and made the necessary adjustments. ```r tdf[,'SS'] <- c( NA, # Model line ssrCalc(codeMat['exp',], yBar, ns), NA, # discrepancy line ssrCalc(codeMat['dLin',], yBar, ns), ssrCalc(codeMat['dQuad',], yBar, ns), NA, # interaction line ssrCalc(codeMat['eXdL',], yBar, ns), ssrCalc(codeMat['eXdQ',], yBar, ns), 12, # Error line NA # Total ) ``` --- # Kable and a Source Table After calculating everything else, we can get Model and 2df SSs. ```r tdf['Model', 'SS'] <- sum( tdf[c('Expertise', 'linear', 'quadratic', 'Exp*Lin', 'Exp*Quad'),], na.rm = T ) tdf['Discrepancy', 'SS'] <- sum(tdf[c('linear', 'quadratic'), 'SS']) tdf['interaction', 'SS'] <- sum(tdf[c('Exp*Lin', 'Exp*Quad'), 'SS']) ``` --- # Kable and a Source Table DFs are easy to just type in. Then MSEs are very easy. ```r tdf[,'df'] <- c(5, 1, 2, 1, 1, 2, 1, 1, 24, 29) tdf[,'MS'] <- tdf[,'SS'] / tdf[,'df'] ``` --- # Kable and a Source Table Fs and PREs are also not too bad. It's just that the last two have to be NA. ```r tdf[1:8, 'F'] <- tdf[1:8, 'MS'] / tdf['Error', 'MS'] tdf[1:8, 'PRE'] <- tdf[1:8, 'SS'] / (tdf[1:8, 'SS'] + tdf['Error', 'SS']) ``` `$$PRE = \frac{SSR}{SSE(C)} = \frac{SSR}{SSR + SSE(A)}$$` --- # Kable and a Source Table Let's look at what we have so far ```r kable(tdf, format = 'html') ``` <table> <thead> <tr> <th style="text-align:left;"> </th> <th style="text-align:right;"> b </th> <th style="text-align:right;"> df </th> <th style="text-align:right;"> SS </th> <th style="text-align:right;"> MS </th> <th style="text-align:right;"> F </th> <th style="text-align:left;"> p </th> <th style="text-align:right;"> PRE </th> </tr> </thead> <tbody> <tr> <td style="text-align:left;"> Model </td> <td style="text-align:right;"> NA </td> <td style="text-align:right;"> 5 </td> <td style="text-align:right;"> 82.666667 </td> <td style="text-align:right;"> 16.533333 </td> <td style="text-align:right;"> 33.066667 </td> <td style="text-align:left;"> NA </td> <td style="text-align:right;"> 0.8732394 </td> </tr> <tr> <td style="text-align:left;"> Expertise </td> <td style="text-align:right;"> 1.3333333 </td> <td style="text-align:right;"> 1 </td> <td style="text-align:right;"> 53.333333 </td> <td style="text-align:right;"> 53.333333 </td> <td style="text-align:right;"> 106.666667 </td> <td style="text-align:left;"> NA </td> <td style="text-align:right;"> 0.8163265 </td> </tr> <tr> <td style="text-align:left;"> Discrepancy </td> <td style="text-align:right;"> NA </td> <td style="text-align:right;"> 2 </td> <td style="text-align:right;"> 20.000000 </td> <td style="text-align:right;"> 10.000000 </td> <td style="text-align:right;"> 20.000000 </td> <td style="text-align:left;"> NA </td> <td style="text-align:right;"> 0.6250000 </td> </tr> <tr> <td style="text-align:left;"> linear </td> <td style="text-align:right;"> 0.5000000 </td> <td style="text-align:right;"> 1 </td> <td style="text-align:right;"> 5.000000 </td> <td style="text-align:right;"> 5.000000 </td> <td style="text-align:right;"> 10.000000 </td> <td style="text-align:left;"> NA </td> <td style="text-align:right;"> 0.2941176 </td> </tr> <tr> <td style="text-align:left;"> quadratic </td> <td style="text-align:right;"> 0.5000000 </td> <td style="text-align:right;"> 1 </td> <td style="text-align:right;"> 15.000000 </td> <td style="text-align:right;"> 15.000000 </td> <td style="text-align:right;"> 30.000000 </td> <td style="text-align:left;"> NA </td> <td style="text-align:right;"> 0.5555556 </td> </tr> <tr> <td style="text-align:left;"> interaction </td> <td style="text-align:right;"> NA </td> <td style="text-align:right;"> 2 </td> <td style="text-align:right;"> 6.666667 </td> <td style="text-align:right;"> 3.333333 </td> <td style="text-align:right;"> 6.666667 </td> <td style="text-align:left;"> NA </td> <td style="text-align:right;"> 0.3571429 </td> </tr> <tr> <td style="text-align:left;"> Exp*Lin </td> <td style="text-align:right;"> 0.5000000 </td> <td style="text-align:right;"> 1 </td> <td style="text-align:right;"> 5.000000 </td> <td style="text-align:right;"> 5.000000 </td> <td style="text-align:right;"> 10.000000 </td> <td style="text-align:left;"> NA </td> <td style="text-align:right;"> 0.2941176 </td> </tr> <tr> <td style="text-align:left;"> Exp*Quad </td> <td style="text-align:right;"> -0.1666667 </td> <td style="text-align:right;"> 1 </td> <td style="text-align:right;"> 1.666667 </td> <td style="text-align:right;"> 1.666667 </td> <td style="text-align:right;"> 3.333333 </td> <td style="text-align:left;"> NA </td> <td style="text-align:right;"> 0.1219512 </td> </tr> <tr> <td style="text-align:left;"> Error </td> <td style="text-align:right;"> NA </td> <td style="text-align:right;"> 24 </td> <td style="text-align:right;"> 12.000000 </td> <td style="text-align:right;"> 0.500000 </td> <td style="text-align:right;"> NA </td> <td style="text-align:left;"> NA </td> <td style="text-align:right;"> NA </td> </tr> <tr> <td style="text-align:left;"> Total </td> <td style="text-align:right;"> NA </td> <td style="text-align:right;"> 29 </td> <td style="text-align:right;"> NA </td> <td style="text-align:right;"> NA </td> <td style="text-align:right;"> NA </td> <td style="text-align:left;"> NA </td> <td style="text-align:right;"> NA </td> </tr> </tbody> </table> --- # Kable and a Source Table Now we need p-values. I'll do it here with code, but you could just look them up and type them in. ```r ps <- pf(q = tdf[1:8, 'F'], tdf[1:8, 'df'], 24, lower.tail = F) tdf[1:8,'p'] <- sapply( ps, function (pv) { if (pv < .001) { 'p < .001*' } else if (pv <= .05) { paste0('p = ', round(pv, 3), '*') } else { paste0('p = ', round(pv, 3)) } } ) ``` --- # Kable and a Source Table Print it out! It's too big (we should probably round values; *foreshadowing*). ```r kable(tdf, format='html') ``` <table> <thead> <tr> <th style="text-align:left;"> </th> <th style="text-align:right;"> b </th> <th style="text-align:right;"> df </th> <th style="text-align:right;"> SS </th> <th style="text-align:right;"> MS </th> <th style="text-align:right;"> F </th> <th style="text-align:left;"> p </th> <th style="text-align:right;"> PRE </th> </tr> </thead> <tbody> <tr> <td style="text-align:left;"> Model </td> <td style="text-align:right;"> NA </td> <td style="text-align:right;"> 5 </td> <td style="text-align:right;"> 82.666667 </td> <td style="text-align:right;"> 16.533333 </td> <td style="text-align:right;"> 33.066667 </td> <td style="text-align:left;"> p < .001* </td> <td style="text-align:right;"> 0.8732394 </td> </tr> <tr> <td style="text-align:left;"> Expertise </td> <td style="text-align:right;"> 1.3333333 </td> <td style="text-align:right;"> 1 </td> <td style="text-align:right;"> 53.333333 </td> <td style="text-align:right;"> 53.333333 </td> <td style="text-align:right;"> 106.666667 </td> <td style="text-align:left;"> p < .001* </td> <td style="text-align:right;"> 0.8163265 </td> </tr> <tr> <td style="text-align:left;"> Discrepancy </td> <td style="text-align:right;"> NA </td> <td style="text-align:right;"> 2 </td> <td style="text-align:right;"> 20.000000 </td> <td style="text-align:right;"> 10.000000 </td> <td style="text-align:right;"> 20.000000 </td> <td style="text-align:left;"> p < .001* </td> <td style="text-align:right;"> 0.6250000 </td> </tr> <tr> <td style="text-align:left;"> linear </td> <td style="text-align:right;"> 0.5000000 </td> <td style="text-align:right;"> 1 </td> <td style="text-align:right;"> 5.000000 </td> <td style="text-align:right;"> 5.000000 </td> <td style="text-align:right;"> 10.000000 </td> <td style="text-align:left;"> p = 0.004* </td> <td style="text-align:right;"> 0.2941176 </td> </tr> <tr> <td style="text-align:left;"> quadratic </td> <td style="text-align:right;"> 0.5000000 </td> <td style="text-align:right;"> 1 </td> <td style="text-align:right;"> 15.000000 </td> <td style="text-align:right;"> 15.000000 </td> <td style="text-align:right;"> 30.000000 </td> <td style="text-align:left;"> p < .001* </td> <td style="text-align:right;"> 0.5555556 </td> </tr> <tr> <td style="text-align:left;"> interaction </td> <td style="text-align:right;"> NA </td> <td style="text-align:right;"> 2 </td> <td style="text-align:right;"> 6.666667 </td> <td style="text-align:right;"> 3.333333 </td> <td style="text-align:right;"> 6.666667 </td> <td style="text-align:left;"> p = 0.005* </td> <td style="text-align:right;"> 0.3571429 </td> </tr> <tr> <td style="text-align:left;"> Exp*Lin </td> <td style="text-align:right;"> 0.5000000 </td> <td style="text-align:right;"> 1 </td> <td style="text-align:right;"> 5.000000 </td> <td style="text-align:right;"> 5.000000 </td> <td style="text-align:right;"> 10.000000 </td> <td style="text-align:left;"> p = 0.004* </td> <td style="text-align:right;"> 0.2941176 </td> </tr> <tr> <td style="text-align:left;"> Exp*Quad </td> <td style="text-align:right;"> -0.1666667 </td> <td style="text-align:right;"> 1 </td> <td style="text-align:right;"> 1.666667 </td> <td style="text-align:right;"> 1.666667 </td> <td style="text-align:right;"> 3.333333 </td> <td style="text-align:left;"> p = 0.08 </td> <td style="text-align:right;"> 0.1219512 </td> </tr> <tr> <td style="text-align:left;"> Error </td> <td style="text-align:right;"> NA </td> <td style="text-align:right;"> 24 </td> <td style="text-align:right;"> 12.000000 </td> <td style="text-align:right;"> 0.500000 </td> <td style="text-align:right;"> NA </td> <td style="text-align:left;"> NA </td> <td style="text-align:right;"> NA </td> </tr> <tr> <td style="text-align:left;"> Total </td> <td style="text-align:right;"> NA </td> <td style="text-align:right;"> 29 </td> <td style="text-align:right;"> NA </td> <td style="text-align:right;"> NA </td> <td style="text-align:right;"> NA </td> <td style="text-align:left;"> NA </td> <td style="text-align:right;"> NA </td> </tr> </tbody> </table> --- # Parting Thoughts - I used `format='html'` in my code. This should be 'hmtl', 'latex', or other appropriate things depending on how you are knitting. See the help. - Kable can round for you. See the help and the argument 'digits'. - You can assign row and column names in the `kable` statement. See the help and the 'row.names' and 'col.names' arguments. - You can set alignment. See the help and the `align` argument. - You can set the `NA` values to be something other than "NA"! See the help and read the "Details" section. - You are free to type things in by hand!! Don't torture yourself with code if you don't want/have to. - That said: ```r mod <- lm(mpg ~ vs * wt, data = mtcars) summary(mod)$coefficients ``` ``` ## Estimate Std. Error t value Pr(>|t|) ## (Intercept) 29.531444 2.6220822 11.262593 6.550372e-12 ## vs 11.766696 3.7638472 3.126242 4.100885e-03 ## wt -3.501310 0.6915244 -5.063177 2.333383e-05 ## vs:wt -2.909707 1.2156850 -2.393471 2.363436e-02 ``` --- # Final Product But I'm going to let you figure out some of these things from reading the help. <table> <thead> <tr> <th style="text-align:left;"> </th> <th style="text-align:center;"> b </th> <th style="text-align:center;"> df </th> <th style="text-align:center;"> SS </th> <th style="text-align:center;"> MS </th> <th style="text-align:center;"> F </th> <th style="text-align:center;"> p </th> <th style="text-align:center;"> PRE </th> </tr> </thead> <tbody> <tr> <td style="text-align:left;"> Model </td> <td style="text-align:center;"> </td> <td style="text-align:center;"> 5 </td> <td style="text-align:center;"> 82.667 </td> <td style="text-align:center;"> 16.533 </td> <td style="text-align:center;"> 33.067 </td> <td style="text-align:center;"> p < .001* </td> <td style="text-align:center;"> 0.873 </td> </tr> <tr> <td style="text-align:left;"> Expertise </td> <td style="text-align:center;"> 1.333 </td> <td style="text-align:center;"> 1 </td> <td style="text-align:center;"> 53.333 </td> <td style="text-align:center;"> 53.333 </td> <td style="text-align:center;"> 106.667 </td> <td style="text-align:center;"> p < .001* </td> <td style="text-align:center;"> 0.816 </td> </tr> <tr> <td style="text-align:left;"> Discrepancy </td> <td style="text-align:center;"> </td> <td style="text-align:center;"> 2 </td> <td style="text-align:center;"> 20.000 </td> <td style="text-align:center;"> 10.000 </td> <td style="text-align:center;"> 20.000 </td> <td style="text-align:center;"> p < .001* </td> <td style="text-align:center;"> 0.625 </td> </tr> <tr> <td style="text-align:left;"> linear </td> <td style="text-align:center;"> 0.500 </td> <td style="text-align:center;"> 1 </td> <td style="text-align:center;"> 5.000 </td> <td style="text-align:center;"> 5.000 </td> <td style="text-align:center;"> 10.000 </td> <td style="text-align:center;"> p = 0.004* </td> <td style="text-align:center;"> 0.294 </td> </tr> <tr> <td style="text-align:left;"> quadratic </td> <td style="text-align:center;"> 0.500 </td> <td style="text-align:center;"> 1 </td> <td style="text-align:center;"> 15.000 </td> <td style="text-align:center;"> 15.000 </td> <td style="text-align:center;"> 30.000 </td> <td style="text-align:center;"> p < .001* </td> <td style="text-align:center;"> 0.556 </td> </tr> <tr> <td style="text-align:left;"> interaction </td> <td style="text-align:center;"> </td> <td style="text-align:center;"> 2 </td> <td style="text-align:center;"> 6.667 </td> <td style="text-align:center;"> 3.333 </td> <td style="text-align:center;"> 6.667 </td> <td style="text-align:center;"> p = 0.005* </td> <td style="text-align:center;"> 0.357 </td> </tr> <tr> <td style="text-align:left;"> Exp*Lin </td> <td style="text-align:center;"> 0.500 </td> <td style="text-align:center;"> 1 </td> <td style="text-align:center;"> 5.000 </td> <td style="text-align:center;"> 5.000 </td> <td style="text-align:center;"> 10.000 </td> <td style="text-align:center;"> p = 0.004* </td> <td style="text-align:center;"> 0.294 </td> </tr> <tr> <td style="text-align:left;"> Exp*Quad </td> <td style="text-align:center;"> -0.167 </td> <td style="text-align:center;"> 1 </td> <td style="text-align:center;"> 1.667 </td> <td style="text-align:center;"> 1.667 </td> <td style="text-align:center;"> 3.333 </td> <td style="text-align:center;"> p = 0.08 </td> <td style="text-align:center;"> 0.122 </td> </tr> <tr> <td style="text-align:left;"> Error </td> <td style="text-align:center;"> </td> <td style="text-align:center;"> 24 </td> <td style="text-align:center;"> 12.000 </td> <td style="text-align:center;"> 0.500 </td> <td style="text-align:center;"> </td> <td style="text-align:center;"> </td> <td style="text-align:center;"> </td> </tr> <tr> <td style="text-align:left;"> Total </td> <td style="text-align:center;"> </td> <td style="text-align:center;"> 29 </td> <td style="text-align:center;"> </td> <td style="text-align:center;"> </td> <td style="text-align:center;"> </td> <td style="text-align:center;"> </td> <td style="text-align:center;"> </td> </tr> </tbody> </table>