Now we will import data directly from the web and play with qqplot/normal probabilty plot

Import data from the web directly.

First, make sure you have installed data.table package. If not, go ahead and install it. Then load data.table package into R. The fread usually works well for reading csv and other standard ascii files.

library(data.table)
data.table 1.9.6  For help type ?data.table or https://github.com/Rdatatable/data.table/wiki
The fastest way to learn (by data.table authors): https://www.datacamp.com/courses/data-analysis-the-data-table-way
exam <- fread('http://faculty.ndhu.edu.tw/~chtsao/ftp/stat2016.txt')
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
100   558  100   558    0     0  10631      0 --:--:-- --:--:-- --:--:-- 10730
head(exam)   # Take a quick look of first few cases

fread creates exam which is a dataframe. Assign variable names: year, mid, final. Set year to factor.

summary(exam)
       V1              V2               V3        
 Min.   :2.000   Min.   :  0.00   Min.   :-10.00  
 1st Qu.:2.000   1st Qu.: 25.50   1st Qu.: 13.50  
 Median :2.000   Median : 46.00   Median : 31.00  
 Mean   :2.476   Mean   : 46.52   Mean   : 34.11  
 3rd Qu.:3.000   3rd Qu.: 67.50   3rd Qu.: 53.00  
 Max.   :5.000   Max.   :110.00   Max.   :100.00  
is.data.frame(exam)
[1] TRUE
colnames(exam)<-c("year","mid","final")
exam$year<-as.factor(exam$year)
summary(exam)
 year        mid             final       
 2:42   Min.   :  0.00   Min.   :-10.00  
 3:15   1st Qu.: 25.50   1st Qu.: 13.50  
 4: 3   Median : 46.00   Median : 31.00  
 5: 3   Mean   : 46.52   Mean   : 34.11  
        3rd Qu.: 67.50   3rd Qu.: 53.00  
        Max.   :110.00   Max.   :100.00  

Now we use ggplot to further explore the data refer to Data visualization with ggplot2

library(ggplot2)
Need help getting started? Try the cookbook for R:
http://www.cookbook-r.com/Graphs/
scatter <- ggplot(data=exam, aes(x = mid, y = final)) 
scatter + geom_point(aes(color=year, shape=year)) +
  xlab("midterm") +  ylab("final") +
  ggtitle("Midterm vs Final Plot")

# Construct boxplot of midterm, final (respectively) by year

Motivating Questions (MQ):

  • What do you observe? Some motivating questions to ask yourself
  • Is there difference between scores (mid, final) of students from different years? For example mid|year=2 vs. mid|year=3
  • Breaking the data points by year (scattered plot, boxplots) reveals some patterns
boxplot(mid~year,data=exam, 
        xlab="year", ylab="midterm", main="Midterm  Boxplots")

#library(ggplot2)
box <- ggplot(data=exam, aes(x=year, y=mid))
box + geom_boxplot(aes(fill=year)) + 
  ylab("mid") + ggtitle("Midterm Boxplots") +
  stat_summary(fun.y=mean, geom="point", shape=5, size=4) 

boxplot(final~year,data=exam, 
        xlab="year", ylab="final", main="Final  Boxplots")

#library(ggplot2)
box <- ggplot(data=exam, aes(x=year, y=final))
box + geom_boxplot(aes(fill=year)) + 
  ylab("final") + ggtitle("Final Boxplots") +
  stat_summary(fun.y=mean, geom="point", shape=5, size=4) 

Midterm project hints and suggestions

attach(exam)
The following objects are masked from exam (pos = 3):

    final, mid, year

The following objects are masked from exam (pos = 4):

    final, mid, year
m2<-lm(final~mid)
summary(m2)

Call:
lm(formula = final ~ mid)

Residuals:
    Min      1Q  Median      3Q     Max 
-36.062 -12.562  -3.029  10.211  61.213 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  8.44481    5.14339   1.642    0.106    
mid          0.55168    0.09554   5.774 2.79e-07 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 20.54 on 61 degrees of freedom
Multiple R-squared:  0.3534,    Adjusted R-squared:  0.3428 
F-statistic: 33.34 on 1 and 61 DF,  p-value: 2.791e-07
par(mfrow=c(2,2));  
plot(m2)
par(mfrow=c(1,1));  

plot(final~mid)
abline(m2)

summary(mid); sd(mid)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
   0.00   25.50   46.00   46.52   67.50  110.00 
[1] 27.30228

MQ

  • What is the fitted regression line? How can it be used to predict the final score given the midterm score?
  • Is it a good fit? Overall and by year?
  • Is the prediction good for all mid range?
  • What if the distribution of 2017 mid is reasonably normal but with mean=60, sd=16? Say, a student scores 50 points in midterm 2017, what would be her score for midterm 2016?

