R語言Poisson回歸的擬合優度檢驗


在這篇文章中,我們將看一下Poisson回歸的擬合優度測試與個體計數數據。許多軟件包在擬合Poisson回歸模型時在輸出中提供此測試,或者在擬合此類模型(例如Stata)之后執行此測試,這可能導致研究人員和分析人員依賴它。在這篇文章中,我們將看到測試通常不會按預期執行,因此,我認為,應該謹慎使用。

 

偏差擬合度檢驗


由於偏差度量衡量了模型預測與觀察結果的接近程度,我們可能會考慮將其作為給定模型擬合度檢驗的基礎。雖然我們希望我們的模型預測接近觀察到的結果,但即使我們的模型被正確指定,它們也不會相同 - 畢竟,模型給出了觀察所遵循的泊松分布的預測平均值。

因此,為了將偏差用作擬合優度檢驗,我們需要弄清楚,假設我們的模型是正確的,在泊松假設下,我們在預測均值周圍觀察到的結果中會有多少變化。由於偏差可以作為將當前模型與飽和模型進行比較的輪廓似然比檢驗得出,因此可能性理論會預測(假設模型被正確指定),偏差遵循卡方分布,自由度等於參數數量的差異。飽和模型可以被視為一個模型,它為每個觀察使用不同的參數,因此它具有參數。如果我們提出的模型具有參數,這意味着將偏差與參數的卡方分布進行比較。

 

在R中執行擬合優度測試


現在看看如何在R中執行擬合優度測試。首先我們將模擬一些簡單的數據,具有均勻分布的協變量x和泊松結果y:

set.seed(612312)

n < -  1000
x < -  runif(n)
y < -  rpois(n,mean)

為了使Poisson GLM適合數據,我們只需使用glm函數:

Call:
glm(formula = y ~ x, family = poisson)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-2.2547  -0.8859  -0.1532   0.6096   3.0254  

Coefficients:
            Estimate Std. Error z value Pr(>|z|)    
(Intercept) -0.04451    0.05775  -0.771    0.441    
x            1.01568    0.08799  11.543   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for poisson family taken to be 1)

    Null deviance: 1247.7  on 999  degrees of freedom
Residual deviance: 1110.3  on 998  degrees of freedom
AIC: 3140.9

Number of Fisher Scoring iterations: 5

這里的偏差被glm函數標記為“剩余偏差”,這里是1110.3。有1000個觀測值,我們的模型有兩個參數,因此自由度為998,由R作為殘差df給出。為了計算偏差擬合度檢驗的p值,我們簡單地計算998自由度上卡方分布的偏差值右側的概率:

pchisq(mod $ deviance,df = mod $ df.residual,lower.tail = FALSE)
[1] 0.00733294

零假設是我們的模型被正確指定,我們有強有力的證據來拒絕這個假設。因此,我們有充分的證據表明我們的模型非常適合。 

 

通過仿真檢驗泊松回歸擬合檢驗的偏差優度


為了研究測試的性能,我們進行了一個小的模擬研究。我們將使用與以前相同的數據生成機制生成10,000個數據集。對於每一個,我們將擬合(正確的)泊松模型,並收集擬合p值的偏差良好性。然后我們將看到它小於0.05的次數:

nSim <- 10000
pvalues <- array(0, dim=nSim)

for (i in 1:nSim) {

n <- 1000
x <- runif(n)
mean <- exp(x)
y <- rpois(n,mean)

mod <- glm(y~x, family=poisson)
pvalues[i] <- pchisq(mod$ , df=mod$df. , lower.tail= )

}

mean(1*(pvalues<0.05))

最后一行創建一個向量,其中如果p值小於0.05,則每個元素為1,否則為零,然后使用mean()計算這些元素的比例。當我運行這個時,我得到了0.9437,這意味着偏差測試錯誤地表明我們的模型在94%的情況下被錯誤地指定 

為了在平均值較大時查看情況是否發生變化,讓我們修改模擬。我們現在將生成具有泊松均值的數據,其結果為20到55:

nSim < -  10000
pvalues < -  array(0,dim = nSim)

for(i in 1:nSim){

n < -  1000
x < -  runif(n)
 < -  exp(3 + x)
y < -  rpois(n,mean)

mod < -  glm(y~x,family = poisson)
pvalues [i] < -  pchisq(mod $  ,df = mod $ df. ,lower.tail = FALSE)

}

 

現在,顯着偏差測試的比例降低到0.0635,更接近標稱的5%1類錯誤率。 

 

結論


上面顯然是一個非常有限的模擬研究,但我對結果的看法是,雖然偏差可能表明泊松模型是否適合,但我們應該對使用由此產生的p值有些警惕。 

 

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

 


免責聲明!

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



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