使用chisq.test()报错:'x'与'p'元素数量需一致问题求助
R语言chisq.test()报错解决:'x' 和 'p' 必须具有相同数量的元素
错误提示翻译
'x' 和 'p' 必须具有相同数量的元素,尽管数据框长度相同
问题根源
你代码里的matrix()包装和double(df)用法是核心问题:
matrix()会把一维数据转成二维结构,而chisq.test()的x(观测计数)和p(概率向量)要求是一维向量,不是二维矩阵。double()函数的作用是创建指定长度的双精度空向量,不是转换现有矩阵的元素类型,你误用它处理矩阵,导致传入的参数结构不符合要求。
解决步骤
- 将数据转成一维向量:如果
observed_values和expected_values是数据框,用unlist()转成向量;如果已经是向量,直接使用。 - 确保概率和为1:将预期值除以样本量126得到概率向量,验证总和是否接近1。
- 正确调用chisq.test():
示例代码:
# 转换观测值为一维向量(数据框转向量用unlist) observed_vec <- unlist(observed_values) # 转换预期值为概率向量,确保和为1 expected_vec <- unlist(expected_values) / 126 # 先验证关键条件 stopifnot(length(observed_vec) == length(expected_vec)) stopifnot(abs(sum(expected_vec) - 1) < 1e-6) # 允许微小浮点误差 # 执行卡方检验 chisq.test(x = observed_vec, p = expected_vec)
额外注意
x参数必须是非负整数(观测计数),如果你的观测值是小数,需要确认是否为计数数据,否则卡方检验不适用。- 若预期计数(即
sum(observed_vec) * expected_vec)中有小于5的情况,chisq.test会给出警告,这时候可以考虑添加simulate.p.value = TRUE参数来模拟p值。
内容的提问来源于stack exchange,提问作者Ryan Hedburg
相关产品推荐
相关产品推荐

