R语言dnorm命令参数添加咨询及原假设下产品B‘Medium’评级预期计数求解
计算卡方检验中原假设下产品B'Medium'类别的预期计数
首先得指出:你用dnorm(15)完全找错了方向——dnorm()是用来计算正态分布的概率密度值的,和列联表卡方检验的预期计数完全不相关,这就是你得不到正确结果的核心原因。
要解决这个问题,我们需要用卡方检验中预期计数的标准计算公式:每个单元格的预期计数 = (该行的总计 × 该列的总计) / 总样本量。
接下来一步步用R实现计算:
1. 确认矩阵结构
你的矩阵定义是正确的,先运行这段代码确保数据无误:
mat <- matrix(c(24, 21, 14, 12, 15, 22, 15, 26, 24), ncol = 3, byrow = TRUE) colnames(mat) <- c("Low","Medium","High") rownames(mat) <- c("A","B","C")
2. 计算预期计数(两种方法可选)
方法一:手动分步计算
这种方式能让你清晰看到每一步的逻辑:
# 计算每行的总和(产品B的行总和对应row_totals["B"]) row_totals <- rowSums(mat) # 计算每列的总和(Medium列的总和对应col_totals["Medium"]) col_totals <- colSums(mat) # 计算总样本量 total_observations <- sum(mat) # 计算产品B Medium类别的预期计数 expected_B_medium <- (row_totals["B"] * col_totals["Medium"]) / total_observations expected_B_medium
运行后会得到结果≈17.56,四舍五入后就是选项里的17.6。
方法二:用chisq.test()一键获取所有预期值
R的chisq.test()函数会自动计算所有单元格的预期计数,你可以直接提取目标值:
# 运行卡方检验(若单元格预期值过小会弹出警告,但不影响我们提取结果) chi_test <- chisq.test(mat) # 查看所有单元格的预期计数矩阵 chi_test$expected
输出矩阵中,B行Medium列的数值就是我们需要的结果,和手动计算完全一致。
匹配选项
你的选项里17.6正好对应计算结果,这就是正确答案。
内容的提问来源于stack exchange,提问作者Henrik.A
相关产品推荐
相关产品推荐

