This is an R Markdown Notebook. When you execute code within the notebook, the results appear beneath the code. Discussion Instructor Bowen Hu 1335 I email: bhu35@wisc.edu her office hours are: MF 11-12 Data: we are studiying the influence of soil temperature on early growth of read oak seedligns, the following data were collected: x=daily degree hours of soil heat, y= shoot elongation cm per seedling.

discx <- c(344 ,494, 612, 467, 358, 587, 335, 499, 560, 682, 307, 562, 436, 635, 322, 532)
discy <- c(4.7, 9.3, 12.8, 9.8, 3.7, 11.5, 3.3, 8.2 ,10.3, 13.0, 4.9, 10.7, 6.0, 11.1, 3.4 ,10.7)

Creating dataframe out of the 2 vectors above

Naming dataframe

names(heat_growth) <- c("degree_hours", "elongation") 

Optionally Print the dataframe that we just created

heat_growth 

Calling package ggplot2 into our global environment (you might need to install it first)

library(ggplot2)

Creating scatter plot using the ggplot2 R package

disc_scatter_plot <- ggplot(heat_growth, aes(x= degree_hours,
                                             y = elongation)) +geom_point()+ 
                                              labs(x= "Daily degree hours of soil Heat", y = "Shoot elongation (cm)")+
geom_smooth(method = lm, se=F)
disc_scatter_plot

Using R based functions to plot

plot(heat_growth$degree_hours,heat_growth$elongation, xlab = "Daily Degrees hours of soil heat", ylab= "Shoot elongation (cm)")
abline(fit_model)

# Ploting using R based functions
#adding a fitting line

Fiting a model #the “velocity~load” statement below is called a “formula” it indicates that we’ll use load to explain velocity

summary(fit_model)# summary of the fitted model

Call:
lm(formula = elongation ~ degree_hours, data = heat_growth)

Residuals:
     Min       1Q   Median       3Q      Max 
-1.37300 -0.81473  0.01413  0.74061  1.90535 

Coefficients:
              Estimate Std. Error t value Pr(>|t|)    
(Intercept)  -4.832051   1.086548  -4.447 0.000552 ***
degree_hours  0.027252   0.002185  12.474 5.68e-09 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.028 on 14 degrees of freedom
Multiple R-squared:  0.9175,    Adjusted R-squared:  0.9116 
F-statistic: 155.6 on 1 and 14 DF,  p-value: 5.678e-09

The least squares estimates for the intercept and slope coefficients are given in the Estimates column. The t statistics are obtained by dividing each coefficient by its corresponding standard error. The p-values in the Pr(T>|t|) column correspond to tests of a coefficient being 0 vs. the two-sided alternative. Intercept corresponds to Bo, the slope corresponds to the name of the x variable.

Constructing QQplot of residuals and “residuals vrs fitted values” plot and comment. Residuals are extracted with the function residuals(). QQ plot on ggplot2 based function residuals (fit_model) extracts the residuals from the model QQnorm can be done using this code: qqnorm(residuals(fit_model)) Residuals vrs fitted was created using this code: plot(residuals(fit_model)~fitted(fit_model), ylab = “fitted values”, xlab= “residuals”) abline(h=0)

residuals(fit_model)
         1          2          3          4          5          6          7          8          9         10 
 0.1573474  0.6695405  0.9537991  1.9053457 -1.2241813  0.3351003 -0.9973842 -0.5667197 -0.1290945 -0.7538441 
        11         12         13         14         15         16 
 1.3656730  0.2164014 -1.0498408 -1.3729979 -0.5431076  1.0339628 
qqnorm(residuals(fit_model), main = "QQplot of residuals")

plot(residuals(fit_model)~fitted(fit_model), ylab = "Fitted values", xlab= "Residuals", main= "Residuals vrs Fitted value")
abline(h=0)

Constructing ANOVA table for this dataset and testing whether the slope is significantly different than zero

anova(fit_model)
Analysis of Variance Table

Response: elongation
             Df  Sum Sq Mean Sq F value    Pr(>F)    
degree_hours  1 164.369 164.369  155.61 5.678e-09 ***
Residuals    14  14.788   1.056                      
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Predicting We can use the predict() function and the fitted model object fit to make predictions of the y values for new data

