我有一個交叉表(資料幀格式),從中我計算了 chi-sq 標準化殘差。下面我提供了兩個可重現的資料集。
交叉表:
df <- structure(c(310, 36, 0, 0, 212, 158, 9, 0, 21, 35, 17, 4, 25,
102, 49, 18, 7, 35, 51, 28), .Dim = 4:5, .Dimnames = list(c("none",
"grade1", "grade2", "grade3"), c("0-9", "10-19", "20-29", "30-39",
"40 ")))
標準化殘差
st.residuals <- structure(c(9.882, -7.267, -6.247, -3.935, 1.21, 3.035, -5.162,
-4.119, -2.96, 1.945, 2.821, 0.298, -7.492, 4.82, 5.796, 3.161,
-7.005, -0.738, 10.11, 9.704), .Dim = 4:5, .Dimnames = list(c("none",
"grade1", "grade2", "grade3"), c("0-9", "10-19", "20-29", "30-39",
"40 ")))
目標
我所追求的是計算調整后的標準化殘差,這需要將每個標準化殘差除以下圖所示的數量,其中 GT 是表格總計,CT 是列總計,RC 是行總計:

我被卡住的地方
我很難弄清楚(我的壞事)如何在 R 中實作分母的計算。特別是,我不知道如何編碼以便對于每個單元格 R 將考慮相應的行和列總數。
uj5u.com熱心網友回復:
1) R 在 chisq.test 中已經有了這個:
chisq.test(df)$stdres
2)或以下。殘差與問題中的 st.residuals 相同,最后一行產生與上一行相同的結果。
expected <- outer(rowSums(df), colSums(df)) / sum(df)
residuals <- (df - expected) / sqrt(expected)
residuals / sqrt(outer((1 - rowSums(df) / sum(df)), (1 - colSums(df) / sum(df))))
3)或者,我們可以使用掃描來計算上面的 (1)。殘差來自(2),并且如前所述,等于問題中的 st.residuals 。
residuals |>
sweep(1, sqrt(1 - rowSums(df) / sum(df)), `/`) |>
sweep(2, sqrt(1 - colSums(df) / sum(df)), `/`)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/376491.html
上一篇:格式化4個不同資料集中的日期
