Hypothesis-Testing

相關性檢驗對非正態性的穩健性

  • April 27, 2016

我試圖調和關於 Pearson 相關檢驗統計量對非正態性的穩健性的兩個看似相反的陳述(其中 null 表示“無相關性”)。

這個簡歷回答說:

非常不健壯。

這本生物統計手冊說:

[…] 大量模擬研究表明,線性回歸和相關性對非正態性不敏感;一個或兩個測量變量可能非常不正常,假陽性的概率(P<0.05,當零假設為真時)仍然約為 0.05(Edgell 和 Noon 1984以及其中的參考文獻)。

我錯過了什麼?

Edgell 和 Noon 的論文弄錯了。

背景

該論文描述了模擬數據集的結果具有從正態分佈、指數分佈、均勻分佈和柯西分佈繪製的獨立坐標。(儘管它報告了柯西的兩種“形式”,但它們僅在值的生成方式上有所不同,這是無關緊要的干擾。)數據集大小(“樣本量”)範圍從到. 對於每個數據集,Pearson 樣本相關係數被計算,轉換成通過統計

(見公式(1)),並將其提交給學生分佈與使用雙尾計算的自由度。 作者進行了每個獨立的模擬成對的這些分佈和每個樣本量,產生 每個中的統計數據。最後,他們列出了比例那些看起來很重要的統計數據水平:也就是外部統計學生的尾巴分配。

討論

在我們繼續之前,請注意,這項研究只關注**零相關性檢驗對非正態性的穩健性。這不是一個錯誤,但這是一個需要牢記的重要限制。

這項研究存在一個重要的戰略錯誤和一個明顯的技術錯誤。

戰略錯誤是這些分佈並不是那麼不正常。 正態分佈和均勻分佈都不會對相關係數造成任何麻煩:前者是設計使然,後者是因為它不能產生異常值(這就是導致 Pearson 相關性要健壯)。(不過,必須將法線作為參考,以確保一切正常。)對於數據可能被來自不同位置的分佈的值“污染”的常見情況,這四種分佈都不是很好的模型完全(例如當受試者真的來自不同的人群,實驗者不知道時)。最嚴格的測試來自 Cauchy,但由於它是對稱的,因此不會探測相關係數對單邊異常值最可能的敏感性。

**技術錯誤是該研究沒有檢查 p 值的實際分佈:**它查看了.

(儘管由於計算技術的限制,我們可以原諒 32 年前發生的很多事情,但人們經常檢查受污染的分佈、斜線分佈、對數正態分佈和其他更嚴重的非正態性形式;而且在更長的時間裡,它已經成為例行公事。探索更廣泛的測試規模,而不是將研究限制在一種規模。)

糾正錯誤

下面,我提供R的代碼將完全重現這項研究(在不到一分鐘的計算時間內)。但它做了更多的事情:它顯示了 p 值的樣本分佈。 這很有啟發性,所以讓我們直接進入並查看這些直方圖。

首先,這是我查看的三個分佈的大樣本直方圖,因此您可以了解它們是如何非正態的。

圖1

指數是偏斜的(但不是很偏斜);柯西有長尾巴(事實上,該圖排除了數千個值,因此您可以看到它的中心);受污染的是標準法線,標準法線的 5% 混合物移出到. 它們代表了數據中經常遇到的非正態性形式。

因為 Edgell 和 Noon 將他們的結果列在對應於樣本大小的分佈對和列的行中,所以我也做了同樣的事情。我們不需要查看他們使用的所有樣本大小:最小的 (), 最大 () 和一個中間值 () 會很好。但是,我沒有將尾部頻率製成表格,而是繪製了 p 值的分佈。

圖 2

**理想情況下,p 值將具有均勻分佈:**條形圖均應接近恆定高度,在每個圖中用灰色虛線表示。在這些圖中,有 40 個條,間距恆定一項研究將關注最左邊和最右邊條的*平均高度(“極端條”)。*Edgell 和 Noon 將這些平均值與理想的.

因為對一致性的背離很突出,所以不需要太多評論,但在我提供一些之前,請自行查看其餘結果。 您可以在標題中識別樣本量——它們都運行在每一行中——您可以閱讀每個圖形下方字幕中的成對分佈。

圖 3

圖 4

最讓你印象深刻的是極端柱與分佈的其餘部分有多麼不同。 一項研究非常特別!它並沒有真正告訴我們測試在其他尺寸下的表現如何;事實上,結果為它們是如此特別,以至於它們會在此測試的特徵上欺騙我們。

其次,請注意,當涉及到污染分佈時——它傾向於只產生高異常值——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。

引用自:https://stats.stackexchange.com/questions/209532

comments powered by Disqus