[讀書筆記] R語言實戰 (十三) 廣義線性模型


廣義線性模型擴展了線性模型的框架,它包含了非正態的因變量分析

廣義線性模型擬合形式:

$$g(\mu_\lambda) = \beta_0 + \sum_{j=1}^m\beta_jX_j$$

$g(\mu_\lambda)為連接函數$. 假設響應變量服從指數分布族中某個分布(不僅僅是正態分布),極大擴展了標准線性模型,模型參數估計的推導依據是極大似然估計,而非最小二乘法.

可以放松Y為正態分布的假設,改為Y服從指數分布族中的一種分布即可

glm()函數:glm(formula,family=family(link=function), data = )

Logistic regression:響應變量為二值(0,1), 模型假設Y服從二項分布,線性模型擬合形式:

可用以下代碼擬合Logistic回歸:glm(Y~X1+X2+X3, family = binomial(link='logit',data=mydata)

#通過婚外情數據來預測婚外情情況
#每個參與者身上有9個變量:性別,年齡,婚齡,是否有小孩,宗教信仰程度,
#學歷,職業,婚姻自我評分
library(AER)
data(Affairs,package = 'AER')
#查看描述性統計信息
summary(Affairs)
#將affairs轉化Wie二值因子ynaaffair
Affairs$ynaffair[Affairs$affairs > 0] <-1
Affairs$ynaffair[Affairs$affairs == 0] <-0
Affairs$ynaaffair <- factor(Affairs$ynaffair,levels=c(0,1),labels=c("NO","Yes"))
table(Affairs$ynaffair)
#因子化之后的值可以作為Logistic回歸的結果變量
fit.full <- glm(ynaffair~gender+age+yearsmarried+children+religiousness+education+occupation+rating,data=Affairs,family=binomial())
#描述模型
summary(fit.full)
#由P值得出性別,孩子,學歷,職業對方程的貢獻不顯著,去除這些變量重新擬合
fit.reduced <- glm(ynaffair~age+yearsmarried+religiousness+rating,data=Affairs,family=binomial())
summary(fit.reduced)
#由結果可以看出這次個每個回歸系數都很顯著
#由於兩個模型嵌套,可以使用anova()對他們進行比較
#卡方值p=0.21,表明四個預測變量的新模型與九個預測變量的模擬擬合程度一樣好
anova(fit.reduced,fit.full,test='Chisq')
#解釋模型系數:對數優勢
coef(fit.reduced)
#指數優勢
exp(coef(fit.reduced))
#評價預測變量對結果概率的影響
#婚姻評分對婚外情概率的影響
#創建虛擬數據集,年齡,婚齡,宗教信仰均為均值,婚姻評分為1-5
testdata <- data.frame(rating=c(1,2,3,4,5),age=mean(Affairs$age),yearsmarried=mean(Affairs$yearsmarried),religiousness=mean(Affairs$religiousness))
testdata$prob = predict(fit.reduced,newdata = testdata,type="response")
testdata

Logistic 回歸變種:

  • 穩健Logistic regression: robust包中glmRob()函數可以擬合文件的廣義線性模型,當擬合回歸模型出現離群點的強影響點時,穩健logistic regression便可以派生用場.
  • 多項布回歸,若響應變量包含兩個以上無序類比(已婚,寡居,離婚),便可以使用mlogit包中的mlogit()函數擬合多項Logistic回歸
  • 序數Logistic回歸,若響應變量是一組有序類別(好,中,差),便可以使用rms()包中的mlogit()函數擬合多項logistic回歸

Poisson regression:響應變量為計數型, 模型假設Y服從泊松分布, 線性模型擬合形式:

許多分析標准線性模型lm()連用的函數在glm()中都有對應的形式:

 

#使用robust包中的癲癇數據Breslow,來討論癲癇數據對癲癇發病率的影響
library(robust)
data(breslow.dat,package = "robust")
names(breslow.dat)
#我們只關注,Trt治療條件,Age:年齡,基礎癲癇發病數Base, 響應變量為sumY隨機化后八周內癲癇發病數
summary(breslow.dat[c(6,7,8,10)])
opar <- par(no.readonly = TRUE)
par(mfrow=c(1,2))
attach(breslow.dat)
#圖中可以看到因變量的偏倚特性和可能的離群點
hist(sumY,breaks = 20,xlab = "Seizure count",main="Distribution of Seizures")
boxplot(sumY~Trt,xlab="Treatment",main="Group Comarisons")
par(opar)
#擬合泊松回歸
fit <- glm(sumY~Base+Age+Trt,data=breslow.dat,family=poisson())
summary(fit)
#獲取模型系數
coef(fit)
exp(coef(fit))

  

泊松回歸的的變種:

  • 時間段變化泊松回歸
  • 零膨脹泊松回歸:logisitic regression + poisson regression

模型擬合和回歸診斷:

1. 初始響應變量的預測值和殘差的圖形

2. 檢驗模型是否過度離勢

 

 


免責聲明!

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



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