如何统计R中Forward Selection逐步回归在58500数据集上的正确模型数
解决R中逐步向前回归模型匹配统计的问题
核心问题
现有统计代码因变量顺序不同,遗漏了变量组合一致的正确模型,导致结果偏小。解决关键是基于集合匹配而非顺序匹配来判断模型是否正确。
步骤实现
1. 准备真实模型参考数据
先整理每个数据集对应的真实变量集合,生成true_models数据框,包含:
n1-n4:与n_df一致的文件名标识true_IV:该数据集真实模型的变量集合(字符向量格式,如c("varA", "varB"))
2. 合并所选模型与真实模型
# 按文件名标识合并两个数据框 merged_df <- merge(n_df, true_models, by = c("n1", "n2", "n3", "n4"), all.x = TRUE)
3. 定义集合匹配函数
用setequal()忽略变量顺序,判断所选模型与真实模型的变量集合是否完全一致:
is_correct_model <- function(selected, true) { # 处理空值情况 if (is.null(selected) || is.null(true)) return(FALSE) # 集合相等则返回TRUE setequal(selected, true) }
4. 标记正确模型
# 给每条数据添加是否正确的标记 merged_df$correct <- mapply(is_correct_model, merged_df$IV, merged_df$true_IV)
5. 按N-Factor统计正确数量
# 先添加N-Factor列(所选变量的个数) merged_df$n_factor <- sapply(merged_df$IV, length) # 统计3-15因子下的正确模型数 correct_stats <- merged_df %>% dplyr::filter(n_factor %in% 3:15) %>% dplyr::group_by(n_factor) %>% dplyr::summarise(correct_count = sum(correct))
6. 特殊情况处理
如果n_df$IV是逗号分隔的字符串(而非字符向量),先拆分转换:
merged_df$IV <- strsplit(merged_df$IV, ",")
验证
可以抽取4-Factor的正确模型验证结果:
merged_df %>% dplyr::filter(n_factor == 4, correct == TRUE)
内容的提问来源于stack exchange,提问作者Marlen
相关产品推荐
相关产品推荐

