Regression
無法在模擬數據集中獲得正確的邏輯回歸係數
我設計了這個玩具示例
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)