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

2021-02-21 透析英語

伍教練在倫敦大學學院完成的碩士課題是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教學答疑及操作示範,口語圈寫作圈實戰。

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

相關焦點

  • 生物統計(4)-單因素方差分析
    mark如果F值接近於1,就沒有理由拒絕H0;反之,F值越大,拒絕H0的理由越充分,數理統計的理論證明,當H0成立時,F統計量服從F分布,方差分析是單側F檢驗。變異是方差分析的基本思想上面的話可能不太好理解。
  • R-統計描述與假設檢驗
    :統計描述常用各種統計圖形直觀地呈現數據特徵,對於R語言繪製統計圖形,可參考公眾號之前的文章:R-可視化基礎專欄(2) —— 條形圖(一)R-可視化基礎專欄(3)—— 條形圖(二)R-可視化基礎(5)——散點圖、折線圖R-可視化基礎(6)——箱圖&小提琴圖二、假設檢驗
  • 數學建模培訓26_數據分析基礎(3)_單因素方差分析
    在實際問題中,人們常常需要在不同的條件下對所研究的對象進行對比試驗,從而得到若干組數據(樣本)。方差分析就是一種分析、處理多組實驗數據間均值差異的顯著性的統計方法。其主要任務是,通過對數據的分析處理,搞清楚各實驗條件對實驗結果的影響,以便更有效地指導實踐,提高經濟效益或者科研水平。
  • R語言之冗餘分析(RDA)及方差分解(VPA)
    在進行RDA分析前需對包含很多0值的物種數據做一定的轉化。具體的描述與RDA解讀可參考相關書籍或文獻。第一軸長度<3,則進行RDA分析;第一軸長度>4,進行CCA分析;3<第一軸長度<4,兩者皆可。此處<3,進行RDA分析。
  • 常用數據分析方法:方差分析及實現!
    方差分析是一種常用的數據分析方法,其目的是通過數據分析找出對該事物有顯著影響的因素、各因素之間的交互作用及顯著影響因素的最佳水平等。本文介紹了方差分析的基礎概念,詳細講解了單因素方差分析、雙因素方差分析的原理,並且給出了它們的python實踐代碼。
  • R語言統計相關函數總結
    R語言在統計分析方面起了很大的作用,並且其開開放性更是促進了大量分析R包的出現。
  • 方差分析(ANOVA)原理及其實現
    反應測量數據變異性的指標有多個,在方差分析中選用方差來度量資料的變異程度。要正確認識觀測值的便宜是由於處理效應還是誤差效應引起的,我們可以分別計算出處理效應的方差以及誤差小於的方差,在一定顯著水平下進行比較,如果二者相差不大,說明實驗處理對觀測值的影響不大;如果差異較大則說明實驗處理對於觀測的影響較大。    方差分析建立在三個基本假定的基礎上:一.
  • Python數據科學:方差分析
    本次介紹:方差分析:一個多分類分類變量與一個連續變量間的關係。其中分類個數大於兩個,分類變量也可以有多個。當分類變量為多個時,對分類個數不做要求,即可以為二分分類變量。/ 01 / 數理統計技術數理統計分為頻率和貝葉斯兩大學派。描述性統計分析,描述性分析就是從總體數據中提煉變量的主要信息,即統計量。描述性分析的難點在於對業務的了解和對數據的尋找。
  • 「R」統計檢驗函數匯總
    資料來源:《R 語言核心技術手冊》和 R 文檔數據基本來自胡編亂造 和 R 文檔本文基本囊括了常用的統計檢驗在 R 中的實現函數和使用方法。兩總體方差檢驗上面的例子假設方差同質,我們通過檢驗查看。服從正態分布的兩總體方差比較。
  • Graphpad 科學統計:美味的包子和方差分析
    首先,選擇analyse中的"coloum statistics"接著,選擇高斯分布檢驗中的第一個,點擊ok就可以進行數據的正態分布檢驗了我們從分析結果中看到,如果數據符合正態分布規律,那麼,就會在這個檢驗中得到陽性的結果。
  • 乾貨|方差分析(ANOVA)系列之單因子方差分析
    方差分析是用來確定因變量(「 Y」)與單個或多個自變量(「 Xs」) 間關係的統計顯著性的方法,其中(「 Xs」)具有兩個或多個水平。即確定每一水平的響應變量值的均值是否來自同一總體的一種方法(Ho : 所有平均值都相等 ;Ha : 至少有個均值不相等)。方差分析(ANOVA)能夠解決多個均值是否相等的檢驗問題。採用的方法就是比較各水平的方差。
  • 方差分析 (ANOVA)-29
    單個因素的 ANOVA▶單向方差分析(ANOVA)是比較兩組以上數據均值的差異的統計方法▶假設性檢驗為:ANOVA – 原假設和備擇假設▶為了確定我們是否應接受或否定零假設,我們須計算在後面的幻燈片中介紹的方差分析表中所用到的檢驗統計量(F-比值)
  • 方差分析(二): ANOVA過程單因素方差分析
    >「朝陽35處」可查看「說人話的大數據」系列合輯在方差分析中,最簡單的情形為單因素。在SAS中進行單因素方差分析可以使用ANOVA過程和GLM過程,本文先對ANOVA過程進行方差分析進行介紹,下面一篇將文章介紹SLM過程進行方差分析。在方差分析中,最簡單的情形為單因素,熟練掌握單因素的方差分析對理解、解決多因素方差問題很有幫助。在SAS中,方差分析可以通過PROC TTEST、PROC ANOVA與PROC GLM實現。
  • 方差分析(ANOVA)原理
    方差分析(ANOVA)原理微信公眾號:生信小知識關注可了解更多的教程及單細胞知識。
  • R 語言之數據分析「Resampling」
    在總結回歸分析和方差分析的時候 ④R語言之數據分析「初章」,我總是會在模型的建立之前提到「統計假設」,在模型建立之後進行「假設檢驗」,原因想必大家都能理解,就是因為這些「統計假設」是我們模型建立思想的基礎,是支撐我們模型正確性的「必要條件」。但是,不可否認的是,這些「必要條件」最終會成為我們「數據分析」的局限,讓我們對「不滿足條件的數據集」束手無策。
  • R語言 | 方差分析(下)
    R: The R Project for Statistical Computinghttps://www.r-project.org/RStudio:https://rstudio.com/方差分析的主要優點在於,它允許我們可以檢驗兩個及以上不同組之間均數的差異情況,並介紹了單因素方差分析的方法,它類似於擴展版的獨立樣本t檢驗。
  • 《R語言實戰》菜雞筆記(七):基本統計分析
    # 《R語言實戰》第七章 基本統計分析# 描述性統計分析/計算描述性統計量# 方法一:summary() 獲取最值 四分位數 均值data_1 <- mtcars[c("mpg", "hp", "wt", "am")]head(data_1)summary(data_1)# 方法二:sapply()/apply() 計算所選擇的任意描述性統計量
  • R語言從入門到精通:Day13-R語言回歸分析
    以AER包中的數據框Affairs為例,我們將通過探究婚外情的數據來闡述Logistic 回歸的過程。該數據從601 個參與者身上收集了9個變量,包括一年來婚外私通的頻率以及參與者性別、年齡、婚齡、是否有小孩、宗教信仰程度(5分制,1分表示反對,5分表示非常信仰)、學歷、職業(7種分類),還有對婚姻的自我評分(5分制,1表示非常不幸福,5表示非常幸福)。
  • R與生物專題 | 第五十四講 R-樣本量及實驗效能計算
    ')輸出結果   Two-sample t test power calculation n = 190.0991= 0.05, power = NULL, alternative =c("two.sided", "less","greater"))n1為第一組的樣本量,n2為第二組的樣本量,其他同pwr.2p.test()
  • R繪圖應用實例:單因素方差分析ANOVA及繪圖
    本文主要是利用日常實驗數據,嘗試用R進行單因素方差分析並繪製柱形圖。