回归分析

作者: 我最有才 | 来源:发表于2018-12-26 14:33 被阅读1次

    #广义线性模型-logistic 与泊松回归 Y值类型为0/1或者一些计数型的

    #logistics-AER包,婚外情数据affairs,各种因素是不是跟婚外情有关系

    data(Affairs,package = "AER")

    #变量x的统计分析

    summary(Affairs)

    #相应变量y的统计数值

    table(Affairs$affairs)

    #这时候我们需要把婚外情变化成二值型数据0/1  只关心有没有  ynaffair可以任意取名字,新增的一列而已

    Affairs$ynaffair[Affairs$affairs>0]<-1

    Affairs$ynaffair[Affairs$affairs==0]<-0

    Affairs$ynaffair<-factor(Affairs$ynaffair,levels = c(0,1),labels = c("No","Yes"))

    table(Affairs$ynaffair)

    ##此时因为Y变为二值型变量0/1,可以用logistic回归了

    fit<-glm(ynaffair~gender+age+yearsmarried+children+religiousness+education+occupation+rating,data=Affairs,family=binomial())

    summary(fit)

    #去除拟合不好的再拟合

    fit_reduced<-glm(ynaffair~age+yearsmarried+religiousness+rating,data=Affairs,family=binomial())

    summary(fit_reduced)

    ##因为fit_reduced拟合是fit拟合的子集,可以用卡方检验的anova进行比较  p>0.05,没有差别,因此可以删去无关的数据

    anova(fit_reduced,fit,test = "Chisq")

    ##可以用coef单独看看系数

    coef(fit_reduced)

    ##方法一:用优势比解释系数

    ##因为响应变量是Y=1的log值,不好解释,可以e-指数化后恢复原来的值;保持年龄什么的不变,婚龄增加一年,婚外情

        ##优势比乘于1.106.。。因此大于1,上升,小于1下降优势比  若分析几年,就乘于几年就好了*n --n年

    exp(coef(fit_reduced))

    ##系数置信区间

    confint(fit_reduced)

    ##指数化的结果--一般用这个

    exp(confint(fit_reduced))

    ##方法二:用概率解释系数

    ##创建感兴趣的数据集

    testdata<-data.frame(rating=c(1,2,3,4,5),age=mean(Affairs$age),yearsmarried=mean(Affairs$yearsmarried),

                        religiousness=mean(Affairs$religiousness))

    testdata

    testdata$prob<-predict(fit_reduced,newdata = testdata,type = "response")

    testdata

    ##过度离势的判断,避免不准确的显著性检验

    fit_reduced<-glm(ynaffair~age+yearsmarried+religiousness+rating,data=Affairs,family=binomial())

    fit.od<-glm(ynaffair~age+yearsmarried+religiousness+rating,data=Affairs,family = quasibinomial())

    #检验 >0.34,没有过度离势,之前的检验显著可信;

    pchisq(summary(fit.od)$dispersion*fit_reduced$df.residual,fit_reduced$df.residual,lower=F)

    ##常见的回归诊断可以用线性回归诊断也可以用下面的

    ##一般方法:

    op<-par(mfrow=c(2,2))

    plot(fit_reduced)

    par(op)

    ###本章的方法  预测值与残差值

    plot(predict(fit_reduced,type = "response"),residuals(fit_reduced,type="deviance"))

    ###异常值--hat value  学生化残差,cook距离

    plot(hatvalues(fit_reduced))

    plot(rstudent(fit_reduced))

    plot(cooks.distance(fit_reduced))

    ###泊松回归分析---robust包

    library(robust)

    data(breslow.dat,package = "robust")

    names(breslow.dat)

    summary(breslow.dat[c(6,7,8,10)])

    ##基本图形描述

    op<-par(no.readonly = T)

    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 Comparisons")

    par(op)

    ###回归拟合:

    fit_BS<-glm(sumY~Base+Age+Trt,family = poisson(),data=breslow.dat)

    summary(fit_BS)

    ###系数分析

    coef(fit_BS)

    ##指数化

    exp(coef(fit_BS))

    ##过度离势分析

    ##残差偏差与残差自由度比值  远远大于1  说明过度离势

    deviance(fit_BS)/df.residual(fit_BS)

    #或用qcc包中进行过度离势分析  p<0.05 进一步说明过度离势

    library(qcc)

    qcc.overdispersion.test(breslow.dat$sumY,type="poisson")

    ##将poisson换成quasipoisson 重新拟合

    fit<-glm(sumY~Base+Age+Trt,family = quasipoisson(),data=breslow.dat)

    summary(fit)

    ##########################################################

    ##第五题  回归分析

    data_5<-read.table("final5/diabetes.txt",header = T,sep = "\t")

    data_5<-as.data.frame(data_5)

    boxplot(data_5)

    library(car)

    scatterplotMatrix(data_5,spread=F,main="Scatter Plot Matrix")

    ##拟合

    fit_5<-lm(Y~X1+X2+X3+X4,data = data_5)

    summary(fit_5)

    #回归诊断--标准方法

    op<-par(mfrow=c(2,2))

    plot(fit_5)

    par(op)

    par(par(mfrow=c(2,2)))

    ##离群点

    outlierTest(fit_5)

    ##逐步回归分析 P大于0.05可以删去x1 x2

    fit_5_new<-lm(Y~X3+X4,data = data_5)

    anova(fit_5,fit_5_new)

    ##交互作用

    fit_5_ab<-lm(Y~X3+X4+X3:X4,data = data_5)

    fit_5_ab

    ##交互结果展示

    library(effects)

    plot(effect("X3:X4",fit_5_ab),multiline=T)

    相关文章

      网友评论

        本文标题:回归分析

        本文链接:https://www.haomeiwen.com/subject/qjyhlqtx.html