使用group_by和summarise分析SPSS数据集的相关性与显著性检验问题
问题1:
cor()与correlate()的差异及NA原因 - 核心差异在缺失值处理逻辑:
cor()是base R自带函数,默认参数use = "everything"——只要输入向量里存在NA,就直接返回NA。你的分组数据中某个性别组的toptim或tnegaff有缺失值,因此触发该逻辑返回NA。correlate()是corrr包的函数,默认参数use = "pairwise.complete.obs"——会自动剔除两个变量中存在缺失值的观测,仅用完全配对的有效数据计算相关性,因此能得到有效结果。
- 验证方法:给
cor()指定缺失值处理参数,cor(toptim, tnegaff, use = "pairwise.complete.obs"),即可得到与correlate()一致的结果。
问题2:
cor.test()分组检验的报错解决 - 报错原因:
cor.test()返回的是htest类对象(包含相关系数、p值、置信区间等多维度结果),而dplyr::summarise()要求每个汇总结果是长度为1的向量,无法直接接收复杂对象,因此报错。 - 正确处理方法:
用broom::tidy()将htest对象转换为结构化数据框,结合dplyr语法提取所需统计量:
运行后会得到包含library(broom) library(dplyr) df %>% group_by(sex) %>% summarise(tidy(cor.test(toptim, tnegaff)), .groups = "drop")estimate(相关系数)、p.value(显著性p值)、置信区间等列的数据框,可直接提取预期的p值。 - 之前
tidy处理失败的可能原因:- 未正确将
tidy()嵌套在summarise()中,或未加载broom包导致函数未识别; - 某个性别组样本量过小(n<2),
cor.test()无法完成计算,导致tidy()处理后返回NA,需检查分组样本量。
- 未正确将
内容的提问来源于stack exchange,提问作者ronzenith
相关产品推荐
相关产品推荐

