参考同济大学赵兴明老师PPT以及《R语言实战(第2版)》

Ⅰ. 一元线性回归(Linear Regresion)

1. 线性回归

1.相关与回归:假设检验只能对样本之间的相关性进行定性分析,而回归分析可以对x和y的相关性进行定量分析

2.模型:b为回归系数[与one-way ANOVA类比]

image.png

2. 拟合回归曲线

1.原理:使误差总和(残差平方和)最小:即

image.png

2.公式推导(通过求导,令残差总和最小)

image.png image.pngimage.png

3.手动计算回归方程【step-by-dtep】

image.png

4.R——lm()函数

image.png

5.拟合回归线的步骤

(1)用R函数计算

  1. #导入数据
  2. #绘制散点图,观察数据的分布特点
  3. > plot(x,y)
  4. #拟合回归方程
  5. > myfit <- lm(formula=Y~X1+X2+X3, data
  6. #拟合回归线
  7. > abline(myfit)
  8. #分析拟合情况
  9. > summary(myfit) #可以模型相关参数和相关统计量
  10. > anova(myfit) #可以显示F检验的结果

(2)手动计算——Step-by-Step【这是一个完整的计算步骤】

image.png

6.拟合回归方程重要的函数

image.png

3. 回归线的拟合度检验——回归平方和(RegSS)大,残差平方和(ResSS)小

1.F单尾检验:总体平方和[Total SS]=回归平方和[Reg SS]+残差平方和[Res SS]

image.pngimage.png

注:Reg SS、ResSS、TotalSS的计算有两种方法:①根据定义直接计算。②根据推导公式一步步计算。
image.png image.png

2.回归线的拟合优度——决定系数【R2】:可以用x来解释y的比例,越大越好(~1)

image.png
注:summary(lm())中包含F值和R2值。

3.t双尾检验:

我们认为,样本回归系数b使总体回归系数β的无偏估计,故可对b进行t检验。
image.png

Ⅱ. 非线性回归

1. 两种转换

1.线性变换

2.非线性转换

image.png

  1. #输入并绘制数据
  2. > t <- seq(1,10)
  3. > subscribers=c(1.6,2.7,4.4,6.4,8.9,13.1,19.3,28.2,38.2,48.7)
  4. > plot(t,subscribers)
  5. #数据转换
  6. > plot(t,log(subscribers))
  7. > fit=lm(log(subscribers)~t)
  8. > abline(fit)
  9. > summary(fit)

2. 回归诊断——图形化验证功效模型

(1)根据拟合回归线判断

  1. #数据点
  2. > plot(t,subscribers)
  3. #根据拟合的回归线生成回归线
  4. > range(t)
  5. > t=seq(1,10,0.1)
  6. > y=1.300827*exp(0.3774*t)
  7. #判断拟合程度
  8. > lines(t,y,type="l",lwd=2,col="red")

image.pngimage.png

(2)标准方法——四幅诊断图

  1. > par(mfrow=c(2,2))
  2. > plot(fit)

注:四幅诊断图分析
①左上【残差图与拟合图】:若因变量与自变量线性相关,那么残差值与拟合值应该没有任何关系。如果在图中发现两者之间具有曲线关系,这表示回归模型不是线性关系
②右上【正态Q-Q图】:在正态分布对应的值下,标准化残差的概率图。若满足正态假设,那么图上的点应该落在呈45°角的直线上,否则,就违反了正态性假设(预测变量固定,因变量成正态分布,那么残差值也应该是一个均值为0的正态分布)。
③左下【位置尺度图】:若满足不变方差假设(因变量的方差不随自变量的水平不同而改变),则水平线周围的点应该随机分布。
④右下【残差与杠杆图】:从该图中可以鉴别离群点(预测效果不佳)、高杠杆指点和强影响点。

(3)car包

car包提供了大量的函数,大大增强了拟合和评价回归模型的能力

  1. #分位数比较图
  2. > qqplot() #正态性检验
  3. #增强的散点图矩阵
  4. > scatterplotMatrix()

3. 样本(person)相关系数(r)

1.r,为两个变量之间的相关性提供了一种定量测度,|r|越大,两个变量之间的相关性就越强

image.png

  1. > Correlation(rt$Height,rt$FEV)

2.b. 样本相关系数r和回归系数b的关系

image.pngimage.png

3.可视化特征值之间的关系——散点图矩阵(scatterplot matrix)

将一个散点图集合排列在一个网格中,包含着相互紧邻在一起的多种因素的图表。

  1. > library(graphics)
  2. > pairs(rt$Height,rt$FEV)
  3. > install.packages("psych")
  4. > library(psych)
  5. > pairs.panels(rt$Height,rt$FEV)

手把手教线性回归分析(附R语言实例)

https://blog.csdn.net/tMb8Z9Vdm66wH68VX1/article/details/79544739

Ⅲ 多元线性回归

1. 多元线性回归模型

image.png

2. 拟合回归模型

  1. > ff <- lm(y~x1+x2)
  2. > summary(ff)

3. 变量权重的比较——标准化回归系数

image.png

4. 回归线的拟合度

1.F检验——整体的检验

image.png

2. t检验——评估不同自变量的贡献值

image.png

3.部分F检验——评估不同自变量的贡献值

image.png

5. 模型评估

不同的变量之间可能本身就存在一定的线性、掩盖等关系,因此可以对我们的模型进行简化。

  1. #导入数据(lm()输入需要是一个数据框,而state.x77是一个矩阵,先进行转换)
  2. > states <- as.data.frame(state.x77[,c("murder","population","illiteracy","income","frost")])
  3. #多元回归分析,先检查变量之间的相关性
  4. > cor(states) #二变量之间的相关系数
  5. > library(car)
  6. > scatterplotMatrix(States) #散点图矩阵。非对角线区域绘制变量间的散点图,并添加平滑(loess)和线性拟合曲线。
  7. #对角线区域绘制每个变量的密度图和轴须图。
  8. #拟合模型
  9. > ff <- lm(murder~population+illiteracy+income+frost,data=states)
  10. #简化模型
  11. > summary(ff)
  12. > ff1 <- lm(murder~population+illiteracy,data=states)
  13. #评估模型之间的差异
  14. > anova(ff,ff1) #根据p-value值评判两个模型是否存在显著性差异


Ⅳ Logistic回归

【概念引入】

回归分析通过的是一系列连续性和/或类别型预测变量来预测正态分布的响应变量。但是当结果变量为类别型(二值变量/多分类变量)或者计数型时,不是正态分布时就无法进行线性回归分析。于是有了广义线性模型的概念,针对非正态因变量的分析。

【广义线性分析两种分析模型】

①Logistic回归——针对类别型因变量
②泊松回归——针对计数型因变量

1. 线性回归与逻辑回归

线性回归 逻辑回归
解决的问题 回归问题 分类问题
变量类型 连续的变量 连续、离散、二值型
(不需要变量的分布、均方差等)
自、因变量之间的关系 线性关系 非线性关系
结果呈现 直观表达变量之间的量化关系 通过概率来衡量结果的可能性

2. 逻辑回归模型

对于二元结果变量,每个X值下都是一个“案例”,我们只能衡量每种特定结果发生的概率。
image.png

3. R中进行逻辑回归分析——glm()函数

  1. > glm(formula,family=family(link=function),data=)
  2. #family 指概率分布和相应默认的连接函数(function)
  3. #常用的family:binomial(link = "logit")
  4. possion(link = "log")

4.标准分析流程

1.【逻辑分析】

  1. #读取数据
  2. > install.packages("AER")
  3. > library(AER)
  4. > data(Affairspackages="AER")
  5. > View(Affairs)
  6. > summary(Affairs)
  7. #将affairs转换为二值型因子——“是否有婚外情”
  8. > Affairs$ynaffair[Affairs$affairs>0] <- 1
  9. > Affairs$ynaffair[Affairs$affairs==0] <- 0
  10. > Affairs$ynaffair <- factor(Affairs$ynaffair,levels=c(0,1),labels=c("No","Yes"))
  11. > table(Affairs$ynaffair)
  12. No Yes
  13. 451 150
  14. #进行Logistic回归分析
  15. > fit.full <-glm(ynaffair~gender+age+yearsmarried+children+religiousness+education+occupation+rating,data = Affairs,family = binomial())
  16. > summary(fit.full)
  17. Call:
  18. glm(formula = ynaffair ~ gender + age + yearsmarried + children +
  19. religiousness + education + occupation + rating, family = binomial(),
  20. data = Affairs)
  21. Deviance Residuals:
  22. Min 1Q Median 3Q Max
  23. -1.5713 -0.7499 -0.5690 -0.2539 2.5191
  24. Coefficients:
  25. Estimate Std. Error z value Pr(>|z|)
  26. (Intercept) 1.37726 0.88776 1.551 0.120807
  27. gendermale 0.28029 0.23909 1.172 0.241083
  28. age -0.04426 0.01825 -2.425 0.015301 *
  29. yearsmarried 0.09477 0.03221 2.942 0.003262 **
  30. childrenyes 0.39767 0.29151 1.364 0.172508
  31. religiousness -0.32472 0.08975 -3.618 0.000297 ***
  32. education 0.02105 0.05051 0.417 0.676851
  33. occupation 0.03092 0.07178 0.431 0.666630
  34. rating -0.46845 0.09091 -5.153 2.56e-07 ***
  35. ---
  36. Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 1
  37. (Dispersion parameter for binomial family taken to be 1)
  38. Null deviance: 675.38 on 600 degrees of freedom
  39. Residual deviance: 609.51 on 592 degrees of freedom
  40. AIC: 627.51
  41. Number of Fisher Scoring iterations: 4
  42. #简化模型
  43. > fit.reduce <-glm(ynaffair~+age+yearsmarried+religiousness+rating,data = Affairs,family = binomial())
  44. #使用anova()函数会两个模型进行比较,对于广义线性回归,可用卡方检验
  45. > anova(fit.reduce,fit.full,test = "Chisq")
  46. Analysis of Deviance Table
  47. Model 1: ynaffair ~ +age + yearsmarried + religiousness + rating
  48. Model 2: ynaffair ~ gender + age + yearsmarried + children + religiousness +
  49. education + occupation + rating
  50. Resid. Df Resid. Dev Df Deviance Pr(>Chi)
  51. 1 596 615.36
  52. 2 592 609.51 4 5.8474 0.2108

2.【解释模型参数】

  1. #显示回归系数[log(Pi)]
  2. > coef(fit.full)
  3. (Intercept) gendermale age yearsmarried childrenyes
  4. 1.37725816 0.28028665 -0.04425502 0.09477302 0.39767213
  5. religiousness education occupation rating
  6. -0.32472063 0.02105086 0.03091971 -0.46845426
  7. #进行e转换[Pi]
  8. > exp(coef(fit.full))
  9. (Intercept) gendermale age yearsmarried childrenyes
  10. 3.9640180 1.3235091 0.9567099 1.0994093 1.4883560
  11. religiousness education occupation rating
  12. 0.7227292 1.0212740 1.0314027 0.6259691

3.【预测变量】

  1. #根据模型进行预测
  2. > testdata <- data.frame(rating=c(1,2,3,4,5),age=mean(Affairs$age),yearsmarried=mean(Affairs$yearsmarried),religiousness=mean(Affairs$religiousness))
  3. > testdata$prob <- predict(fit.reduce,newdata = testdata,type = "response")
  4. > testdata
  5. rating age yearsmarried religiousness prob
  6. 1 1 32.48752 8.177696 3.116473 0.5302296
  7. 2 2 32.48752 8.177696 3.116473 0.4157377
  8. 3 3 32.48752 8.177696 3.116473 0.3096712
  9. 4 4 32.48752 8.177696 3.116473 0.2204547
  10. 5 5 32.48752 8.177696 3.116473 0.1513079

回归系数的含义:当其他预测变量不变时,一单位预测变量的变化可引起响应变量的变化。

5. 偏相关和多重相关

偏相关:感兴趣的两个变量之间的皮尔逊相关——r值,控制其他协变量
多重相关:y和所有变量的关系
image.png

1.用R计算偏相关系数

  1. > install.packages("ggm")
  2. > library(ggm)
  3. > #计算偏相关系数
  4. > pcor(c(1,5,2,3,6),cov(states))
  5. [1] 0.3462724

2.手动计算偏相关系数

Cor(y,x1)=sqrt(X1 Squared Partial Corr Typr Ⅱ)

3.手动计算多重相关系数

image.png