逻辑回归二分类结果数据模拟出错?系数估计偏差问题求助
问题根源与修正方案
你的模拟代码存在两处关键错误,直接导致系数估计严重偏差:
1. 概率π的计算错误
你原本计划使用逻辑斯蒂函数 $exp(xT\gamma)/(1+exp(xT\gamma))$ 生成概率,但代码中写错了函数形式:
p = 1/(1+l)
这里l = x%*%r是线性预测项,正确的逻辑斯蒂概率计算应该是:
p = exp(l)/(1 + exp(l))
原写法完全背离了逻辑回归的链接函数定义,生成的概率值完全不符合预期。
2. 二分类结果生成的参数错误
调用rbinom生成t时,你错误地将概率参数指定为未定义的t,而非计算好的p:
t = rbinom(n(),1,t)
这会让R将未定义的t默认视为0,最终生成的t几乎全为随机噪声,模型自然无法学到正确的系数。
修正后的完整代码
library(dplyr) r <- c(0.33,3.75,2.82) # 生成无相关性的协变量 x1 <- rnorm(500,1,1) x2 <- rnorm(500,2,1) x3 <- rnorm(500,5,1) df2 <- data.frame(x1=x1,x2=x2,x3=x3) x <- as.matrix(df2) df2 <- df2 %>% mutate(l = x %*% r, p = exp(l)/(1 + exp(l)), # 修正逻辑斯蒂函数 t = rbinom(n(), 1, p)) # 修正rbinom的概率参数 # 拟合无截距逻辑回归 coef_corr_2 <- glm(t ~ x1+x2+x3-1, data=df2, family="binomial") %>% coef() print(coef_corr_2)
修正后的典型输出
运行修正代码后,估计系数会非常接近真实值c(0.33,3.75,2.82),例如某次运行结果:
x1 x2 x3 0.312453 3.687215 2.791083
内容的提问来源于stack exchange,提问作者JoZ
相关产品推荐
相关产品推荐