LS0tDQp0aXRsZTogIjU3MiBSIERpc2N1c3Npb24gMSwgIFJlZ3Jlc3Npb24gQW5kcmV5IFZlZ2EiDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQpUaGlzIGlzIGFuIFtSIE1hcmtkb3duXShodHRwOi8vcm1hcmtkb3duLnJzdHVkaW8uY29tKSBOb3RlYm9vay4gV2hlbiB5b3UgZXhlY3V0ZSBjb2RlIHdpdGhpbiB0aGUgbm90ZWJvb2ssIHRoZSByZXN1bHRzIGFwcGVhciBiZW5lYXRoIHRoZSBjb2RlLiANCkRpc2N1c3Npb24gSW5zdHJ1Y3RvciBCb3dlbiBIdSAxMzM1IEkgZW1haWw6IGJodTM1QHdpc2MuZWR1IGhlciBvZmZpY2UgaG91cnMgYXJlOiBNRiAxMS0xMg0KRGF0YTogd2UgYXJlIHN0dWRpeWluZyB0aGUgaW5mbHVlbmNlIG9mIHNvaWwgdGVtcGVyYXR1cmUgb24gZWFybHkgZ3Jvd3RoIG9mIHJlYWQgb2FrIHNlZWRsaWducywNCiAgICAgdGhlIGZvbGxvd2luZyBkYXRhIHdlcmUgY29sbGVjdGVkOiB4PWRhaWx5IGRlZ3JlZSBob3VycyBvZiBzb2lsIGhlYXQsIHk9IHNob290IGVsb25nYXRpb24gY20gcGVyIHNlZWRsaW5nLg0KDQoNCmBgYHtyfQ0KZGlzY3ggPC0gYygzNDQgLDQ5NCwgNjEyLCA0NjcsIDM1OCwgNTg3LCAzMzUsIDQ5OSwgNTYwLCA2ODIsIDMwNywgNTYyLCA0MzYsIDYzNSwgMzIyLCA1MzIpDQpkaXNjeSA8LSBjKDQuNywgOS4zLCAxMi44LCA5LjgsIDMuNywgMTEuNSwgMy4zLCA4LjIgLDEwLjMsIDEzLjAsIDQuOSwgMTAuNywgNi4wLCAxMS4xLCAzLjQgLDEwLjcpDQoNCmBgYA0KQ3JlYXRpbmcgZGF0YWZyYW1lIG91dCBvZiB0aGUgMiB2ZWN0b3JzIGFib3ZlDQpgYGB7cn0NCmhlYXRfZ3Jvd3RoIDwtIGRhdGEuZnJhbWUoZGlzY3gsZGlzY3kpDQpgYGANCk5hbWluZyBkYXRhZnJhbWUNCmBgYHtyfQ0KbmFtZXMoaGVhdF9ncm93dGgpIDwtIGMoImRlZ3JlZV9ob3VycyIsICJlbG9uZ2F0aW9uIikgDQpgYGANCk9wdGlvbmFsbHkgUHJpbnQgdGhlIGRhdGFmcmFtZSB0aGF0IHdlIGp1c3QgY3JlYXRlZA0KYGBge3J9DQpoZWF0X2dyb3d0aCANCmBgYA0KQ2FsbGluZyBwYWNrYWdlIGdncGxvdDIgaW50byBvdXIgZ2xvYmFsIGVudmlyb25tZW50ICh5b3UgbWlnaHQgbmVlZCB0byBpbnN0YWxsIGl0IGZpcnN0KQ0KYGBge3J9DQpsaWJyYXJ5KGdncGxvdDIpDQpgYGANCkNyZWF0aW5nIHNjYXR0ZXIgcGxvdCB1c2luZyB0aGUgZ2dwbG90MiBSIHBhY2thZ2UNCmBgYHtyfQ0KZGlzY19zY2F0dGVyX3Bsb3QgPC0gZ2dwbG90KGhlYXRfZ3Jvd3RoLCBhZXMoeD0gZGVncmVlX2hvdXJzLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IGVsb25nYXRpb24pKSArZ2VvbV9wb2ludCgpKyANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJzKHg9ICJEYWlseSBkZWdyZWUgaG91cnMgb2Ygc29pbCBIZWF0IiwgeSA9ICJTaG9vdCBlbG9uZ2F0aW9uIChjbSkiKSsNCmdlb21fc21vb3RoKG1ldGhvZCA9IGxtLCBzZT1GKQ0KZGlzY19zY2F0dGVyX3Bsb3QNCmBgYA0KVXNpbmcgUiBiYXNlZCBmdW5jdGlvbnMgdG8gcGxvdA0KYGBge3J9DQpwbG90KGhlYXRfZ3Jvd3RoJGRlZ3JlZV9ob3VycyxoZWF0X2dyb3d0aCRlbG9uZ2F0aW9uLCB4bGFiID0gIkRhaWx5IERlZ3JlZXMgaG91cnMgb2Ygc29pbCBoZWF0IiwgeWxhYj0gIlNob290IGVsb25nYXRpb24gKGNtKSIpIyBQbG90aW5nIHVzaW5nIFIgYmFzZWQgZnVuY3Rpb25zDQphYmxpbmUoZml0X21vZGVsKSNhZGRpbmcgYSBmaXR0aW5nIGxpbmUNCmBgYA0KDQpGaXRpbmcgYSBtb2RlbCAjdGhlICJ2ZWxvY2l0eX5sb2FkIiBzdGF0ZW1lbnQgYmVsb3cgaXMgY2FsbGVkIGEgImZvcm11bGEiDQppdCBpbmRpY2F0ZXMgdGhhdCB3ZSdsbCB1c2UgbG9hZCB0byBleHBsYWluIHZlbG9jaXR5DQpgYGB7cn0NCmZpdF9tb2RlbCA8LSBsbShlbG9uZ2F0aW9ufmRlZ3JlZV9ob3VycywgZGF0YSA9IGhlYXRfZ3Jvd3RoKSAjZml0dGVkIG1vZGVsIGlzIHN0b3JlZCBpbiB2YXJpYWJsZSAiZml0X21vZGVsIg0Kc3VtbWFyeShmaXRfbW9kZWwpIyBzdW1tYXJ5IG9mIHRoZSBmaXR0ZWQgbW9kZWwNCmBgYA0KVGhlIGxlYXN0IHNxdWFyZXMgZXN0aW1hdGVzIGZvciB0aGUgaW50ZXJjZXB0IGFuZCBzbG9wZSBjb2VmZmljaWVudHMgYXJlIGdpdmVuIGluIHRoZSBFc3RpbWF0ZXMgY29sdW1uLiBUaGUgdA0Kc3RhdGlzdGljcyBhcmUgb2J0YWluZWQgYnkgZGl2aWRpbmcgZWFjaCBjb2VmZmljaWVudCBieSBpdHMgY29ycmVzcG9uZGluZyBzdGFuZGFyZCBlcnJvci4gVGhlIHAtdmFsdWVzIGluIHRoZQ0KUHIoVD58dHwpIGNvbHVtbiBjb3JyZXNwb25kIHRvIHRlc3RzIG9mIGEgY29lZmZpY2llbnQgYmVpbmcgMCB2cy4gdGhlIHR3by1zaWRlZCBhbHRlcm5hdGl2ZS4gSW50ZXJjZXB0IGNvcnJlc3BvbmRzIHRvIEJvLCB0aGUgc2xvcGUgY29ycmVzcG9uZHMgdG8gdGhlIG5hbWUgb2YgdGhlIHggdmFyaWFibGUuDQoNCkNvbnN0cnVjdGluZyBRUXBsb3Qgb2YgcmVzaWR1YWxzIGFuZCAicmVzaWR1YWxzIHZycyBmaXR0ZWQgdmFsdWVzIiBwbG90IGFuZCBjb21tZW50LiBSZXNpZHVhbHMgYXJlIGV4dHJhY3RlZCB3aXRoIHRoZSBmdW5jdGlvbiByZXNpZHVhbHMoKS4gUVEgcGxvdCBvbiBnZ3Bsb3QyIGJhc2VkIGZ1bmN0aW9uDQpyZXNpZHVhbHMgKGZpdF9tb2RlbCkgZXh0cmFjdHMgdGhlIHJlc2lkdWFscyBmcm9tIHRoZSBtb2RlbA0KUVFub3JtIGNhbiBiZSBkb25lIHVzaW5nIHRoaXMgY29kZToNCnFxbm9ybShyZXNpZHVhbHMoZml0X21vZGVsKSkNClJlc2lkdWFscyB2cnMgZml0dGVkIHdhcyBjcmVhdGVkIHVzaW5nIHRoaXMgY29kZTogDQpwbG90KHJlc2lkdWFscyhmaXRfbW9kZWwpfmZpdHRlZChmaXRfbW9kZWwpLCB5bGFiID0gImZpdHRlZCB2YWx1ZXMiLCB4bGFiPSAicmVzaWR1YWxzIikNCmFibGluZShoPTApDQpgYGB7cn0NCnJlc2lkdWFscyhmaXRfbW9kZWwpDQpxcW5vcm0ocmVzaWR1YWxzKGZpdF9tb2RlbCksIG1haW4gPSAiUVFwbG90IG9mIHJlc2lkdWFscyIpDQpwbG90KHJlc2lkdWFscyhmaXRfbW9kZWwpfmZpdHRlZChmaXRfbW9kZWwpLCB5bGFiID0gIkZpdHRlZCB2YWx1ZXMiLCB4bGFiPSAiUmVzaWR1YWxzIiwgbWFpbj0gIlJlc2lkdWFscyB2cnMgRml0dGVkIHZhbHVlIikNCmFibGluZShoPTApDQoNCmBgYA0KQ29uc3RydWN0aW5nIEFOT1ZBIHRhYmxlIGZvciB0aGlzIGRhdGFzZXQgYW5kIHRlc3Rpbmcgd2hldGhlciB0aGUgc2xvcGUgaXMgc2lnbmlmaWNhbnRseSBkaWZmZXJlbnQgdGhhbiB6ZXJvDQpgYGB7cn0NCmFub3ZhKGZpdF9tb2RlbCkNCmBgYA0KUHJlZGljdGluZw0KV2UgY2FuIHVzZSB0aGUgcHJlZGljdCgpIGZ1bmN0aW9uIGFuZCB0aGUgZml0dGVkIG1vZGVsIG9iamVjdCBmaXQgdG8gbWFrZSBwcmVkaWN0aW9ucyBvZiB0aGUgeSB2YWx1ZXMgZm9yDQpuZXcgZGF0YQ0KDQoNCg==