r - 使用 apply/like 函数自动进行统计分析

标签 r statistics apply lapply

我有一个包含 5 列的数据框,每列对应一个调查项目和一个分组变量。我的数据框中共有 300 个观察值,每个单元格条目代表学生对给定项目给出的响应。我构建了以下可重现的数据框:

set.seed(14)
Group <- rep(c(0, 1), each = 150)
mydf <- data.frame(replicate(5, sample(0:1,300,rep=TRUE)))
mydf$Group <- Group
mydf$Group <- factor(mydf$Group, levels = c(0, 1), labels = c("Group A", "Group B"))
head(mydf); tail(mydf)
> head(mydf); tail(mydf)
  X1 X2 X3 X4 X5   Group
1  0  1  1  1  0 Group A
2  1  1  1  1  1 Group A
3  1  1  0  1  0 Group A
4  1  0  0  1  1 Group A
5  1  1  0  1  0 Group A
6  1  0  1  1  1 Group A
    X1 X2 X3 X4 X5   Group
295  0  1  1  0  1 Group B
296  0  0  1  0  0 Group B
297  1  1  0  1  0 Group B
298  1  1  0  0  1 Group B
299  0  0  1  0  0 Group B
300  1  1  1  1  1 Group B

我想做的是对每个调查项目进行卡方独立性检验 X1X5。到目前为止,我一直在执行以下操作[针对第 1 项 (X1)]:

mydf$X1 <- factor(mydf$X1, levels = c(0, 1), labels = c("AGREE", "DISAGREE"))
MyTable <- table(mydf$Group, mydf$X1)
addmargins(MyTable)
chisq.test(MyTable, correct = FALSE)

并且我想使用 lapply 函数(或类似的函数)来自动执行此过程,这样我就不必为 5 个项目中的每一个重复前面的代码。这一点特别重要,因为我有一个包含 50 个项目的类似数据框,并且我想使用相同的代码来自动执行这些分析。关于如何进行有什么建议吗?我在调用每个变量(即 X1X2 等)时遇到了最大的麻烦,而且我不知道该怎么做。我最近开始使用R,所以我对这些函数和命令没有太深入的理解。任何帮助是极大的赞赏。

最佳答案

我们可以使用lapply循环“X1”到“X5”列,然后创建一个包含“Group”列和chisq的 .test 返回测试结果的列表

out <- lapply(mydf[paste0("X", 1:5)], function(x) 
    chisq.test(table(mydf$Group,
            factor(x, levels = 0:1, labels = c("AGREE", "DISAGREE"))), 
           correct = FALSE))

sapply(out, `[[`, "p.value")
#       X1         X2         X3         X4         X5 
#0.72875061 0.72888976 0.90732945 0.01525704 0.08243538 

关于r - 使用 apply/like 函数自动进行统计分析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62182008/

相关文章:

linux - 检测操作系统并在 R 中适当更改路径

r - 使用 ggplot2::stat_y Density 绘制横向密度

r - 如何在R语言中用 'y'替换多项式中的x?

algorithm - 将均匀分布转换为肥尾分布

R:更改单元格中的值,如果其上方和下方的值彼此匹配,而不使用 for 循环

r - 特定的 x 轴/面顺序 ggpubr

r - 如何找到经验累积密度函数 (ECDF) 的分位数

使一组随机结果接近特定百分比的算法

javascript - 如何将此函数应用于具有相同 ID 的所有元素,而不仅仅是第一个元素?

R - 致力于速度/效率 - 从大文件创建+更新矩阵