There are some other alternative ways to download data from the web. See Getting Data From One Online Source

LS0tCnRpdGxlOiAiUmdhbWVzOiBXZWVrIDggKHJldmlzZWQpIgpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sKLS0tCk5vdyB3ZSB3aWxsIGltcG9ydCBkYXRhIGRpcmVjdGx5IGZyb20gdGhlIHdlYiBhbmQgcGxheSB3aXRoIHFxcGxvdC9ub3JtYWwgcHJvYmFiaWx0eSBwbG90CgojIyBJbXBvcnQgZGF0YSBmcm9tIHRoZSB3ZWIgZGlyZWN0bHkuIAoKRmlyc3QsIG1ha2Ugc3VyZSB5b3UgaGF2ZSBpbnN0YWxsZWQgKmRhdGEudGFibGUqIHBhY2thZ2UuIElmIG5vdCwgZ28gYWhlYWQgYW5kIGluc3RhbGwgaXQuIFRoZW4gbG9hZCBkYXRhLnRhYmxlIHBhY2thZ2UgaW50byBSLiBUaGUgZnJlYWQgdXN1YWxseSB3b3JrcyB3ZWxsIGZvciByZWFkaW5nIGNzdiBhbmQgb3RoZXIgc3RhbmRhcmQgYXNjaWkgZmlsZXMuIAoKYGBge3J9CmxpYnJhcnkoZGF0YS50YWJsZSkKZXhhbSA8LSBmcmVhZCgnaHR0cDovL2ZhY3VsdHkubmRodS5lZHUudHcvfmNodHNhby9mdHAvc3RhdDIwMTYudHh0JykKaGVhZChleGFtKSAgICMgVGFrZSBhIHF1aWNrIGxvb2sgb2YgZmlyc3QgZmV3IGNhc2VzCmBgYApmcmVhZCBjcmVhdGVzIGV4YW0gd2hpY2ggaXMgYSBkYXRhZnJhbWUuIEFzc2lnbiB2YXJpYWJsZSBuYW1lczogeWVhciwgbWlkLCBmaW5hbC4gClNldCB5ZWFyIHRvIGZhY3Rvci4gIApgYGB7cn0Kc3VtbWFyeShleGFtKQppcy5kYXRhLmZyYW1lKGV4YW0pCmNvbG5hbWVzKGV4YW0pPC1jKCJ5ZWFyIiwibWlkIiwiZmluYWwiKQpleGFtJHllYXI8LWFzLmZhY3RvcihleGFtJHllYXIpCnN1bW1hcnkoZXhhbSkKCmBgYApOb3cgd2UgdXNlIGdncGxvdCB0byBmdXJ0aGVyIGV4cGxvcmUgdGhlIGRhdGEKcmVmZXIgdG8gCltEYXRhIHZpc3VhbGl6YXRpb24gd2l0aCBnZ3Bsb3QyXShodHRwczovL3d3dy5tYWlsbWFuLmNvbHVtYmlhLmVkdS9zaXRlcy9kZWZhdWx0L2ZpbGVzL21lZGlhL2ZkYXdnX2dncGxvdDIuaHRtbCkKCmBgYHtyfQpsaWJyYXJ5KGdncGxvdDIpCnNjYXR0ZXIgPC0gZ2dwbG90KGRhdGE9ZXhhbSwgYWVzKHggPSBtaWQsIHkgPSBmaW5hbCkpIApzY2F0dGVyICsgZ2VvbV9wb2ludChhZXMoY29sb3I9eWVhciwgc2hhcGU9eWVhcikpICsKICB4bGFiKCJtaWR0ZXJtIikgKyAgeWxhYigiZmluYWwiKSArCiAgZ2d0aXRsZSgiTWlkdGVybSB2cyBGaW5hbCBQbG90IikKYGBgCmBgYHtyfQojIENvbnN0cnVjdCBib3hwbG90IG9mIG1pZHRlcm0sIGZpbmFsIChyZXNwZWN0aXZlbHkpIGJ5IHllYXIKYGBgCgoKIyMjTW90aXZhdGluZyBRdWVzdGlvbnMgKE1RKToKCiogV2hhdCBkbyB5b3Ugb2JzZXJ2ZT8gU29tZSBtb3RpdmF0aW5nIHF1ZXN0aW9ucyB0byBhc2sgeW91cnNlbGYKKiBJcyB0aGVyZSBkaWZmZXJlbmNlIGJldHdlZW4gc2NvcmVzIChtaWQsIGZpbmFsKSBvZiBzdHVkZW50cyBmcm9tIGRpZmZlcmVudCB5ZWFycz8gRm9yIGV4YW1wbGUgbWlkfHllYXI9MiB2cy4gbWlkfHllYXI9MwoqIEJyZWFraW5nIHRoZSBkYXRhIHBvaW50cyBieSB5ZWFyIChzY2F0dGVyZWQgcGxvdCwgYm94cGxvdHMpIHJldmVhbHMgc29tZSBwYXR0ZXJucwoKYGBge3J9CmJveHBsb3QobWlkfnllYXIsZGF0YT1leGFtLCAKICAgICAgICB4bGFiPSJ5ZWFyIiwgeWxhYj0ibWlkdGVybSIsIG1haW49Ik1pZHRlcm0gIEJveHBsb3RzIikKI2xpYnJhcnkoZ2dwbG90MikKYm94IDwtIGdncGxvdChkYXRhPWV4YW0sIGFlcyh4PXllYXIsIHk9bWlkKSkKYm94ICsgZ2VvbV9ib3hwbG90KGFlcyhmaWxsPXllYXIpKSArIAogIHlsYWIoIm1pZCIpICsgZ2d0aXRsZSgiTWlkdGVybSBCb3hwbG90cyIpICsKICBzdGF0X3N1bW1hcnkoZnVuLnk9bWVhbiwgZ2VvbT0icG9pbnQiLCBzaGFwZT01LCBzaXplPTQpIApgYGAKCmBgYHtyfQpib3hwbG90KGZpbmFsfnllYXIsZGF0YT1leGFtLCAKICAgICAgICB4bGFiPSJ5ZWFyIiwgeWxhYj0iZmluYWwiLCBtYWluPSJGaW5hbCAgQm94cGxvdHMiKQojbGlicmFyeShnZ3Bsb3QyKQpib3ggPC0gZ2dwbG90KGRhdGE9ZXhhbSwgYWVzKHg9eWVhciwgeT1maW5hbCkpCmJveCArIGdlb21fYm94cGxvdChhZXMoZmlsbD15ZWFyKSkgKyAKICB5bGFiKCJmaW5hbCIpICsgZ2d0aXRsZSgiRmluYWwgQm94cGxvdHMiKSArCiAgc3RhdF9zdW1tYXJ5KGZ1bi55PW1lYW4sIGdlb209InBvaW50Iiwgc2hhcGU9NSwgc2l6ZT00KSAKCmBgYAoKCiMjTWlkdGVybSBwcm9qZWN0IGhpbnRzIGFuZCBzdWdnZXN0aW9ucyAKYGBge3J9CmF0dGFjaChleGFtKQoKbTI8LWxtKGZpbmFsfm1pZCkKc3VtbWFyeShtMikKcGFyKG1mcm93PWMoMiwyKSk7ICAKcGxvdChtMikKcGFyKG1mcm93PWMoMSwxKSk7ICAKcGxvdChmaW5hbH5taWQpCmFibGluZShtMikKYGBgCgpgYGB7cn0Kc3VtbWFyeShtaWQpOyBzZChtaWQpCmBgYAoKIyMjTVEKCiogV2hhdCBpcyB0aGUgZml0dGVkIHJlZ3Jlc3Npb24gbGluZT8gSG93IGNhbiBpdCBiZSB1c2VkIHRvIHByZWRpY3QgdGhlIGZpbmFsIHNjb3JlIGdpdmVuIHRoZSBtaWR0ZXJtIHNjb3JlPwoqIElzIGl0IGEgZ29vZCBmaXQ/IE92ZXJhbGwgYW5kIGJ5IHllYXI/CiogSXMgdGhlIHByZWRpY3Rpb24gZ29vZCBmb3IgYWxsIG1pZCByYW5nZT8gCiogV2hhdCBpZiB0aGUgZGlzdHJpYnV0aW9uIG9mIDIwMTcgbWlkIGlzIHJlYXNvbmFibHkgbm9ybWFsIGJ1dCB3aXRoIG1lYW49NjAsIHNkPTE2PyBTYXksIGEgc3R1ZGVudCBzY29yZXMgNTAgcG9pbnRzIGluIG1pZHRlcm0gMjAxNywgd2hhdCB3b3VsZCBiZSBoZXIgc2NvcmUgZm9yIG1pZHRlcm0gMjAxNj8KCgpUaGVyZSBhcmUgc29tZSBvdGhlciBhbHRlcm5hdGl2ZSB3YXlzIHRvIGRvd25sb2FkIGRhdGEgZnJvbSB0aGUgd2ViLiAKU2VlIFtHZXR0aW5nIERhdGEgRnJvbSBPbmUgT25saW5lICBTb3VyY2VdKGh0dHBzOi8vd3d3LnItYmxvZ2dlcnMuY29tL2dldHRpbmctZGF0YS1mcm9tLWFuLW9ubGluZS1zb3VyY2UvKQoK