如何为含多水平因子的数据框添加系数乘积衍生变量?
解决方法
不用循环的话,直接利用模型的设计矩阵就能高效计算这两个衍生变量,步骤如下:
- 提取模型对应的设计矩阵(自动处理因子的哑变量编码):
# 获取模型的设计矩阵 design_mat <- model.matrix(model)
- 提取模型系数:
coeffs <- coef(model)
- 计算
coeff1*x1(x1的效应项):
因为x1是连续变量,直接用原数据的x1乘以对应系数即可:
df$x1_effect <- df$x1 * coeffs["x1"]
- 计算
coeff2*x2(x2的效应项):
x2作为多水平因子,模型中会生成多个哑变量系数,我们需要把每个观测对应的哑变量与系数相乘后求和,得到该观测的x2效应:
# 筛选设计矩阵中属于x2的列,以及对应的系数 x2_cols <- grep("^x2", colnames(design_mat)) x2_coeffs <- coeffs[x2_cols] # 计算每个观测的x2效应 df$x2_effect <- design_mat[, x2_cols] %*% x2_coeffs
这样就完成了两个衍生变量的添加,全程不需要循环,利用矩阵运算的特性处理因子的多水平问题,效率更高。
内容的提问来源于stack exchange,提问作者minimalbob
相关产品推荐
相关产品推荐

