我知道这是一个简单的问题,但我找不到答案,我确信答案很简单。
我有一个 8 X 3 的数据框:第 1 列是年龄,第 2 列是抑郁症,两者都定义为因素。 第 3 列是 freq,它是数字,是频率计数。数据框如下所示: 数据框
我想运行卡方分析(年龄、抑郁症),但无法弄清楚如何向 chisq.test 或 CrossTable 指示 freq 变量代表相应单元格的频率计数。
对于熟悉SAS的人来说,我想做的相当于在PROC FREQ中指定WEIGHT变量。
我尝试了以下方法:
CrossTable(表数据$年龄,表数据$抑郁症)
chisq.test(表数据$年龄,表数据$抑郁症)
我知道这些行不通,因为我不知道如何将 tabledata$freq 作为计数变量包含在内。
您需要以适合
chisq.test
函数的格式获取数据,该函数接受类似矩阵的对象或两个相同长度的向量。
实现此目的的一种方法是使用
tidyr
: 旋转数据
X <- tidyr::pivot_wider(data, names_from=depression, values_from=freq); X
X
# A tibble: 4 × 3
age `1` `0`
<dbl> <dbl> <dbl>
1 25 1108 5234
2 29 2086 16824
3 34 2056 21608
4 35 1353 15000
(XSQ <- chisq.test(as.matrix(X[,2:3])))
Pearson's Chi-squared test
data: X[, 2:3]
X-squared = 508.78, df = 3, p-value < 2.2e-16
XSQ$residuals
1 0
[1,] 18.413377 -6.177473
[2,] 3.954237 -1.326600
[3,] -6.907864 2.317508
[4,] -7.409337 2.485746
表明抑郁症与年龄之间存在显着相关性,与其他一代相比,年轻一代患抑郁症的比例更高。
数据:
data <- data.frame(age=c(25,25,29,29,34,34,35,35),
depression=c(1,0,1,0,1,0,1,0),
freq=c(1108,5234,2086,16824,2056,21608,1353,15000))