如何使用包含计数的数据框来运行应急分析

问题描述 投票:0回答:1

我知道这是一个简单的问题,但我找不到答案,我确信答案很简单。

我有一个 8 X 3 的数据框:第 1 列是年龄,第 2 列是抑郁症,两者都定义为因素。 第 3 列是 freq,它是数字,是频率计数。数据框如下所示: 数据框

我想运行卡方分析(年龄、抑郁症),但无法弄清楚如何向 chisq.test 或 CrossTable 指示 freq 变量代表相应单元格的频率计数。

对于熟悉SAS的人来说,我想做的相当于在PROC FREQ中指定WEIGHT变量。

我尝试了以下方法:

CrossTable(表数据$年龄,表数据$抑郁症)

chisq.test(表数据$年龄,表数据$抑郁症)

我知道这些行不通,因为我不知道如何将 tabledata$freq 作为计数变量包含在内。

r pivot-table
1个回答
0
投票

您需要以适合

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))
© www.soinside.com 2019 - 2024. All rights reserved.