單元摘要: 使用第三周作業互評的數據來練習R的


(安裝)載入套件

pacman::p_load(dplyr, tidyr, ggplot2, ggthemes)

【A】The Ascomebe Quartet

The Ascomebe Quartet完全不同的數據有可能會產生完全相同的統計量,以下我們練習使用R的資料處理(tidyr,dplyr)和繪圖套件(ggplot2)來畫Ascomebe Quartet.

先讀進並檢視資料

A = read.csv("data/anscombe.csv")
head(A)
  X x1 x2 x3 x4   y1   y2    y3   y4
1 1 10 10 10  8 8.04 9.14  7.46 6.58
2 2  8  8  8  8 6.95 8.14  6.77 5.76
3 3 13 13 13  8 7.58 8.74 12.74 7.71
4 4  9  9  9  8 8.81 8.77  7.11 8.84
5 5 11 11 11  8 8.33 9.26  7.81 8.47
6 6 14 14 14  8 9.96 8.10  8.84 7.04

轉換資料排列方式

A = as.matrix(A)
A = cbind(
  rep(1:4, each=11), rep(1:11, 4),
  rbind(A[,c(2,6)],A[,c(3,7)],A[,c(4,8)],A[,c(5,9)])) %>% 
  data.frame %>% as.tbl %>% 
  setNames(c("set","id","x","y"))
head(A,12)
# A tibble: 12 x 4
     set    id     x     y
   <dbl> <dbl> <dbl> <dbl>
 1     1     1    10  8.04
 2     1     2     8  6.95
 3     1     3    13  7.58
 4     1     4     9  8.81
 5     1     5    11  8.33
 6     1     6    14  9.96
 7     1     7     6  7.24
 8     1     8     4  4.26
 9     1     9    12 10.8 
10     1    10     7  4.82
11     1    11     5  5.68
12     2     1    10  9.14

畫出圖形

ggplot(A, aes(x, y)) +                          
  geom_point(size=2, col='navyblue') +
  geom_smooth(method="lm", se=F, col="orange", lty=2) +
  facet_wrap(~set) +
  theme_wsj()



【B】目的導向的圖形設計

FIG1 - 互評進度圖

🗿 問題討論:
  ■   「互評進度圖」的目的是?
  ■   我們如何使用圖形來促成這個目的?
  ■   你覺得這做會有效嗎? 為甚麼?




【C】匿名互評資料探索性分析

以下資料的人名和小組名稱都已經過匿名化處理:

load("data/X.rdata")
str(X)
'data.frame':   116 obs. of  13 variables:
 $ xID      : Factor w/ 116 levels "ID1","ID10","ID100",..: 34 99 33 105 68 111 23 50 73 39 ...
 $ xGrade   : Factor w/ 2 levels "B","M": 1 1 1 1 2 2 2 2 1 2 ...
 $ xTeam    : Factor w/ 21 levels "XT01","XT02",..: 20 15 6 17 9 1 14 12 1 6 ...
 $ rTeam    : Factor w/ 21 levels "RT01","RT02",..: 2 21 14 9 13 8 21 5 21 15 ...
 $ AS31.程式: int  6 9 8 7 8 7 10 8 6 9 ...
 $ AS31.註解: int  6 6 8 7 8 7 7 8 6 9 ...
 $ AS31.整體: int  6 8 8 7 8 6 7 8 6 8 ...
 $ AS32.程式: int  7 9 9 7 9 7 9 8 10 8 ...
 $ AS32.註解: int  7 6 9 6 8 7 7 8 6 8 ...
 $ AS32.整體: int  7 8 9 7 8 6 7 8 8 7 ...
 $ AS33.程式: int  8 9 8 7 9 7 10 7 9 9 ...
 $ AS33.註解: int  8 8 8 7 8 9 8 7 8 9 ...
 $ AS33.整體: int  8 9 8 7 8 8 8 7 8 8 ...

各組別 評分數量 & 評分數量:

rbind(table(X$xTeam), table(X$rTeam))
     XT01 XT02 XT03 XT04 XT05 XT06 XT07 XT08 XT09 XT10 XT11 XT12 XT13 XT14 XT15
[1,]    6    6    5    6    6    6    5    6    6    5    6    5    5    6    5
[2,]    5    5    5    6    5    6    5    6    5    6    5    6    6    6    5
     XT16 XT17 XT18 XT19 XT20 XT21
[1,]    4    6    6    6    5    5
[2,]    6    4    6    6    6    6

轉換資料排列 Data Alignment

X2 = gather(X, "key", "Score", 5:13) %>% separate(key, c("AS","TYPE"), sep="\\.")
X2[4:5] = lapply(X2[4:5], factor)
as.tbl(X2)
# A tibble: 1,044 x 7
   xID   xGrade xTeam rTeam AS    TYPE  Score
   <fct> <fct>  <fct> <fct> <fct> <chr> <int>
 1 ID24  B      XT20  RT02  AS31  程式      6
 2 ID83  B      XT15  RT21  AS31  程式      9
 3 ID23  B      XT06  RT14  AS31  程式      8
 4 ID89  B      XT17  RT09  AS31  程式      7
 5 ID55  M      XT09  RT13  AS31  程式      8
 6 ID94  M      XT01  RT08  AS31  程式      7
 7 ID14  M      XT14  RT21  AS31  程式     10
 8 ID39  M      XT12  RT05  AS31  程式      8
 9 ID6   B      XT01  RT21  AS31  程式      6
10 ID29  M      XT06  RT15  AS31  程式      9
# ... with 1,034 more rows

所有評分的分布

par(cex=0.8, mar=c(3,3,3,3))
table(X2$Score) %>% barplot(main="Dist. Scores")

評分的分布 3作業 x 3評分標準

ggplot(X2, aes(x=Score)) + 
  geom_bar(position="dodge") + facet_grid(AS ~ TYPE)

FIG2 - 評分的分布

🗿: 如果我們要同時看大學生和研究生在每一份作業和每一個評分標準上面給分的分布(如FIG2),我們應該要怎麼做呢?


大學生與研究生的平均給分

tapply(X2$Score, X2$xGrade, mean) 
     B      M 
7.2854 7.5333 

各組的平均給分

rating = tapply(X2$Score, X2$xTeam, mean) 
rating
  XT01   XT02   XT03   XT04   XT05   XT06   XT07   XT08   XT09   XT10   XT11 
8.3889 7.6296 7.4889 6.7963 7.0926 7.9444 7.1778 6.9630 6.7963 7.4222 6.7593 
  XT12   XT13   XT14   XT15   XT16   XT17   XT18   XT19   XT20   XT21 
7.4667 7.8444 7.8889 7.2667 7.6944 7.4630 7.5926 7.7963 6.6222 7.8667 
range(rating)
[1] 6.6222 8.3889

各組的平均得分

rated = tapply(X2$Score, X2$rTeam, mean) %>% sort
rated
  RT19   RT05   RT03   RT02   RT15   RT13   RT06   RT07   RT12   RT16   RT21 
6.2778 6.4667 6.6667 6.7111 6.9111 6.9259 7.0185 7.1333 7.4074 7.5185 7.5370 
  RT20   RT10   RT11   RT09   RT14   RT08   RT01   RT04   RT17   RT18 
7.5556 7.6667 7.6889 7.7333 7.7778 7.8148 7.9111 8.1296 8.5278 8.5370 
range(rated)
[1] 6.2778 8.5370


🗿 問題討論:
  ■   由於我們的評分是自己小組的作業為基準,被評分數較高的小組會不會傾向於評出較低的分數呢?
  ■   請用統計的方法來檢定這一件事
  ■   請畫一個圖來檢驗這一件事
  ■   對資料科學家而言,上述哪一種方法比較有說服力呢?
  ■   對一般經理人員來說,上述哪一種方法比較有說服力呢?