一團糟的數據做方差分析,幸好還有Wilcox的robust ANOVA(R統計專用)

2021-01-18 透析英語

伍教練在倫敦大學學院完成的碩士課題是Bilingual Advantage In Visual Selective Attention Task Under Various Perceptual Loads with European and Chinese samples,主要用到混合設計方差分析(mixed ANOVA),對比雙語人士和單語人士在4種不同知覺負荷下的答題表現,探測雙語認知優勢。

在北大的時候我學過至少4次統計學,每次都是似懂非懂,糊裡糊塗通過考試之後就忘光了。在UCL攻讀語言發育方向,統計學的要求比較高,足足上了兩個學期,要上機考試還要寫2800字的案例分析論文。最近跟語言學另一個方向的同學溝通,才知道他們壓根沒這門頭痛的課!不過這次(希望是最後一次)學統計的經歷是最深刻也最特別的,不光是用英語學習,而且還覺得很有用。寫統計課論文是對已在學術期刊上公開發表的論文進行挑刺,為此我翻遍了英國統計大神Andy Field的Discovering Statistics Using IBM SPSS,還找了很多文獻研讀,鑽牛角尖的過程居然第二次發現統計學很好玩(第一次是在高中的時候用Pascal語言編了個簡陋的統計程序)。


在分析自己課題的數據時,更是要吃透統計學了。即使是已發表的研究,有相當比例的統計分析是有漏洞的,這也是統計老師讓我們挑刺的原因。但是,剛學完一些統計基礎的研究生,水平不會高過那些發論文的博士、教授,難道他們不知道自己的統計方法有問題嗎?現在我明白了,他們是「臣妾做不到」,因為實際收集到的數據往往是一團糟的,做同樣的測試有人認真做有人瞎做,有天才也有低能兒,最後你發現數據有缺失的,有高或低得離譜的,更麻煩的是在不大的樣本裡,有些數據就是不符合正態分布,或者缺乏方差齊性、圓性等,導致經典的統計方法如ANOVA無法使用。其中最麻煩的是正態分布,數據不符合就是不能做常規的ANOVA,連做Greenhouse-Geisser修正的機會都沒有,而混合設計方差分析你還無法轉做非參數檢驗。

我在之前研究相同問題的研究生論文(Lukic, 2017) 裡見到作者「霸王硬上弓」,不知道從哪兒引用了一篇論文說「個別次數的數據不符合正態分布也可以做ANOVA,因為ANOVA本身很強大」 (Schmider, Ziegler, Danay, Beyer, & Bühner, 2010)。Lukic引用的這個論文估計救了很多人,Google Scholar顯示被引用了541次。Lukic也盡力了,後面核心數據實在太亂,不敢用ANOVA了,就把數據縱向做Friedman檢驗(一維ANOVA的非參數檢驗替代方法),橫向逐層做Mann-Whitney檢驗(非參數檢驗),我都看傻眼了。還有一位參與科研的本科生直接選擇無視,用ANOVA分析出全套結果……研究生導師建議嘗試對數轉換,但Andy Field說這不一定能解決問題,還可能產生新的問題。

其實這個問題很經典,Andy Field在他的教材裡頭就多次寫道,如果每次他回答非正態分布數據做混合設計方差分析的問題假如收取1英鎊,那麼他就有錢買一套新的架子鼓了(Field, 2013)。他的回答是:

There are robust methods that can be used based on bootstrapping (Wilcox, 2012). They can’t be done directly in SPSS but they can be implemented in R, and are explained in the sister textbook for that package.


美國統計大神Rand Wilcox有一套基於自展法的強力的辦法做ANOVA,但是要用到R語言,一種學習曲線很陡峭的方法,而我學了這麼多年統計學都是用SPSS。沒辦法,只好根據Andy Field在Discovering statistics Using R這本書中的建議下載安裝R,後來自學了YouTube上一套教程又改用更方便的R Studio,都是開源免費的,後者在用之前還得先安裝好R。


