如何合并观测与期望频率矩阵以计算卡方(χ²)统计量
解决方案
首先将两个矩阵转换为数据框,方便进行合并操作:
# 转换为数据框并命名列 observed_df <- as.data.frame(Observed) colnames(observed_df) <- c("value", "observed_freq") expected_df <- as.data.frame(Expected) colnames(expected_df) <- c("value", "expected_freq")
接下来按value列合并两个数据框,保留所有数值,缺失的频率用0填充(卡方计算要求每个类别都有观测和期望频率):
# 合并数据框 merged_df <- merge(observed_df, expected_df, by = "value", all = TRUE) # 将缺失的频率替换为0 merged_df$observed_freq[is.na(merged_df$observed_freq)] <- 0 merged_df$expected_freq[is.na(merged_df$expected_freq)] <- 0
合并后的merged_df会包含所有唯一的value,以及对应的观测和期望频率,格式示例如下:
| value | observed_freq | expected_freq |
|---|---|---|
| 1 | 249 | 284 |
| 2 | 454 | 358 |
| ... | ... | ... |
最后计算卡方统计量,将观测和期望频率整理为向量传入chisq.test:
# 提取频率向量 obs <- merged_df$observed_freq exp <- merged_df$expected_freq # 计算卡方统计量(需将期望频率转换为概率占比) chi_result <- chisq.test(obs, p = exp / sum(exp)) # 查看结果 print(chi_result)
内容的提问来源于stack exchange,提问作者Tayeb Mohammadi
相关产品推荐
相关产品推荐

