Logisti c Regression: как исправить оценочные коэффициенты для категориального предиктора - PullRequest
0 голосов
/ 26 мая 2020

Я подобрал логистическую c регрессионную модель, используя функцию glm в R (base) с одним категориальным предиктором, который может принимать пять значений: «A», «B», «C», «D» и «E» .

> library(dummies)
> n <- 5000 
> beta0 <- 0.07
> betaB <- 0.1
> betaC <- -0.15
> betaD <- -0.03
> betaE <- 0.9
> 
> #data simulation
> set.seed(123)
> x <- sample(x=c("A","B", "C", "D", "E"), size=n, replace=TRUE, prob=rep(1/5, 5))  #(a)
> linpred <- cbind(1, dummy(x)[, -1]) %*% c(beta0, betaB, betaC, betaD, betaE)  #(b)
> pi <- exp(linpred) / (1 + exp(linpred))  #(c)
> y <- rbinom(n=n, size=1, prob=pi)  #(d)
> data <- data.frame(x=x, y=y)
> #fit the logistic model
> mod <- glm(y ~ x, family="binomial", data=data)
> summary(mod)

Call:
glm(formula = y ~ x, family = "binomial", data = data)

Deviance Residuals: 
   Min      1Q  Median      3Q     Max  
-1.660  -1.182   0.762   1.104   1.219  

Coefficients:
            Estimate Std. Error z value Pr(>|z|)    
(Intercept)   0.1742     0.0638    2.73   0.0063 ** 
xB            0.0402     0.0896    0.45   0.6541    
xC           -0.2711     0.0906   -2.99   0.0028 ** 
xD           -0.1644     0.0894   -1.84   0.0661 .  
xE            0.9125     0.0968    9.42   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 6847.3  on 4999  degrees of freedom
Residual deviance: 6653.6  on 4995  degrees of freedom
AIC: 6664

Number of Fisher Scoring iterations: 4

Предположим, я взял подмножество вышеперечисленных данных (первые 4000 строк) и обновил ту же модель, сохранив два уже оцененных коэффициента, например (D и E) фиксированными равными -0,1644 и 0,9125. Другими словами, максимизация должна выполняться через Intercept, A, B и C, но не через D и E. Таким образом, при выполнении следующих строк сводка (mod2) должна давать -0,1644 и 0,9125.

> mod2 <- glm(y ~ x, family="binomial", data=data[1:4000,])
> summary(mod2)

Call:
glm(formula = y ~ x, family = "binomial", data = data[1:4000, 
    ])

Deviance Residuals: 
   Min      1Q  Median      3Q     Max  
 -1.65   -1.18    0.77    1.11    1.23  

Coefficients:
            Estimate Std. Error z value Pr(>|z|)    
(Intercept)   0.1644     0.0702    2.34   0.0192 *  
xB            0.0687     0.0994    0.69   0.4897    
xC           -0.2920     0.1008   -2.90   0.0038 ** 
xD           -0.1619     0.0994   -1.63   0.1034    
xE            0.9007     0.1076    8.37   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 5483.0  on 3999  degrees of freedom
Residual deviance: 5330.2  on 3995  degrees of freedom
AIC: 5340

Number of Fisher Scoring iterations: 4

Кто-нибудь знает, как я могу настроить для этого функцию glm.fit в R?

...