R
Kruskal-Wallis 內置 R 函數與手動計算略有不一致
我對以下內容感到困惑,我無法在其他地方找到答案。
我正在嘗試在做一些統計數據的同時學習 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)
.