本文對應《R語言實戰》第13章:廣義線性模型
廣義線性模型擴展了線性模型的框架,包含了非正態因變量的分析。
兩種流行模型:Logistic回歸(因變量為類別型)和泊松回歸(因變量為計數型)
glm()函數的參數
分布族 |
默認的連接函數 |
binomial |
(link = “logit”) |
gaussian |
(link = “identity”) |
gamma |
(link = “inverse”) |
inverse.gaussian |
(link = “1/mu^2”) |
poisson |
(link = “log”) |
quasi |
(link = “identity”, variance = “constant”) |
quasibinomial |
(link = “logit”) |
quasipoisson |
(link = “log”) |
連用的函數
函數 |
描述 |
summary() |
展示擬合模型的細節 |
coefficients(), coef() |
列出擬合模型的參數(截距項和斜率) |
confint() |
給出模型參數的置信區間(默認為95%) |
residuals() |
列出擬合模型的殘差值 |
anova() |
生成兩個擬合模型的方差分析表 |
plot() |
生成評價擬合模型的診斷圖 |
predict() |
用擬合模型對新數據集進行預測 |
模型擬合和回歸診斷:
#診斷圖(以下model都是glm擬合的模型) plot(predict(model, type = “response”), residuals(model, type = “deviance”)) #帽子值(hat value),學生化殘差,Cook距離統計量近似值 plot(hatvalues(model)) plot(rstudent(model)) plot(cooks.distance(model)) #綜合性診斷圖 library(car) influencePlot(model)
當響應變量有許多時,診斷圖非常有用;而當響應變量只有有限個值時(比如Logistic回歸),診斷圖的功效就會降低很多。
Logistic回歸
一般過程:
首先將所有變量作為預測變量擬合模型,通過回歸系數的顯著性,篩選對方程貢獻顯著的變量,再次擬合模型。使用anova()函數對兩個嵌套模型的擬合優度進行檢驗,廣義線性回歸時,可采用卡方檢驗,在卡方值不顯著的時候,表示少變量的模型與多變量的模型擬合效果沒有差異。(具體例子詳見書上285-288頁)
解釋模型參數:
Logistic回歸中,響應變量是Y=1的對數優勢比(log)。回歸系數含義是當其他預測變量不變時,一單位預測變量的變化可引起的響應變量對數優勢比的變化。由於對數優勢比解釋性差,所以常將結果進行指數化后進行解釋,也可以使用confint()函數獲取系數的置信區間。
exp(confint(fit.reduced))
評價預測變量對結果概率的影響:
由於使用概率的方式思考比使用優勢比更直觀,所以可以先創建一個包含感興趣預測變量值的虛擬數據集,然后對這個數據集使用predict()函數,以預測這些值的結果概率。(具體例子詳見書289-290頁)
過度離勢:
抽樣於二項分布的期望方差是,n為觀測數,pie為屬於Y=1組的概率。
所謂過度離勢,即觀測到的響應變量的方差大於期望的二項分布的方差。過度離勢會導致奇異的標准誤檢驗和不精確的顯著性檢驗。
當出現過度離勢時,仍可使用glm()函數擬合Logistic回歸,但此時需要將二項分布改為類二項分布(quasibinomial distribution)。
檢測過度離勢的一種方法是比較二項分布模型的殘差偏差與殘差自由度,如果比值:
比1大很多,便可認為存在過度離勢。
具體檢驗方式:擬合兩次模型,第一次使用family = “binomial”, 第二次使用family = “quasibinomial”, 記第一次返回的對象為fit,第二次返回的對象為fit.od,
pchsq(summary(fit.od)$dispersion * fit$df.residual, fit$df.residual, lower = F)
提供的p值即可對零假設H0:Φ=1 與備擇假設 H1:Φ≠1進行檢驗,若p很小就可以拒絕H0.
Logistic回歸的擴展:
穩健Logistic回歸:robust包中的glmRob()函數,解決離群點和強影響點的問題
多項分布回歸:mlogit包中的mlogit()函數,應用於響應變量包含兩個以上的無序類別
序數Logistic回歸:rms包中的lrm()函數,應用於響應變量是一組有序類別
泊松回歸:
適用范圍:通過一系列連續型和類別型預測變量來預測計數型結果變量。
分析過程與模型參數的解釋與Logistic回歸類似。
過度離勢:
泊松分布的方差和均值相等。當響應變量觀測的方差觀測的方差比依據泊松分布預測的方差大時,泊松回歸可能發生過度離勢。處理計數型數據時經常發生過度離勢,因此需要格外注意。
可能的原因:
- 遺漏了某個重要的預測變量;
- 可能因為時間相關;
- 在縱向數據分析中,重復測量的數據由於內在群聚特性可導致過度離勢。
如果存在過度離勢,在模型中將無法進行解釋,可能會得到很小的標准誤和置信區間,並且顯著性檢驗也過於寬松(也就是說,將會發現並不真是存在的效應)。
與Logistic回歸類似,如果殘差偏差與殘差自由度的比例遠遠大於1,表明存在過度離勢。
檢驗方法:qcc包
library(qcc) qcc.overdispersion.test(breslow.dat$sumY, type = “poisson”)
p值顯著(小於0.05)表明存在過度離勢。
與Logistic回歸的過度離勢處理類似,通過用family = “quasipoisson”替換family = “poisson”改進。需要注意的是,使用類泊松(quasi-Poisson)方法所得的參數估計與泊松方法相同,但標准誤變大了許多。
泊松回歸的擴展:
- 時間段變化的泊松回歸:
對於泊松回歸的討論,是將響應變量局限在一個固定長度時間段中進行測量,整個觀測集中時間長度都是不變的。允許時間段變化時,假設結果變量是一個比率,也就是將
修改為:
或等價形式:
具體實現方式是,在glm()函數里增加offset參數,offset = log(time).
- 零膨脹的泊松回歸:
在數據集中0計數的數目時常比用泊松模型預測的數目多,這些0值稱為結構零值。此時使用零膨脹的泊松回歸分析數據,將同時擬合兩個模型,可以看做是Logistic回歸和泊松回歸的組合。pscl包中的zeroinfl()函數可做零膨脹泊松回歸。
- 穩健泊松回歸:
robust包中的glmRob()函數可以擬合穩健廣義線性模型,包含穩健泊松回歸。解決存在離群點和強影響點帶來的問題。