R是執行命令行的,沒有SPSS那麼傻瓜,開始用起來需要適應。而且要用R做某方面的統計,還得額外下載專門的擴展功能包,還得每次都重新調用。按照書上一步步操作就好,但跟無數電腦軟體問題一樣,到了實際操作的時候就會出現各種意外,出錯導致執行不下去。Wilcox的統計大法要安裝WRS這個包,但老是安裝失敗,原來2018年6月改包已經升級到WRS2,連統計函數的自變量格式也發生了重大變化。最關鍵的是WRS要求分析的數據不能是long結構,而要改成wide結構,而WRS2又要求數據回到long結構。Andy Field的Discovering statistics Using R(2012版)和Rand Wilcox的Introduction to robust estimation and hypothesis testing(2012版)兩本能下載到的書都是介紹WRS一代,能說清楚WRS2的Introduction to robust estimation and hypothesis testing(2017版)要買或者在UCL的教育學院圖書館借。


我本來打算去那個世界第一教育學院借書的,最後還是宅著解決了問題。原來,Wilcox一直在自己的主頁更新他的大法:

https://dornsife.usc.edu/labs/rwilcox/software/

用R的常規package安裝方法不成功(聯想到WRS2的升級,我懷疑大神跟R社區的人鬧翻了),我只能下載他的txt函數集,用source(file.choose())直接導入——這些括號誤導我把文件名和地址填進去,折騰半天才知道不用填,直接ctrl+回車執行然後彈窗選文件。終於可以統計了,我用到的函數如下:

setwd("C:/R")  # 設置默認工作檯文件夾。R裡頭只認/,正好跟Windows默認的文件地址\相反,這也是坑人。

hw<-read.csv("hw.csv", header = TRUE)  # 讀入數據文件。建議把Excel和SPSS另存為csv或dat。

english=bw2list(hw,4,c(14,17,20,23))  # 用bw2list定義一個數據矩陣english,其中4是我的數據文件的第4列,組間因素(兩個語種),c()裡頭是組內因素的4個層次(知覺載荷的4個水平)。

bwtrim(2,4,english)  #  2*4混合設計的強力ANOVA。結果如下:

$`Qa`

[1] 0.01028409

 

$Qa.p.value

          [,1]

[1,] 0.9202307

 

$Qb

[1] 32.37664

 

$Qb.p.value

             [,1]

[1,] 1.578525e-07

 

$Qab

[1] 0.6168458

 

$Qab.p.value

          [,1]

[1,] 0.6128597

WRS一代自由度欠奉。$`Qa`是組間因素主效應,$Qb是組內因素主效應,$Qab是互動效應。Andy Field書中的tsplit函數和bwtrim完全等價。如果是用WRS2,那麼要寫成bwtrim(error ~ speakerstatus*level, id = participantID, data = hw),不用定義數據矩陣了,直接用數據列計算,但數據要搞成long形式:error是要算的數據,speakerstatus、level是指定數據屬於哪一組哪一層,對應唯一id,在Excel上乾坤大挪移一下就好。

                      value df1     df2 p.value

speakerstatus        0.0103   1 20.0732  0.9202

level               32.3766   3 18.2990  0.0000

speakerstatus:level  0.6168   3 18.2990  0.6129

這樣的顯示結果就比較清晰,比SPSS還清楚,還提供自由度。其他WRS2的函數用法就沒有研究了,我懶得去借那本Introduction to robust estimation and hypothesis testing(2017版),你要搞的話可以等Library Genesis更新。WRS的一代二代計算結果應該是一樣的,就是精確位數有點出入,我用兩代方法計算過所有二維ANOVA,確保無誤。以下還是介紹WRS一代。

ESmainMCP(2,4,english,tr=0.2,nboot=100,SEED=T)  # 計算主效應的effect size,多於2組的因素會兩兩給出一個effect size,不像SPSS總是報1個,請自己取捨。我請教了北大的統計高手仍搞不明白,就報一個範圍拉倒。

$`Factor.A`

     Level Level  Effect.Size

[1,]     1     2 9.517426e-05

 

$Factor.B

     Level Level Effect.Size

[1,]     1     2   0.1151448

[2,]     1     3   0.8777893

[3,]     1     4   0.9323554

[4,]     2     3   0.7370218

[5,]     2     4   0.7749252

[6,]     3     4   0.5531625

esImcp(2,4,english,tr=0.2,nboot=100,SEED=T)  # 互動效應的effect size,同上。

