R語言在邏輯回歸中求R square R方


原文鏈接:http://tecdat.cn/?p=6295

 

 並非所有結果/因變量都可以使用線性回歸進行合理建模。也許第二種最常見的回歸模型是邏輯回歸,它適用於二元結果數據。如何計算邏輯回歸模型的R平方? 

 

麥克法登R平方

在R中,glm(廣義線性模型)命令是用於擬合邏輯回歸的標准命令。據我所知,擬合的glm對象並沒有直接給你任何偽R平方值,但可以很容易地計算出McFadden的度量。為此,我們首先擬合我們感興趣的模型,然后是僅包含截距的null模型。然后我們可以使用擬合模型對數似然值計算McFadden的R平方:

mod < -  glm(y~x,family =“binomial”)
nullmod < -  glm(y~1,family =“binomial”)
1-logLik(MOD)/ logLik(nullmod)

 為了了解預測器需要獲得某個McFadden的R平方值的強度,我們將使用單個二進制預測器X來模擬數據, 我們首先嘗試P(Y = 1 | X = 0)= 0.3和P(Y = 1 | X = 1)= 0.7:

set.seed(63126)
n < -  10000
x < -  1 *( (n)<0.5)
pr < - (x == 1)* 0.7 +(x == 0)* 0.3
y < -  1 *(  f(n)<pr)
mod < -  glm(y~x,family =“binomial”)
nullmod < -  glm(y~1,family =“binomial”)
1-logLik(MOD)/  (nullmod)
'log Lik。' 0.1320256(df = 2)

 因此,即使X對Y = 1的概率有相當強烈的影響,McFadden的R2也只有0.13。要增加它,我們必須使P(Y = 1 | X = 0)和P(Y = 1 | X = 1)更加不同:

set.seed(63126)
n < -  10000
x < -  1 *(runif(n)<0.5)
pr < - (x == 1)* 0.9 +(x == 0)* 0.1
y < -  1 *( (n)<pr)
mod < -  glm(y~x,family =“binomial”)
nullmod < -  glm(y~1,family =“binomial”)
1- (MOD)/  (nullmod)
[1] 0.5539419

即使X將P(Y = 1)從0.1變為0.9,McFadden的R平方僅為0.55。最后我們將嘗試0.01和0.99的值 - 我稱之為非常強大的效果!

set.seed(63126)
n < -  10000
x < -  1 *(runif(n)<0.5)
pr < - (x == 1)* 0.99 +(x == 0)* 0.01
y < -  1 *( (n) pr)
mod < -  glm(y~x,family =“binomial”)
nullmod < -  glm(y~1,family =“binomial”)
1- (MOD)/  ( )
[1] 0.9293177

現在我們有一個更接近1的值。 

分組二項數據與單個數據

 

data < -  data.frame(s = c(700,300),f = c(300,700),x = c(0,1))
     SFX
1 700 300 0
2 300 700 1

 為了使邏輯回歸模型適合R中的數據,我們可以將響應傳遞給glm函數, :

Call:
glm(formula = cbind(s, f) ~ x, family = "binomial", data = data)

Deviance Residuals: 
[1]  0  0

Coefficients:
            Estimate Std. Error z value Pr(>|z|)    
(Intercept)  0.84730    0.06901   12.28   <2e-16 ***
x           -1.69460    0.09759  -17.36   <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: 3.2913e+02  on 1  degrees of freedom
Residual deviance: 1.3323e-13  on 0  degrees of freedom
AIC: 18.371

Number of Fisher Scoring iterations: 2

我們現在將分組的二項式數據轉換為 伯努利 數據,並適合相同的邏輯回歸模型。 

individualData <-  (cbind(data,y=0),cbind(data,y=1))
individualData$freq <- individualData$s
individualData$freq[ $y==0] <-  $f[individualData$y==0]
mod2 <- glm(y~x, family="binomial",data= ,weight=freq)
summary(mod2)

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

Deviance Residuals: 
     1       2       3       4  
-26.88  -22.35   22.35   26.88  

Coefficients:
            Estimate Std. Error z value Pr(>|z|)    
(Intercept)  0.84730    0.06901   12.28   <2e-16 ***
x           -1.69460    0.09759  -17.36   <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: 2772.6  on 3  degrees of freedom
Residual deviance: 2443.5  on 2  degrees of freedom
AIC: 2447.5

Number of Fisher Scoring iterations: 4

正如所料,我們從分組數據框中獲得相同的參數估計和推論。 

nullmod1 <- glm(cbind(s,f)~1, family="binomial",data)
nullmod2 <- glm(y~1, family="binomial",data=individualData, =freq)
1-logLik(mod1)/logLik(nullmod1)
'log Lik.' 0.9581627 (df=2)
1-logLik(mod2)/logLik(nullmod2)
'log Lik.' 0.1187091 (df=2)

我們看到分組數據模型的R平方為0.96,而單個數據模型的R平方僅為0.12。 

 

如果您有任何疑問,請在下面發表評論。 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM