logit模型预测概率计算是否正确?加权场景需注意什么?
问题解答
一、预测概率计算方法的正确性
你采用的方法本质是正确的,它和margins包默认计算的**平均边际效应(AME)**逻辑一致:固定每个观测的其他协变量取值,仅改变x1的取值得到预测概率,再对所有观测的预测结果取均值,两个均值的差值就是x1对y的平均边际效应。
出现细微差异的常见原因:
- 变量名不匹配:你在
margins中指定variables="treatment",如果实际要计算的变量是x1而非treatment,会导致计算的是其他变量的边际效应,自然结果不同,先检查变量名是否对应。 - 数值精度差异:
predict和margins内部的浮点运算精度设置略有不同,当样本量极大或系数绝对值极小时,可能出现微小的舍入偏差。 - 数据类型问题:如果原数据中的二分变量是因子类型,
transform函数可能不会保留原因子水平,导致预测时的变量编码和建模时不一致,建议改用dplyr::mutate修改x1取值,确保变量类型与原数据一致。
二、带权重的logit模型调整
当logit模型加入权重(如glm(..., weights = weight_col)),计算预测概率均值时必须使用权重加权平均,而非简单算术平均,因为权重代表了每个观测的统计权重。
调整后的代码示例:
# 计算x1=1时的加权平均预测概率 pred_x1_1 <- predict(logit, transform(df, x1=1), type='response') weighted.mean(pred_x1_1, df$weight_col) # 计算x1=0时的加权平均预测概率 pred_x1_0 <- predict(logit, transform(df, x1=0), type='response') weighted.mean(pred_x1_0, df$weight_col)
对应的margins命令也需指定权重参数,保证结果一致:
summary(margins(logit, variables="x1", weights = df$weight_col))
内容的提问来源于stack exchange,提问作者Ray
相关产品推荐
相关产品推荐