mcp2atm(2,4,english, tr=0.2,alpha=0.05,grp=NA,op=F)  # 做組內因素的post hoc兩兩比較,結果看上去很恐怖,完全不是SPSS那種一目了然的表格。Andy Field在他的R書539頁有詳細解讀,簡而言之就是兩種看法,1是看test值是否大過crit值,是就significant;2是看psihat的上下限是否跨越0。1和2有時結果不一致,一個說顯著一個說不顯著,我一般就看2(比較符合普通ANOVA的結果)。$Factor.B就是兩兩比較,一行對應下面相應矩陣的一列,1和-1比較,誰是誰請自己琢磨,就是那幾個組合。

$`Factor.A`$test

     con.num      test     crit       se       df

[1,]       1 0.1365107 2.013117 4.654467 45.81346

 

$`Factor.A`$psihat

     con.num    psihat  ci.lower ci.upper   p.value

[1,]       1 0.6353846 -8.734601 10.00537 0.8920157

 

 

$Factor.B

$Factor.B$`n`

[1] 21 21 21 21 21 21 21 21

 

$Factor.B$test

     con.num       test     crit       se       df

[1,]       1 -0.8093546 2.753126 1.715517 42.43072

[2,]       2 -6.8477007 2.813179 2.604917 28.14531

[3,]       3 -8.8196922 2.819383 3.924609 27.34946

[4,]       4 -6.5736440 2.840275 2.502300 24.97138

[5,]       5 -8.6137220 2.833324 3.857262 25.71528

[6,]       6 -3.8772795 2.777507 4.326785 34.90722

 

$Factor.B$psihat

     con.num     psihat   ci.lower   ci.upper      p.value

[1,]       1  -1.388462  -6.111495   3.334572 4.228268e-01

[2,]       2 -17.837692 -25.165791 -10.509593 1.879895e-07

[3,]       3 -34.613846 -45.678822 -23.548870 1.749087e-09

[4,]       4 -16.449231 -23.556452  -9.342010 6.954278e-07

[5,]       5 -33.225385 -44.154260 -22.296510 4.713615e-09

[6,]       6 -16.776154 -28.793830  -4.758477 4.459276e-04

 

 

$Factor.AB

$Factor.AB$`n`

[1] 21 21 21 21 21 21 21 21

 

$Factor.AB$test

     con.num       test     crit       se       df

[1,]       1 -0.5582529 2.753126 1.715517 42.43072

[2,]       2  0.4521036 2.813179 2.604917 28.14531

[3,]       3  0.7628393 2.819383 3.924609 27.34946

[4,]       4  0.8533687 2.840275 2.502300 24.97138

[5,]       5  1.0244412 2.833324 3.857262 25.71528

[6,]       6  0.4197468 2.777507 4.326785 34.90722

 

$Factor.AB$psihat

     con.num     psihat   ci.lower  ci.upper   p.value

[1,]       1 -0.9576923  -5.680726  3.765341 0.5796058

[2,]       2  1.1776923  -6.150407  8.505791 0.6546596

[3,]       3  2.9938462  -8.071130 14.058822 0.4520892

[4,]       4  2.1353846  -4.971836  9.242605 0.4015668

[5,]       5  3.9515385  -6.977336 14.880413 0.3151679

[6,]       6  1.8161538 -10.201523 13.833830 0.6772428

 

 

$All.Tests

[1] NA

 

$conA

     [,1]

[1,]    1

[2,]    1

[3,]    1

[4,]    1

[5,]   -1

[6,]   -1

[7,]   -1

[8,]   -1

 

$conB

     [,1] [,2] [,3] [,4] [,5] [,6]

[1,]    1    1    1    0    0    0

[2,]   -1    0    0    1    1    0

[3,]    0   -1    0   -1    0    1

[4,]    0    0   -1    0   -1   -1

[5,]    1    1    1    0    0    0

[6,]   -1    0    0    1    1    0

[7,]    0   -1    0   -1    0    1

[8,]    0    0   -1    0   -1   -1

 

$conAB

     [,1] [,2] [,3] [,4] [,5] [,6]

[1,]    1    1    1    0    0    0

[2,]   -1    0    0    1    1    0

[3,]    0   -1    0   -1    0    1

[4,]    0    0   -1    0   -1   -1

[5,]   -1   -1   -1    0    0    0

