lm_robust()数值转因子与原生因子回归结果不一致的适配需求
问题解决方法
核心原因
回归结果差异的本质是原生因子型数据的基准水平与数值型数据转因子后的基准水平不一致:
- 数值型变量转
factor时,默认以最小数值对应的水平作为基准 - 原生因子的基准水平默认是因子水平列表中的第一个(按字符排序),两者不匹配就会导致系数、截距出现差异
具体步骤
1. 统一因子基准水平
将factordata中所有因子变量的基准水平调整为与numericdata转因子后的一致:
# 指定需要调整的变量列表 target_vars <- c("A", "V", "Y", "Gender", "T") # 循环调整每个变量的基准水平 for(var in target_vars){ # 获取数值型数据中该变量的最小值作为基准水平 ref_val <- as.character(min(numericdata[[var]])) # 重新设定原生因子的基准水平 factordata[[var]] <- relevel(factordata[[var]], ref = ref_val) }
2. 重新构建模型
调整基准后运行model2,此时结果会与model1完全一致,同时保留原生因子的命名形式:
model2 <- lm_robust(P~factor(A)+factor(V)+factor(Y)+factor(Gender)+factor(T), se_type="stata", cluster=R_ID, data=factordata)
3. 验证结果一致性
可以用以下代码确认两个模型的系数完全匹配:
# 对比系数,允许微小浮点误差 all.equal(coef(model1), coef(model2), tolerance = 1e-6)
返回TRUE即说明系数完全一致。
内容的提问来源于stack exchange,提问作者Saidbf
相关产品推荐
相关产品推荐

