Rstan Wonderful R-(5)

另一種形式的貝葉斯邏輯回歸

前面一節使用的數據是以學生爲單位,將每名學生的實際課時數和實際出勤數進行了彙總之後的總結性數據,本章我們來看看相同數據的另一種形式。由於分析中有人建議說,天氣狀況對出勤率也是有較大的影響的,所以希望在前一節已有的邏輯回歸模型中增加對天氣狀況的調整。那麼這時候需要使用的就是彙總之前的數據,也就是要是用實際記錄了每名學生每一次課時的出勤與否的原始數據。值得注意的是,這時候原始數據中每名學生的記錄有許多行,因爲每行記錄的是該名學生每次上課時的天氣狀況和他/她是否出勤(0,1)的結果。

d <- read.table("https://raw.githubusercontent.com/winterwang/RStanBook/master/chap05/input/data-attendance-3.txt", 
                     sep = ",", header = T)
head(d, 10)
##    PersonID A Score Weather Y
## 1         1 0    69       B 1
## 2         1 0    69       A 1
## 3         1 0    69       C 1
## 4         1 0    69       A 1
## 5         1 0    69       B 1
## 6         1 0    69       B 1
## 7         1 0    69       C 0
## 8         1 0    69       B 1
## 9         1 0    69       A 1
## 10        1 0    69       A 1

其中,

  • \(Weather\),天氣數據 (A = 晴天,B = 多雲,C = 下雨);
  • \(Y\),該次課時學生是否出勤 (0 = 缺勤,1 = 出勤)。

其他的數據和前一節中使用的數據相同。

分析的目的

本次數據分析的目的依然是瞭解幾個預測變量,天氣,是否喜歡打工,是否熱愛學習,對學生出勤率的影響。

確認數據分佈

你可以用先進的 tidyverse 進行簡單的數據彙總,看看天氣狀況不同時實際出勤率是否有差別:

library(tidyverse)
d %>% 
  group_by(Weather, Y) %>% 
  summarise (n= n()) %>%
  mutate(rel.freq = paste0(round(100 * n/sum(n), 2), "%"))
## # A tibble: 6 x 4
## # Groups:   Weather [3]
##   Weather     Y     n rel.freq
##   <fct>   <int> <int> <chr>   
## 1 A           0   306 24.31%  
## 2 A           1   953 75.69%  
## 3 B           0   230 31.51%  
## 4 B           1   500 68.49%  
## 5 C           0   138 33.91%  
## 6 C           1   269 66.09%

如果你不想學習 tidyverse,也可以用下面的方法獲得類似的效果,

aggregate(Y ~ Weather, data = d, FUN = table)
##   Weather Y.0 Y.1
## 1       A 306 953
## 2       B 230 500
## 3       C 138 269

無論是哪種方法,我們都能大概猜出,天氣是晴天的時候 (Weather = A),出勤率相對較高。

在作者的原著中,使用的是給分類型變量強制賦予連續值的方法,這點確實有點噁心,爲了正常的模型,我們需要把天氣轉換成爲更加常見的啞變量 (dummy variable) 如下:

d <- fastDummies::dummy_cols(d, select_columns = "Weather")
head(d)
##   PersonID A Score Weather Y Weather_B Weather_A Weather_C
## 1        1 0    69       B 1         1         0         0
## 2        1 0    69       A 1         0         1         0
## 3        1 0    69       C 1         0         0         1
## 4        1 0    69       A 1         0         1         0
## 5        1 0    69       B 1         1         0         0
## 6        1 0    69       B 1         1         0         0

Related

comments powered by Disqus