1 課程目標

  • 這個課程將介紹三種統計的用途。
    1. 測量:我們統計一個國家民眾對於政治的興趣、一個地區的空氣品質、擲無數次銅板得到正面的比例。有一篇文章探討擲硬幣的實驗結果
    2. 預測:我們收集資料,建立一個模型,然後預測下一個事件發生的機率。最近流行的人工智慧(AI),屬於預測的一種,不過生成式AI是產生新的資料而不是預測,MIT有一篇文章Explained: Generative AI討論這些概念。
    3. 因果關係:我們可以透過隨機實驗,排除所有可能的干擾因素,估計出兩個變數的因果關係。例如對一群人隨機抽樣,有人抽到籤去服役,有人不需要去服役,然後在若干年後詢問這些人對於國家的認同感,這些人之間唯一的差別是有沒有去服役,就可以估計出服役與否對國家認同感的作用。

    2 因果關係的實例

  • 本週將介紹因果關係與隨機實驗。
  • 我們用因果關係來解釋兩個變數的關係。例如在美國,家庭收入越高,學童的成績越好,這之間的因果關係是兒童越早開始學習,越早啟發腦力,但是美國的學前教育收費昂貴,只有一定收入的家庭才負擔得起,所以越能負擔得起的家庭,學童的表現越好。
  • 學前教育

    Figure 2.1: 學前教育

  • 過去認為如果A發生在前、B發生在後,所以如果A發生而且B也發生,A與B之間可能有因果關係。
  • 但是這樣的關係其實沒有排除可能的干擾因素。例如父母身高跟子女身高的關係看起來是因果關係,但是身高可能跟是否結婚有關,所以我們並沒觀察到沒結婚、可能是身高較矮的民眾的子女的身高。換句話說,父母跟子女的身高不是隨機實驗。
  • 另外一個例子是喜歡吃辣是不是有益健康?吃辣會增加排汗,幫助身體排毒?理論上我們可以請一組人常常吃辣,另外一組人吃清淡食物,然候觀察他們的身心狀況。即使我們可以隨機分配兩組人吃辣以及不吃辣,但是實際生活中喜歡吃辣可能本身就是身體健康,越吃越過癮,不喜歡的人可能自己覺得身體無法負荷,看到辣就全身冒汗。所以吃辣的行為跟身體健康與否互相影響,難以估計因果關係。
  • 在勞動經濟學,有一個著名的研究是提高最低工資是否會造成勞工失業?也就是雇主不堪最低工資的負擔,寧可犧牲服務品質也要減少雇用勞工?或者說,每提高多少最低工資會提高多少失業率?Card and Krueger (1994) 調查兩個相鄰的州–New Jersey, Pennsylvania的餐廳員工人數以及時薪 ,其中賓州的最低時薪一直維持不變,而紐澤西把最低工資從4.25美元提高到5.05美元,假設其他條件都一樣,紐澤西的失業率在調高最低工資後增加了嗎?而賓州的失業率都不變嗎?
  • 餐廳員工數與最低時薪

    Figure 2.2: 餐廳員工數與最低時薪

  • 研究發現,紐澤西餐廳的員工人數反而在提高時薪之後增加了,同一時間賓州的餐廳的員工人數反而減少了。雖然這個結論聽起來不合乎常理,然而有可能賓州的員工因為最低時薪選擇到紐澤西就業,或者員工更加努力工作使得餐廳的生意彌補了提高時薪的成本,使得餐廳並沒有因此解雇員工。不論如何,這是一個很經典的實驗設計。
  • 3 實驗設計的原理

  • 從前面的例子可以看出實驗設計的基本原理是我們觀察兩組群體在固定一個差異情況下,比較群體之間的差異。理想上如果我們只觀察一個人或是一群人,然後比較有無給予某個刺激或者某個政策的差異,稱為反事實的統計(counterfactual),但是事實上我們不可能做到,例如請一位病患既服用安慰劑又服用高血壓藥,也不可能找一個班級學生又多上數學課又減少數學課,然後比較教學方法的差異。所以我們把一群人隨機分組,然後假設這兩組人除了給予的刺激之外都沒有不同之處。而刺激的效果就是這兩組人的平均表現的差異。
  • 3.1 Potential Outcome Model

  • 為了容易說明起見,我們用Potential Outcome Model定義以上的原理。
  • 首先是刺激(D):
  • \(D_{i}\): Indicator of treatment for unit \(i\) \[ \mathrm{D}_{i} = \begin{cases} 1, & \text{if unit} \hspace{3pt} i \hspace{3pt} \text{receives treatment} \\ % & is your "\tab"-like command (it's a tab alignment character) 0, & \text{otherwise} \end{cases} \]

  • 然後是結果(Potential Outcomes):
  • \(Y_{i}\): Observed outcome of interest for unit \(i\)

    \[ \tag{1} \mathrm{Y}_{di}=\begin {cases} Y_{0i}, & \text{Potential outcome for unit} \hspace{3pt}i\hspace{3pt} \text{without treatment} \\ Y_{1i}, & \text{Potential outcome for unit } \hspace{3pt} i \hspace{3pt} \text{with treatment} \end{cases} \]

  • 根據方程式1,Y有兩個,一個是有接收到刺激,一個是沒接收到刺激,這兩個Y可以寫在一個方程式裡面:
  • \(Y_{i}=D_{i}\cdot Y_{1i}+(1-D_{i})\cdot Y_{0i}\)

    \[\begin{equation} \tag{2} \mathrm{Y}_{i}=\begin {cases} Y_{0i}, & \text{if} \hspace{3pt}D_{i}=0 \\ Y_{1i}, & \text{if} \hspace{3pt} D_{i}=1 \end{cases} \end{equation}\]

  • 根據方程式2,我們可以把有無刺激的結果相減,得到:
  • \(\alpha_{i} = Y_{1i}-Y_{0i}\)

  • 為了確保以上的模型得到正確的估計,我們必須假設\(D_{i}\)對每一個個體都有同樣的影響,也沒有任何的外溢效果。寫成以下的等式:
  • \[ Y_{i}(D_{1}, D_{2},\ldots,D_{n})=Y_{i}(D'_{1}, D'_{2},\ldots,D'_{n})\quad \text{if}\quad D_{i}=D'_{i} \]

  • 我們定義平均實驗效果(Average Treatment Effect, ATE)為:
  • \[\begin{align} \tag{3} ATE & = E[Y_{1}-Y_{0}]\\ & =E[Y_{1}]-E[Y_{0}]\\ & =E[Y_{1}\mid D=1]-E[Y_{0}\mid D=0] \\ & =E[Y_{1}-Y_{0}]\\ & =E[Y_{1}]-E[Y_{0}] \end{align}\]

    \(i\) \(Y_{1i}\) \(Y_{0i}\) \(D_{i}\) \(\alpha_{i}\) \(Y_{i}\)
    1 3 0 1 3 3
    2 1 0 1 0 1
    3 1 0 0 1 0
    4 1 1 0 0 0
    \(E[Y_{1}]\) 1.5
    \(E[Y_{0}]\) 0.5
    \(E[Y_{1}-Y_{0}]\) 1

    \[ E[Y_{1}] = \frac{1}{N}\Sigma Y_{1i}=1.5 \] \[ E[Y_{0}] = \frac{1}{N}\Sigma Y_{0i}=0.5 \] \[ E[Y_{1}]-E[Y_{0}] = 1 \] \[ \alpha_{ATE}=E[Y_{1}-Y_{0}]=\frac{1}{4}\cdot(3+0+1+0)=1 \]

  • ATE也稱為difference-in-means估計式(estimator),在隨機實驗的條件成立下,可以正確估計因果關係。
  • ATE指的是所有參與者的因果關係的估計,ATT指的是對於給予刺激者的因果關係的估計:
  • \[ \alpha_{ATT}=E[Y_{1i}]=\frac{1}{2}\cdot(3+0)=1.5 \]

  • 以最低工資的例子而言,如果只估計紐澤西州的餐廳員工數的前後變化程度,就是ATT。因為受到刺激的個人或者集體對於刺激的反應不是完全相同,所以我們可以用ATT說明刺激的作用。但是ATE比較有無接收到刺激的平均差異,比較具有說服力。
  • 在實際生活中我們不見得可以隨機分配受試者為實驗組、控制組。如果我們可以找到一個隨機的事件,然後解釋這個事件,再根據解釋的結果分配我們的研究對象,同樣可以進行實驗研究。
  • 例如每次選舉中都有兩種候選人,一種是現任者,另一種是挑戰者。假設成為現任者是隨機發生的,例如在里長選舉,有些候選人可能差3票當選,有些則是差2票落選。那麼我們就可以用一些變數解釋這些以些微差距當選的現任者,然後把預測值變成倒數,加權給這些現任者,然後觀察他們的得票率有沒有比上次提高,也就是現任者的優勢。相關的討論請點Jens Hainmueller的文章。
  • 4 實際操作:小班制與成績

  • 我們用DSS這筆資料來練習如何估計因果關係。首先讀取資料:
  • star <- read.csv("~/Dropbox/EastAsia2024/data/DSS/STAR.csv")
    head(star)
    ##   classtype reading math graduated
    ## 1     small     578  610         1
    ## 2   regular     612  612         1
    ## 3   regular     583  606         1
    ## 4     small     661  648         1
    ## 5     small     614  636         1
    ## 6   regular     610  603         0
  • 如果每一個班級的學生人數隨機分為兩種,一種是小班(small),另一種是一般人數(regular),我們想估計班級人數與閱讀(reading)成績的因果關係,也就是應用difference-in-means的估計式,我們先轉換一下班級人數這個變數的性質為類別,並且給定一個新變數叫做D。
  • star <- star %>% mutate(D = as.factor(classtype)) %>% 
                     mutate(graduated = recode_factor(graduated, 
                                    '1'='Yes', '0'='No')) 
    class(star$D)
    ## [1] "factor"
    levels(star$D)
    ## [1] "regular" "small"
  • 然後分別計算\(E[Y|D=1]\)\(E[Y|D=0]\)
  • mean(star$reading[star$D=='small'])
    ## [1] 632.7
    mean(star$reading[star$D=='regular'])
    ## [1] 625.5
  • 我們可以用gtsummary::tbl_summary()這個功能呈現每個連續與類別變數對應特定變數的平均值或者比例:
  • library(gtsummary)
    star %>%  tbl_summary(
                by = D, 
                  statistic = list(
                    all_continuous() ~ "{mean} ({sd})",
                    graduated ~ "{n} / {N} ({p}%)"
                ),
                digits = all_continuous() ~ 2) %>% 
      add_overall() %>%
      add_n() %>%
      modify_header(label ~ "**Variable**") 
    Variable N Overall, N = 1,2741 regular, N = 6891 small, N = 5851
    classtype 1,274


        regular
    689 (54%) 689 (100%) 0 (0%)
        small
    585 (46%) 0 (0%) 585 (100%)
    reading 1,274 628.80 (36.73) 625.49 (35.88) 632.70 (37.37)
    math 1,274 631.59 (38.84) 628.84 (37.94) 634.83 (39.66)
    graduated 1,274 1,108 / 1,274 (87%) 597 / 689 (87%) 511 / 585 (87%)
    1 n (%); Mean (SD); n / N (%)
  • 然後兩個平均值相減,得到有無實施小班制的學生平均分數差異:
  • mean(star$reading[star$D=='small']) - mean(star$reading[star$D=='regular'])
    ## [1] 7.211
  • 結果是7.21,代表班級人數變少,學生平均閱讀分數會提高7.21分。
  • 我們可以進一步計算數學成績的差異,以及畢業比例的差異。前提是這兩組學生是隨機分配。
  • 5 需要注意的議題

    5.1 選樣偏誤(selection bias)

  • 有時候我們無法控制所有的變項。例如有人有參加職業訓練,有人沒參加,有參加職業訓練的人不止學到新的技能,而且參加的人原本就比較有企圖心,所以職業訓練對於未來收入的效果可能被高估。
  • 出現選樣偏誤的原因是我們無法觀察\(E[Y_{0}|D=1]\)。也就是如果我們請民眾來參加職業訓練,但是他們沒有參加也沒有辦法聯絡,我們觀察不到這些人的未來工作收入。又或者像是在紐澤西的餐廳,如果有餐廳剛好在實施最低工資因為各種原因歇業,那麼我們無法統計到這些餐廳在實施最低工資之後的員工人數。
  • 5.2 比對兩組樣本的差異(Balance Check)

  • 進行分析之前,我們需要確認隨機分組是否真的得到兩組背景相似的研究對象。
  • 在這筆資料中沒有其他的人口背景變數,而學生的年齡以及教育程度應該有很高的同質性,所以我們隨機創造性別以及對讀書的興趣兩個變數,比對兩組樣本的差異。分布圖顯示,兩組樣本差異很小。
  • 5.3 平均值差異的標準誤

  • 平均值的差異可以用聯合的標準誤檢定是否大到在統計上發生的機率非常小,如果真的非常小而我們又觀察到這樣的差異,那麼我們可以說真的存在這樣的差異。聯合的標準誤公式如下:
  • \[ \sqrt{var(\hat{Y}_{treated}+\hat{Y}_{control})} =\sqrt{var(\hat{Y}_{treated}) + var(\hat{Y}_{control})} =\sqrt{\frac{\sigma^2_{T}}{N_{T}} + \frac{\sigma^2_{C}}{N_{C}}} \]

  • 我們可以根據上述的公式計算標準誤:
  • v.small <- var(star$reading[star$D == 'small']); v.small
    ## [1] 1396
    v.regular <- var(star$reading[star$D == 'regular']); v.regular
    ## [1] 1287
    n.group<- star %>% group_by (D) %>% 
                   summarise(n = n())
    n.small<-as.numeric(n.group[2,2]); n.regular<-as.numeric(n.group[1,2])
    PoolSE<-sqrt((v.small/n.small)+(v.regular/n.regular)); PoolSE
    ## [1] 2.063
  • 我們用gtsummary可以列出使用到標準誤的t檢定的結果,結果是t<0.001,代表發生的機率很小,兩個樣本之間的差異不是偶然發生。
  • library(gtsummary)
    star %>%  tbl_summary(
                by = D, 
                  statistic = list(
                    all_continuous() ~ "{mean} ({sd})",
                    all_categorical() ~ "{n} / {N} ({p}%)"
                ),
                digits = all_continuous() ~ 2) %>% 
       add_p(pvalue_fun = ~ style_pvalue(.x, digits = 2)) %>%
      add_overall() %>%
      add_n() %>%
      modify_header(label ~ "**Variable**") 
    Variable N Overall, N = 1,2741 regular, N = 6891 small, N = 5851 p-value2
    classtype 1,274


    <0.001
        regular
    689 / 1,274 (54%) 689 / 689 (100%) 0 / 585 (0%)
        small
    585 / 1,274 (46%) 0 / 689 (0%) 585 / 585 (100%)
    reading 1,274 628.80 (36.73) 625.49 (35.88) 632.70 (37.37) <0.001
    math 1,274 631.59 (38.84) 628.84 (37.94) 634.83 (39.66) 0.013
    graduated 1,274 1,108 / 1,274 (87%) 597 / 689 (87%) 511 / 585 (87%) 0.71
    gender 1,274 572 / 1,274 (45%) 300 / 689 (44%) 272 / 585 (46%) 0.29
    interest 1,274


    0.42
        1
    257 / 1,274 (20%) 142 / 689 (21%) 115 / 585 (20%)
        2
    235 / 1,274 (18%) 129 / 689 (19%) 106 / 585 (18%)
        3
    128 / 1,274 (10%) 68 / 689 (9.9%) 60 / 585 (10%)
        4
    280 / 1,274 (22%) 138 / 689 (20%) 142 / 585 (24%)
        5
    374 / 1,274 (29%) 212 / 689 (31%) 162 / 585 (28%)
    1 n / N (%); Mean (SD)
    2 Pearson’s Chi-squared test; Wilcoxon rank sum test
  • 另一個計算聯合標準誤的方式,先計算聯合標準差,再計算標準誤,聯合標準差的公式:
  • \[ S_{p}=\sqrt{\frac{(n_{1}-1)s_{1}^2+(n_{2}-1)s_{2}^2}{n_{1}+n_{2}-2}} \]
  • 聯合標準誤的公式變成:
  • \[ SE_{p}=S_{p}\sqrt{\frac{1}{n_{1}}+\frac{1}{n_{2}}} \]
  • R計算如下:
  • v.small <- var(star$reading[star$D == 'small']); v.small
    ## [1] 1396
    v.regular <- var(star$reading[star$D == 'regular']); v.regular
    ## [1] 1287
    n.group<- star %>% group_by (D) %>% 
                   summarise(n = n())
    n.small<-n.group[2,2]; n.regular<-n.group[1,2]
    p1 <- (((n.small-1)*v.small)+((n.regular-1)*v.regular))
    PoolSD<-sqrt(p1/(n.small+n.regular-2)); 
    PoolSE <- PoolSD*sqrt((1/n.small)+(1/n.regular)); PoolSE
    ##       n
    ## 1 2.056
    • 兩個聯合標準誤的公式的計算結果一致,都是2.0左右。
    • 因為2倍的標準誤仍然小於實驗效果(2*2.05<7.2),可以結論實驗效果並不是隨機發生。換句話說,小班制真的會提高成績。
    • 套用以上的標準誤公式,可以確定平均數的差異是否大到不是隨機發生。

    6 作業

  • 請打開哈佛大學的民調資料(HXC23014 Harvard Poll Data.sav),這筆資料有一個民調實驗,也就是把受訪者分成兩組,其中一組的受訪者先被提示中國在AI的專利申請數領先美國,然後問他們贊不贊成政府花費更多預算在AI上面(Q39),另一個則是提示受訪者美國在AI專利申請數領先中國,然後問他們贊不贊成政府花費更多預算在AI上面(Q40)。資料中分組的變數是Q39_Q40Split。
    1. 請以圖形表示受試組與實驗組的次數分佈。
    2. 請問這兩組受訪者的贊成分數的平均數分別是多少?
    3. 請問這兩組受訪者的贊成分數的平均數差異為何?
    4. 請問聯合標準誤為何?

    7 更新內容日期

    最後更新日期 02/24/2024