《R语言实战》:广义线性模型R实现

广义线性模型

理论部分取自《R语言实战》:
        

        当因变量结果为计数型变量(非负有限值)、二值变量或多分类变量时进行适用广义线性模型。
标准线性模型中假设y符合正态分布,而广义线性模型使用连接函数,将Y为正态分布的假设改为了Y服从指数概率分布族(family)的一种分布。

R中使用glm函数基本形式为:

glm(fomula,data=,family = family(link=function))#不同分布族具有不同link

glm主要流行的拟合模型为logistic回归和泊松回归
标准线性模型是glm当连接函数为“identity”时的特殊情况,

glm(Y~X1+X2+X3,family = gaussian(link = "identity"),data = mydata)
lm(Y~X1+X2+X3,data = mydata)

两行代码结果相同

(一)泊松回归:

1.模型使用
当用连续型变量或分类型变量来预测计数型结果变量时使用泊松回归,
对计数数据进行建模使用possion分布dpois(x=  , lambda=  )。
泊松回归默认Y服从泊松分布,将Y计数数据或二项数据进行取对数后呈生态分布。

#使用医疗数据包进行举例
install.packages("robust")
library(robust)
data(breslow.dat)
attach(breslow.dat)#简化数据集列名写法
A<- glm(sumY~Base+Trt+Age, data = breslow.dat, 
        family = poisson(link = "log") )#(link = "log")为默认链接函数,
#当然family还可以为family=binomial\gaussian\gamma\inverse.quassian\poisson\quasi\quasibinomial\quasipoisson)
#连接函数依次为Logitech\identity\inverse\1/mu^2\log\"indentity",varance = "constant"\logi\log
summary(A)#查看模型
coef(A)#截距和系数
#泊松模型中的指数化参数对响应变量的影响是成倍增加的,而不是线性相加。
#将对数化的变量取指数则可得出每增加单位自变量因变量结果变化的实际值。
#exp为取指数
exp(coef(A))

2.模型过度离势评价
    需要对模型进行过度离势评价,比较模型的残差和自由度比值是否接近1,越接近越好。
解释:泊松回归的方差和均值是相等的,当响应变量观测的方差比依据泊松回归预测的方差大时,
泊松回归可能发生过度离势,对结果的解释度造成负面影响。发生过度离势的原因可能是遗漏了某个重要的预测变量等。若发生过度离势,则获得的标准误和置信区间都会极小,且显著性检验结果过于宽松,导致发现了错误的存在效应。

#qcc包提供了一个对泊松模型过度离势的检验方法:
install.packages("qcc")
library(qcc)
qcc.overdispersion.test(breslow.dat$sumY,type = "poisson")#P小于0.05,存在过度离势
#通过将第一次family=poisson改为第二次family=quasipoisson,再次拟合
A<- glm(sumY~Base+Trt+Age, data = breslow.dat, 
        family = poisson())
A2<- glm(sumY~Base+Trt+Age, data = breslow.dat, 
         family = quasipoisson())
summary(A2)#结果显示TRT和Age的P值不再显著,则表明年龄和药物作用并不能影响癫痫病的发病次数。

3.其他情况
#当数据记录时间段长度不同时,在模型中加入offset=log(time),对显示结果在不同时间段的比例进行调整。
#当数据集0计数的数据十分多时(结构零值),适用零膨胀的泊松回归,适用pscl包中的zeroinfl()函数。
#当存在离群点和强影响时,还可以适用glm模型中的glmRob()函数拟合稳健广义线性模型。

(二)logist回归
1.模型使用;

当预测二值型结果变量时使用logist回归。一单位预测变量的变化可能引起响应变量优势比的变化,因此将回归系数通常进行指数化,如exp(coef(模型)),还可以将回归系数的置信区间进行指数化,如exp(confit(模型))

#下面使用婚恋数据进行举例
install.packages("AER")
library("AER")
data(Affairs)
table(Affairs$affairs)
table(Affairs$gender)
prop.table(table(Affairs$gender))#对计数结果比例进行计算
Affairs$ynaffair[Affairs$affairs>0] <- 1
Affairs$ynaffair[Affairs$affairs==0] <- 0#对出轨是或者否进行分类赋值,将affairs转化为二值型因子ynaffair
Affairs$ynaffair
#该二值型因子可作为logistic回归的结果变量
FIT <- factor(Affairs$ynaffair,
              levels= c(0,1), labels = c("NO","YES"))#转化为二分型变量

attach(Affairs)
fit <- glm(ynaffair~gender+age+yearsmarried+children+religiousness+education+occupation+rating,
           data = Affairs, family = binomial())#默认连接函数为“link=logist”,假设Y概率分布为二项分布

summary(fit)#响应变量是Y的对数优势比。如当婚龄增加一岁,婚外情优势比乘以系数,增加两岁乘两次系数
#选取显著变量重新拟合
fit2 <- glm(ynaffair~age+yearsmarried+religiousness+rating,
            data = Affairs, family = binomial())
summary(fit2)
#对两模型P值进行比较,对于广义线性回归一般使用卡方检验,结果为两个模型不具有显著差异P>0.05
anova(fit,fit2,test = "Chisq")
AIC(fit,fit2)
exp(coef(fit))

2.同样需要对模型拟合进行诊断


        过度离散的比较:当响应变量方差大于期望的二项分布的方差时,过度离散会导致奇异的标准误差检验和不精确的显著性检验,当出现过度离散时,使用glm函数进行拟合回归,但此时需要将二项分布改成类二项分布。过度离散的一种判别方法是计算二项分布模型残差偏差/残差自由度。若接近1则表明没有过度离势如第一次family=binomial,第二次family=quasibinomial,则为logistic回归对过度离势的处理方式。

fit <- glm(ynaffair~age+yearsmarried+religiousness+rating,
           data = Affairs, family = binomial())
fitbijiao <- glm(ynaffair~age+yearsmarried+religiousness+rating,
                 data = Affairs, family = quasibinomial())
pchisq(summary(fitbijiao)$dispersion*fit$df.residual,fit$df.residual,lower=F)

3.其他情况

#稳健的logistics回归,函数和泊松回归一样。
#当包含两个以上的无顺序类别变量时,如离婚/独居/寡居,适用mlogit包中的mlogit()函数拟合模型。
#当包含两个以上的有顺序类别变量时,如差/良/好,适用rms包中的lrm函数拟合logistic回归。

(三)函数的连用技巧

summary()展示函数细节
coef(fit)#截距项和斜率
confint()#模型参数95%置信区间
residuals()#模型残差值
anova()#生成两个拟合模型的方差分析表
plot(fit)#评价拟合模型的诊断图
predict()#用拟合模型对数据集进行预测、

你可能感兴趣的:(r语言)