R

Kruskal-Wallis 內置 R 函數與手動計算略有不一致

  • January 9, 2017

我對以下內容感到困惑,我無法在其他地方找到答案。

我正在嘗試在做一些統計數據的同時學習 R,並且,作為練習,我嘗試通過在 R 中“手動”執行這些操作來仔細檢查內置 R 函數的結果。但是,對於 Kruskal-Wallis 測試,我不斷得到不同的結果,我不知道為什麼。

例如,我正在查看在練習中分發的以下數據

activity <- c(2, 4, 3, 2, 3, 3, 4, 0, 4, 3, 4, 0, 0, 1, 3, 1, 2, 0, 3, 1, 0, 3, 4, 0, 1, 2, 2, 2, 3, 2) 
group <- c(rep("A", 11), rep("B", 10), rep("C", 9))
group <- factor(group)
data.raw <- data.frame(activity, group)

我想按組分析活動。首先,我使用內置的 R 函數運行 Kruskal-Wallis 測試

kruskal.test(activity ~ group, data = data.raw)

哪個返回.

為了仔細檢查,我嘗試在 R 中“手動”執行相同的操作,並使用以下(無疑是無助的)代碼

rank <- rank(activity)
data.rank <- data.frame(rank, group)
rank.sum <- aggregate(rank ~ group, data = data.rank, sum)

x <- rank.sum[1,2]^2 / 11 + rank.sum[2,2]^2 / 10 + rank.sum[3,2]^2 / 9
H <- (12 / (length(activity) * (length(activity) + 1))) * x - 3 * (length(activity) + 1)
H

這旨在反映以下公式:

在哪裡是觀察的總數,是組數,是觀察的數量第組,和是等級的總和第組。

現在我得到了,這使我更加困惑,這也是為相關練習提供的答案。我已經對幾個不同的數據集進行了嘗試,並且我傾向於獲得稍高的值使用內置功能。

我試圖找出我做錯了什麼或未能理解,但無濟於事。誰能幫我理解為什麼內置kruskal.test函數返回的值與我通過拼寫得到的值不同?

kruskal.test應用此 Wikipedia 文章(第 4 點)中描述的關係更正:

如果使用上一點中描述的快捷公式,可以通過將 H 除以, …

繼續您的代碼:

TIES <- table(activity)
H / (1 - sum(TIES^3 - TIES)/(length(activity)^3 - length(activity)))
#[1] 8.9056

您可以通過仔細研究代碼來了解 R 函數的作用,您可以使用getAnywhere(kruskal.test.default).

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

comments powered by Disqus