[6,]    1    0    0   -1   -1    0

[7,]    0    1    0    1    0   -1

[8,]    0    0    1    0    1    1

 

z=bw2list(hw, 4, c(15,18,21,24,25,26,27,28))  # 為三維強力ANOVA定義一個2*2*4的數據矩陣z,結構為between-by-within-by-within。Andy Field說自己也搞不太清楚3-way ANOVA,我就更不懂了,但看到Rand Wilcox提供了函數就照做,而麻煩的是在定義數據矩陣的時候居然用了和二維一樣的定義函數bw2list,這就讓人困惑了,因為另一種三維結構between-by-between-by-within設計是用bbw2list的,自變量的規定是很清楚的。Rand Wilcox的書這個部分我沒看太懂,幸好Google到網上一份義大利的暑期培訓班講義,裡頭講到bw2list的三維用法:c(15,18,21,24,25,26,27,28)之中,前四列是第一層,後四列是第二層。如果是2*3*4結構,我就只能投降了。

bwwtrim(2,2,4,z)  # 三維強力ANOVA。

$`Qa`

         [,1]

[1,] 5.011362

 

$Qa.p.value

           [,1]

[1,] 0.02540106

 

$Qb

         [,1]

[1,] 48.11958

 

$Qb.p.value

             [,1]

[1,] 7.196466e-12

 

$Qc

          [,1]

[1,] 0.8477969

 

$Qc.p.value

          [,1]

[1,] 0.4678504

 

$Qab

           [,1]

[1,] 0.09024845

 

$Qab.p.value

         [,1]

[1,] 0.763924

 

$Qac

          [,1]

[1,] 0.3643552

 

$Qac.p.value

          [,1]

[1,] 0.7787607

 

$Qbc

         [,1]

[1,] 2.869379

 

$Qbc.p.value

           [,1]

[1,] 0.03550038

 

$Qabc

          [,1]

[1,] 0.5556118

 

$Qabc.p.value

          [,1]

[1,] 0.6444565

看到了,這次abc三個因素兩兩互動、三個一起互動都算出來了。Post hoc和effect size就不知道怎麼搞了,就是follow up其中的顯著差別便可。

yuend(hw$PL1dD, hw$PL1dS, tr = .2, alpha =0.05)  # 獨立樣本t檢驗,提供自由度。

yuenv2(hw$PL1dD, hw$PL1dS,tr=0.2,alpha=0.05)  # t檢驗的effect size

不知道robust t-test和非參數檢驗Mann-Whitney誰更有power,反正我就全套用Wilcox的方法了。

估計不少讀研的同學可能也會遇到類似的問題,我推薦英美兩位統計大神近幾年的新成果。可能統計高手在Matlab、SAS上面有更多的手段。伍教練並非統計高手,只是出於實際研究的需要自學了如何在R上實現Rand Wilcox的robust ANOVA,一個接一個解決技術問題,比較有快感(實際上走過的彎路比本文所述多了好幾倍,就不贅述了)。其實這套方法的統計結果跟普通的ANOVA是差不多的,但勝在沒有違規操作,寫到論文中更理直氣壯。

 

 

References

Field, A. (2013). Discovering statistics using IBM SPSS statistics. Sage.

Field, A., Miles, J., Field, Z. (2012). Discovering statistics Using R. Sage.

Lukic, S. (2017, unpublished MSc manuscript). Eyes full of language: examining perceptual capacity in bilingual speakers.

Schmider, E., Ziegler, M., Danay, E., Beyer, L., & Bühner, M. (2010). Is it really robust?. Methodology.

Wilcox, R. R. (2012). Introduction to robust estimation and hypothesis testing. Academic press.



文/伍君儀,透析英語使用法創始人、暢銷書系列《把你的英語用起來!》《把你的詞彙用起來!》作者、北京大學心理學碩士、倫敦大學學院語言科學(語言發育方向)研究生


透析法微信群:請加微信號DIALYSIS55,添加時請標明「兒童」、「打卡」、「報名」,然後拉你入相應的群。

透析法QQ群:59634714或71929542

透析英語新浪微博:@伍君儀透析英語


