Regression

無法在模擬數據集中獲得正確的邏輯回歸係數

  • April 11, 2021

我設計了這個玩具示例

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 值 $ \approx $ 0。

我究竟做錯了什麼?

如果您嘗試從邏輯回歸的假定數據生成機制生成數據,您的代碼不會這樣做。

邏輯回歸的數據生成機制看起來像

$$ \eta = X\beta $$ $$ p = \dfrac{1}{1+e^{-\eta}} $$ $$ y \sim \operatorname{Binomial}(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)



引用自:https://stats.stackexchange.com/questions/519198

comments powered by Disqus