无法在模拟数据集中获得正确的逻辑回归系数

机器算法验证 回归 物流 回归系数
2022-03-19 14:57:36

我设计了这个玩具示例

library(sigmoid)
N <- 10000
age <- runif(N, min=20, max=90)
e <- rnorm(N, 0, 5)
hi <- logistic(-100+2*age+e)
hid <- ifelse(hi>=0.5, T, F)
hid <- as.factor(hid)
df <- data.frame(age=age, hid=hid)
lr <- glm(hid~age, data=df, family=binomial(link="logit"))
s <- summary(lr)
print(s)

该变量hid包含 4304 FALSE 和 5696 TRUE。

我本来希望从逻辑回归中得到正确的系数。

相反,我得到 -39.46 的截距和 0.79 的斜率。两者都具有 p 值0。

我究竟做错了什么?

1个回答

如果您尝试从逻辑回归的假定数据生成机制生成数据,您的代码不会这样做。

逻辑回归的数据生成机制看起来像

η=Xβ
p=11+eη
yBinomial(p,n)

看起来您正在尝试做的是在对数赔率空间中创建线性回归,包括错误项。这是不正确的。误差项来自二项似然。要正确创建数据以便glm估计您指定的参数,您需要做

library(sigmoid)
N <- 10000
age <- runif(N, min=20, max=90)
#Changes here
p <- logistic(-100+2*age)
hid <- rbinom(N, 1, p)
# End changes
df <- data.frame(age=age, hid=hid)
lr <- glm(hid~age, data=df, family=binomial(link="logit"))
s <- summary(lr)
print(s)

```