讀懂原著,聽懂新聞,詞彙量直奔10,000!「把你的英語用起來」VIP訓練營課程價值只需1個月,您就能從「學英語」飛躍到「用英語」,通過手機平板實現全英化的生活方式,讓您讀懂英文原著,聽懂英語新聞,詞彙量穩步擴充到10,000以上,英語考試一路通關。課程內容課程有效期為1年,每周開課,每次課2小時,總共100小時以上,「4+1」結構滾動開課。

必修課

聽力·短讀

口語·寫作

詞彙·長讀

特色課

打造孩子的英語母語

選修課

主題包括全英化教育、雙語智力開發、英語健康養生等。

每次課程保留精華錄音,伍教練每日布置作業並一對一指導,24/7教學答疑及操作示範,口語圈寫作圈實戰。

報名方法點擊「閱讀原文」,或者向本公眾號發送報名,又或者長按二維碼訪問透析法官方微店:


相關焦點

  • 常用數據分析方法:方差分析及實現!
    方差分析是一種常用的數據分析方法,其目的是通過數據分析找出對該事物有顯著影響的因素、各因素之間的交互作用及顯著影響因素的最佳水平等。本文介紹了方差分析的基礎概念,詳細講解了單因素方差分析、雙因素方差分析的原理,並且給出了它們的python實踐代碼。
  • 統計與數據科學方差分析簡介(以疫情為例)
    最近,我有了一個想法,把我的統計知識應用到最近正在生成的大量COVID數據中。下面的公式表示單向Anova測試統計數據.方差分析公式F統計量(也稱為F比)的結果允許對多組數據進行分析,以確定樣本之間和樣本內部的差異。
  • R 語言之數據分析「Resampling」
    在總結回歸分析和方差分析的時候 ④R語言之數據分析「初章」,我總是會在模型的建立之前提到「統計假設」,在模型建立之後進行「假設檢驗」,原因想必大家都能理解,就是因為這些「統計假設」是我們模型建立思想的基礎,是支撐我們模型正確性的「必要條件」。但是,不可否認的是,這些「必要條件」最終會成為我們「數據分析」的局限,讓我們對「不滿足條件的數據集」束手無策。
  • 方差分析 (ANOVA)-29
    單個因素的 ANOVA▶單向方差分析(ANOVA)是比較兩組以上數據均值的差異的統計方法▶假設性檢驗為:ANOVA – 原假設和備擇假設▶為了確定我們是否應接受或否定零假設,我們須計算在後面的幻燈片中介紹的方差分析表中所用到的檢驗統計量(F-比值)
  • 方差分析(ANOVA)原理
    方差分析(ANOVA)原理微信公眾號:生信小知識關注可了解更多的教程及單細胞知識。
  • SPSS之單因素方差分析ANOVA
    最近很多小夥伴都在詢問組間方差分析,綜合大家需求做了一個SPSS的ANOVA教程,其實並沒有大家想像得那麼可怕,跟著小賽一起開始動手吧
  • SPSS——單因素方差分析
    單因素方差分析(one way anova),是一種較為常用的方差分析手段,主要目的是為了尋找多組數據總變異的真實來源,判斷總變異是來自於組內變異(Vin),還是來自於組間變異(Vbetween)。單因素方差分析的檢驗統計量F=Vbetween/Vin,表示組間變異與組內變異的比值。
  • SPSS醫學統計高能方法:單因素方差分析(One Way ANOVA)——【杏花開醫學統計】
    (N=64)、中度組(N=23)和重度組(N=27)。ANOVA運算結果的穩定性,輕微偏態的界定視頻中有詳細講解)▶ K個獨立樣本非參數檢驗(任意一組的血鉀不服從正態分布)    關於正態性檢驗的方法可以觀看視頻中的演示,也可以看杏花開醫學統計公眾號中的正態性檢驗專題。
  • 單因素方差分析(one-way ANOVA)
    這裡,由於僅研究單個因素對觀測變量的影響,因此稱為單因素方差分析。 例如,分析不同施肥量是否給農作物產量帶來顯著影響,考察地區差異是否影響婦女的生育率,研究學歷對工資收入的影響等。這些問題都可以通過單因素方差分析得到答案。
  • python 檢驗方差齊性 - CSDN
    當分類變量為多個時,對分類個數不做要求,即可以為二分分類變量。/ 01 / 數理統計技術數理統計分為頻率和貝葉斯兩大學派。描述性統計分析,描述性分析就是從總體數據中提煉變量的主要信息,即統計量。描述性分析的難點在於對業務的了解和對數據的尋找。
  • R繪圖應用實例:單因素方差分析ANOVA及繪圖
    本文主要是利用日常實驗數據,嘗試用R進行單因素方差分析並繪製柱形圖。
  • R語言統計篇: 單因素協方差分析
    單因素協方差分析也是單因素方差分析(One-way ANOVA,R語言統計篇:單因素方差分析)的一個延伸。比方說,我們現在想要研究不同BMI(偏輕,正常與超重)與空腹血糖的關係,同時校正血壓水平。在此研究中,BMI分組是一個分類變量(自變量),血糖是一個連續變量(因變量),血壓則是一個協變量(covariate)。c.
  • 醫學統計與R語言:雙因素重複測量方差分析(Two-way repeated measures ANOVA)
    微信公眾號:醫學統計與R語言如果你覺得對你有幫助,歡迎轉發輸入1: setwd("C:\\Users\\mooshaa\\Desktop")rma <- read.csv("rma.csv",header=T)rma$group <- factor(rma$group
  • R語言中的t-test和ANOVA
    方差分析(analysis ofvariance,簡寫為ANOVA)是生產和科學研究中分析試驗數據的一種有效的統計方法
  • T檢驗、Z檢驗與ANOVA方差分析的應用比較
    T檢驗、Z檢驗與方差分析(ANOVA,Analysis of Varitation)是我們大學概率論與數理統計課程中的重要教學內容,相信大家大學時一定學過
  • 「spss數據分析系列」方差分析
    上一課我們講的是t檢驗,t檢驗是用於2個類別的均值對比,如果是3分類以及以上的分類的均值對比,則採用方差分析。t檢驗是用的t分布來檢驗時候接受假設,方差分析則用的F分布,如下圖。方差分析的適用條件:1、個樣本的獨立性(指每個單元格內的數據相互獨立):這樣才能保證數據變異的可加性。2、正態性:單元格內的所有總體都是從一個正太總體來面抽出來,這個時候一般由於單元格數量比較少,所以沒法直接分析和觀察,這時候一般採用殘差分析來看。
  • r語言卡方檢驗和似然比檢驗_r語言似然比檢驗代碼 - CSDN
    因變量不只一個時,稱為多元方差分析(MANOVA)。有協變量時,稱為協方差分析(ANCOVA)或多元協方差分析(MANCOVA)。假設你正使用如下表達式對數據進行建模:Y ~ A + B + A : B有三種類型的方法可以分解等式右邊各效應對y所解釋的方差。類型1(序貫型)效應根據表達式中先出現的效應進行調整。A不做調整,B根據A調整,A:B交互項根據A和B調整。類型2(分層型)效應根據同水平或低水平的效應做調整。
  • 最直觀的方差分析(ANOVA) 術語大全
    方差分析ANOVA詞意:analysis of variance,取單詞的前兩個字母組合而成。2. 方差分析的統計學分析基礎是F分布。提出一個案例來展開概念:為測試兩個治療方法,對焦慮症的治療效果,招募了十個有焦慮症的志願者來做實驗。
  • 方差分析常見問題匯總,你想知道的都在這裡
    本文以SPSSAU系統為例,針對方差分析的常見問題進行匯總說明。關於方差分析的分析思路及相關操作可閱讀連結文章:SPSSAU:全流程總結方差分析,只看這篇就夠了。①問題一:t檢驗與方差分析的區別?t檢驗只能進行兩組之間的比較,當分析項X組別超過兩組時,應使用方差分析。②問題二:方差分析是否需要滿足正態性?方差檢驗一般需要進行正態性檢驗,但方差檢驗對數據的正態性的有一定的耐受能力,只要數據近似正態即可接受。如果數據嚴重不正態,則可使用非參數檢驗。
  • 重複測量數據的方差分析在SPSS中的應用——【杏花開醫學統計】
    杏花開生物醫藥統計 一號在手,統計無憂! 關 注 重複測量數據的方差分析 在SPSS中的應用 關鍵詞:spss、重複測量方差 導 讀 在醫學研究中,很多實驗都涉及到重複測量的數據資料