相關性檢驗對非正態性的穩健性
我試圖調和關於 Pearson 相關檢驗統計量對非正態性的穩健性的兩個看似相反的陳述(其中 null 表示“無相關性”)。
這個簡歷回答說:
非常不健壯。
這本生物統計手冊說:
[…] 大量模擬研究表明,線性回歸和相關性對非正態性不敏感;一個或兩個測量變量可能非常不正常,假陽性的概率(P<0.05,當零假設為真時)仍然約為 0.05(Edgell 和 Noon 1984以及其中的參考文獻)。
我錯過了什麼?
Edgell 和 Noon 的論文弄錯了。
背景
該論文描述了模擬數據集的結果具有從正態分佈、指數分佈、均勻分佈和柯西分佈繪製的獨立坐標。(儘管它報告了柯西的兩種“形式”,但它們僅在值的生成方式上有所不同,這是無關緊要的干擾。)數據集大小(“樣本量”)範圍從到. 對於每個數據集,Pearson 樣本相關係數被計算,轉換成通過統計
(見公式(1)),並將其提交給學生分佈與使用雙尾計算的自由度。 作者進行了每個獨立的模擬成對的這些分佈和每個樣本量,產生 每個中的統計數據。最後,他們列出了比例那些看起來很重要的統計數據水平:也就是外部統計學生的尾巴分配。
討論
在我們繼續之前,請注意,這項研究只關注**零相關性檢驗對非正態性的穩健性。這不是一個錯誤,但這是一個需要牢記的重要限制。
這項研究存在一個重要的戰略錯誤和一個明顯的技術錯誤。
戰略錯誤是這些分佈並不是那麼不正常。 正態分佈和均勻分佈都不會對相關係數造成任何麻煩:前者是設計使然,後者是因為它不能產生異常值(這就是導致 Pearson 相關性不要健壯)。(不過,必須將法線作為參考,以確保一切正常。)對於數據可能被來自不同位置的分佈的值“污染”的常見情況,這四種分佈都不是很好的模型完全(例如當受試者真的來自不同的人群,實驗者不知道時)。最嚴格的測試來自 Cauchy,但由於它是對稱的,因此不會探測相關係數對單邊異常值最可能的敏感性。
**技術錯誤是該研究沒有檢查 p 值的實際分佈:**它僅查看了.
(儘管由於計算技術的限制,我們可以原諒 32 年前發生的很多事情,但人們經常檢查受污染的分佈、斜線分佈、對數正態分佈和其他更嚴重的非正態性形式;而且在更長的時間裡,它已經成為例行公事。探索更廣泛的測試規模,而不是將研究限制在一種規模。)
糾正錯誤
下面,我提供
R
的代碼將完全重現這項研究(在不到一分鐘的計算時間內)。但它做了更多的事情:它顯示了 p 值的樣本分佈。 這很有啟發性,所以讓我們直接進入並查看這些直方圖。首先,這是我查看的三個分佈的大樣本直方圖,因此您可以了解它們是如何非正態的。
指數是偏斜的(但不是很偏斜);柯西有長尾巴(事實上,該圖排除了數千個值,因此您可以看到它的中心);受污染的是標準法線,標準法線的 5% 混合物移出到. 它們代表了數據中經常遇到的非正態性形式。
因為 Edgell 和 Noon 將他們的結果列在對應於樣本大小的分佈對和列的行中,所以我也做了同樣的事情。我們不需要查看他們使用的所有樣本大小:最小的 (), 最大 () 和一個中間值 () 會很好。但是,我沒有將尾部頻率製成表格,而是繪製了 p 值的分佈。
**理想情況下,p 值將具有均勻分佈:**條形圖均應接近恆定高度,在每個圖中用灰色虛線表示。在這些圖中,有 40 個條,間距恆定一項研究將關注最左邊和最右邊條的*平均高度(“極端條”)。*Edgell 和 Noon 將這些平均值與理想的.
因為對一致性的背離很突出,所以不需要太多評論,但在我提供一些之前,請自行查看其餘結果。 您可以在標題中識別樣本量——它們都運行在每一行中——您可以閱讀每個圖形下方字幕中的成對分佈。
最讓你印象深刻的是極端柱與分佈的其餘部分有多麼不同。 一項研究非常特別!它並沒有真正告訴我們測試在其他尺寸下的表現如何;事實上,結果為它們是如此特別,以至於它們會在此測試的特徵上欺騙我們。
其次,請注意,當涉及到污染分佈時——它傾向於只產生高異常值——p 值的分佈變得不對稱。一個柱(用於測試正相關)非常高,而另一端的對應物(用於測試負相關)非常低。但是,平均而言,它們幾乎平衡:兩個巨大的錯誤抵消了!
尤其令人擔憂的是,隨著樣本量的增加,問題往往會變得更糟。
我也對結果的準確性有些擔憂。以下是來自的摘要迭代次數,是 Edgell 和 Noon 的十倍:
5 20 100 Exponential-Exponential 0.05398 0.05048 0.04742 Exponential-Cauchy 0.05864 0.05780 0.05331 Exponential-Contaminated 0.05462 0.05213 0.04758 Cauchy-Cauchy 0.07256 0.06876 0.04515 Cauchy-Contaminated 0.06207 0.06366 0.06045 Contaminated-Contaminated 0.05637 0.06010 0.05460
其中三個——那些不涉及受污染分佈的——再現了論文表格的部分內容。儘管它們在質量上導致了相同(壞)的結論(即,這些頻率看起來非常接近目標) 它們的差異足以對我的代碼或論文的結果提出質疑。(論文中的精度大約為,但其中一些結果與論文的結果相差很多倍。)
結論
由於未能包括可能導致相關係數出現問題的非正態分佈,並且沒有詳細檢查模擬,Edgell 和 Noon 未能發現明顯缺乏穩健性,並錯過了描述其性質的機會。他們發現在級別似乎幾乎純粹是一個意外,是其他級別的測試不共享的異常。
代碼
# # Create one row (or cell) of the paper's table. # simulate <- function(F1, F2, sample.size, n.iter=1e4, alpha=0.05, ...) { p <- rep(NA, length(sample.size)) i <- 0 for (n in sample.size) { # # Create the data. # x <- array(cbind(matrix(F1(n*n.iter), nrow=n), matrix(F2(n*n.iter), nrow=n)), dim=c(n, n.iter, 2)) # # Compute the p-values. # r.hat <- apply(x, 2, cor)[2, ] t.stat <- r.hat * sqrt((n-2) / (1 - r.hat^2)) p.values <- pt(t.stat, n-2) # # Plot the p-values. # hist(p.values, breaks=seq(0, 1, 1/40), freq=FALSE, xlab="p-values", main=paste("Sample size", n), ...) abline(h=1, lty=3, col="#a0a0a0") # # Store the frequency of p-values less than `alpha` (two-sided). # i <- i+1 p[i] <- mean(1 - abs(1 - 2*p.values) <= alpha) } return(p) } # # The paper's distributions. # distributions <- list(N=rnorm, U=runif, E=rexp, C=function(n) rt(n, 1) ) # # A slightly better set of distributions. # # distributions <- list(Exponential=rexp, # Cauchy=function(n) rt(n, 1), # Contaminated=function(n) rnorm(n, rbinom(n, 1, 0.05)*10)) # # Depict the distributions. # par(mfrow=c(1, length(distributions))) for (s in names(distributions)) { x <- distributions[[s]](1e5) x <- x[abs(x) < 20] hist(x, breaks=seq(min(x), max(x), length.out=60),main=s, xlab="Value") } # # Conduct the study. # set.seed(17) sample.sizes <- c(5, 10, 15, 20, 30, 50, 100) #sample.sizes <- c(5, 20, 100) results <- matrix(numeric(0), nrow=0, ncol=length(sample.sizes)) colnames(results) <- sample.sizes par(mfrow=c(2, length(sample.sizes))) s <- names(distributions) for (i1 in 1:length(distributions)) { s1 <- s[i1] F1 <- distributions[[s1]] for (i2 in i1:length(distributions)) { s2 <- s[i2] F2 <- distributions[[s2]] title <- paste(s1, s2, sep="-") p <- simulate(F1, F2, sample.sizes, sub=title) p <- matrix(p, nrow=1) rownames(p) <- title results <- rbind(results, p) } } # # Display the table. # print(results)
參考
Stephen E. Edgell 和 Sheila M. Noon,*違反常態的影響相關係數的檢驗。*心理公報 1984 年,第 95 卷,第 3 期,576-583。