逻辑回归创建新变量时系数异常问题求助
问题排查与分析
首先你的mutate代码逻辑是对的:Subway对应0,McDonalds对应1,这部分没有问题。系数数值“不准确”的感知大概率来自以下几个原因,逐一排查:
混淆了逻辑回归系数的含义:
glm输出的系数是对数优势比(log odds ratio),不是概率或直接的关联强度。比如calories的系数为0.01,代表每增加1单位卡路里,属于McDonalds的对数优势比增加0.01,转换成更直观的关联倍数需要用exp(log$coefficients)。变量尺度差异过大:
calories(通常几百)、sodium(通常几千)、protein(几十)的数值范围差异极大,未标准化的情况下,系数会因为变量尺度被压缩/放大,看起来“不符合预期”。可以先对变量做标准化再建模:rest <- fastfood %>% filter(restaurant %in% c("McDonalds", "Subway")) %>% mutate(restbin = ifelse(restaurant == "Subway", 0, 1), across(c(calories, sodium, protein), scale)) # 标准化变量 log <- glm(restbin ~ calories + sodium + protein, binomial(), data = rest) round(log$coefficients, 2)数据过滤是否正确:
执行table(rest$restaurant)确认过滤后的数据是否只有McDonalds和Subway,避免混入其他餐厅数据干扰模型结果。模型方向是否符合预期:
你的模型是用营养变量预测“是否为McDonalds”,如果目标是看餐厅对营养变量的影响,那模型方向应该反过来:glm(calories ~ restbin, gaussian(), data=rest)(可替换为其他营养变量),这时候系数才是餐厅对应的营养变量差异。
内容的提问来源于stack exchange,提问作者jakdar
相关产品推荐
相关产品推荐

