美文网首页
03-相关性与线性回归

03-相关性与线性回归

作者: 译文达练 | 来源:发表于2021-08-20 12:37 被阅读0次
    image.png
    ##vs. t.test()是均值的检验(同一变量不同组别;或不同变量均值有无差异);
    cor.test()是相关性的检验(不同变量之间是否相关)
    
    library(ggplot2)
    library(ggpubr)
    library(car) #avPlots()
    library(stringr) # %>% 
    library(openxlsx) #or library(readxl) read_excel(file)
    
    LungCap <- readxl::read_xls(path = "R语言入门必学 资料/LungCapData.xls")
    
    attach(LungCapData)
    

    1 相关性

    1.1 散点图评估

    plot(x=Age,LungCap)
    

    1.2 正态分布检验

    #连续变量的相关性用pearson(前提:符合正态分布)
    sapply(list(Age,LungCap),shapiro.test) #vs.tapply是一个变量中的不同组
    

    1.3.1 pearson相关性检验 (正态分布)

    cor.test(x = Age,y = LungCap) #p<0.05 表明相关性很强,相关系数cor
    
    

    1.3.2 spearman 或kendall检验(非正态分布)

    cor.test(Age, LungCap,method = "spearman",exact = F)
    cor.test(Age,as.numeric(as.factor(Smoke)),method = "spearman",exact = F) #字符转数字,需先转因子
    #相关系数 rho
    
    cor.test(Age, LungCap,method = "kendall",exact = F)
    #相关系数tau
    

    2 线性回归

    无相关就无回归,回归分析之前先测度相关关系。
    相关程度越高,回归方程的拟合程度就越好。
    相关系数和回归系数的方向呈现一致状体,可互相推算。

    image.png

    2.1 简单线性回归

    lm.age <- lm(LungCap~Age)
    # intercept 截距;+斜率
    summary(lm.age) 
    #查看模型的显著性
    ##查看自变量的p值(Age-Pr),是否有预测意义
    ##p-value:整个模型的P值,当只有一个自变量时,跟Pr相同
    ## R-squared:决定系数:0.67:表示肺活量的变化有67%是可以用年龄解释的
    

    2.2 模型诊断

    shapiro.test(residuals(lm.age)) #残差正态性
    plot(lm.age) #第一张(残差均匀分布即齐性)
    

    2.3 多因素线性回归

    lm.mlt <- lm(LungCap~Age+Height+Smoke+Gender+Caesarean) #Or lm(LungCap~.,data=LungCapData)
    summary(lm.mlt)
    #Smoke, Gender自动转换成因子,∴为Smokeyes,Gendermale
    
    #多组
    Age.C <- cut(Age,c(3,9,12,20)) #分组,因子
    lm.mlt2 <- lm(LungCap~Age.C+Height)
    #Age.c 的参照变量是(3,9]
    
    

    方差分析

    #当变量是分类模型,则等效于相关性分析
    lm.smoke <- lm(LungCap~Smoke)
    anova(lm.smoke)  #等价于 aov(LungCap~ Smoke)
    
    
    #双因素
    lm.twoway <- lm(LungCap~Smoke*Gender)
    anova(lm.twoway) #等价于aov(LungCap~Smoke*Gender)
    

    2.4模型的比较和选择

    2.4.1 模型比较

    anova(lm.age,lm.mlt)
    #RSS越小,模型拟合得越好(同一数据集)
    

    2.4.2 逐步法筛选变量(AIC)

    extratAIC(lm.age) #第二个值为AIC
    
    lm.none <- lm(LungCap~1) #无变量
    lm.full <- lm(LungCap~.,data=LungCapData) #所有变量
    step(lm.none,scope = formula(lm.full),direction = "forward")
    #Start AIC是初始;+Height:只有Height变量;Call最好的模型
    step(lm.full,scope = formula(lm.none),direction = "backward")
    #反向推算
    step(lm.none,scope = formula(lm.full),direction = "both")
    #双向推算
    ##trace=F 只显示最佳结果,不显示追踪过程
    lm.final <- lm(LungCap~Height + Age + Smoke + Gender + Caesarean)
    plot(lm.final)
    
    

    3 作图(相关性,线性回归)

    3.1 相关性

      plot(Age,LungCap)
      text(3,13,'r=0.82,P<0.001', adj=0) #跟上个命令一起运行,adj=0左对齐
      
      ggplot(LungCapData, aes(x=Age, y=LungCap)) +
        geom_point() +
        annotate(geom="text",x=3,y=13,label='r=0.82,P<0.001', adj=0)
      
      ggscatter(LungCapData, x="Age", y="LungCap",cor.coef=T, cor.method="pearson")
      
    

    3.2 简单线性回归

    #散点图上加条线
    plot(Age,LungCap)
    abline(lm.age)
    text(3,13,'r-squard=0.67,P<0.001', adj=0)
    #text(3,13, expression(r^2=='0.67,P<0.001'), adj=0)
    
    ggplot(LungCapData,aes(x=Age,y=LungCap)) +
      geom_point() +
      geom_smooth(method = "lm",se=F) +
      annotate(geom="text",x=3,y=13, label="r^2=='0.67,P<0.001'",adj=0,parse=T)
    #annotation不识别expression
    #parse 解析
    
    ggscatter(LungCapData,x="Age",y="LungCap", add = "reg.line") +
      annotate(geom="text",x=3,y=13, label="r^2=='0.67,P<0.001'",adj=0,parse=T)
    

    3.3 多因素线性回归

      #变量添加图
    avPlots(lm.final)
    #每张图对应一个变量
    #Height|others |:表示在右边变量得到控制的情况下
    

    相关文章

      网友评论

          本文标题:03-相关性与线性回归

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