R语言dplyr管道下glm逻辑回归predict()函数使用疑问
逻辑回归
predict()使用问题解答 问题1:mutate中已生成3个新列,predict()为何用原始x而非新列计算?
你在mutate()中调用predict()时,显式传入的第二个参数是原始的data对象——也就是管道最开头传入的、仅包含x单列的tibble。mutate()的列计算是逐步在临时数据中新增字段,但你没有把这个临时数据传给predict(),predict()只会读取你传入的原始data里的字段,自然只会用到原始x,不会用到新生成的y、odds_ratio等列。
如果你希望用mutate()计算过程中生成的临时字段做预测,才需要传入cur_data()(dplyr 1.0.0及以上版本支持)作为predict()的第二个参数。另外你拟合的glm模型的自变量只有x,就算后续新生成的列和模型变量重名,只要你传入的预测用数据集里没有这个重名字段的干扰,也不会影响计算结果。
问题2:此处调用predict()为何不需要指定type = "response"参数?
glm()模型的predict()方法默认type参数值为"link",对于你使用的二项分布逻辑回归(family = binomial,默认使用logit连接函数)来说,type = "link"输出的就是对数几率(log odds)值,刚好和你手动通过概率反推的log_odds_ratio结果完全一致,完全符合你生成log_odds_ratio2的需求。
而你之前指定type = "response"时,predict()会把对数几率通过sigmoid函数转换为0-1区间的预测概率值,两者输出的结果维度不同,对应不同的使用场景,所以这里不需要加这个参数。
内容的提问来源于stack exchange,提问作者Cindy L
相关产品推荐
相关产品推荐

