R语言 一元线性回归
来源:互联网 发布:数据库应用领域 编辑:程序博客网 时间:2024/05/01 07:16
一元线性回归分析
首先介绍回归分析中最基础的情况:一元线性回归分析。它规定模型f函数只能是y=k*x+b的形式,即只使用一个变量x(故称为一元)的线性形式来预测目标变量y。
6.1.1引例
利用某网站历次促销活动中促销让利费用和销售金额的数据(单位是十万元),将使用该数据集来说明线性回归分析的应用。
使用如下语句来绘制其散点图:
cost<-c(1.8,1.2,0.4,0.5,2.5,2.5,1.5,1.2,1.6,1.0,1.5,0.7,1.0,0.8)
sales<-c(104,68,39,43,127,134,87,77,102,65,101,46,52,33)
data<-data.frame(cost=cost,sales=sales)
plot(data,pch=16,xlab="cost促销让利费用(十万元)",ylab="sales 促销销量(十万元)")
sol.lm<-lm(sales~cost,data)
abline(sol.lm,col="red")
由上图可以看出,促销让利费用cost变量和促销销量sales变量之间呈直线形式。
6.1.2 一元线性回归分析的原理及R语言实现
1. 最小二乘法
最小二乘法旨在使获得的模型最大限度地拟合样本数据
2.样本方差和协方差
3. 计算模型的参数k和b
(1)估算参数k和b的典型值
(k<-cov(cost,sales)/cov(cost,cost))#模型参数k
(b<-mean(sales)-k*mean(cost)) #模型参数b
也可使用回归方程建立函数lm来计算。代码如下:
(sol.lm<-lm(sales~cost,data))
Call:
lm(formula= sales ~ cost, data = data)
Coefficients:
(Intercept) cost
13.82 48.60
(2)估算参数k和b的取值范围
在计算得到的回归模型y=k*x+b中,系数b和k只是一个真实模型的典型估算值,其估算范围是:
[ki-sd(ki)tα/2(n-2),ki+sd(ki)tα/2(n-2)]
其中,k0表示回归模型y=k×x+b中的b,k1表示k。sd(ki)是参数的标准差,可以使用summary(sol.lm)$coefficients[,2]直接读取,代码如下:
df<-sol.lm$df.residual
alpha=0.05
left<-summary(sol.lm)$coefficients[,1]-summary(sol.lm)$coefficients[,2]*qt(1-alpha/2,df);left
(Intercept) cost
1.667702 40.182861
right<-summary(sol.lm)$coefficients[,1]+summary(sol.lm)$coefficients[,2]*qt(1-alpha/2,df);right
(Intercept) cost
25.97978 57.01138
在上述代码中,df为自由度,等于样本数n减去自变量数p,再减1,即为n-2,该自由度可以通过sol.lm$df.residual直接读取,alpha是置信度,典型取值0.05,left是取值范围的最小值,right是取值范围的最大值。
4. 衡量相关程度
(1)相关系数r和判定系数r2
对于引例,可以使用如下代码来计算相关参数。
(r<-cor(cost,sales)) #相关系数r
(r2<-r^2) #判定系数r2
在lm函产生的结果中也包含了判定系数r的信息。
summary(sol.lm)
Call:
lm(formula= sales ~ cost, data = data)
Residuals:
Min 1Q Median 3Q Max
-19.701 -3.566 1.430 4.873 14.281
Coefficients:
Estimate Std. Error t valuePr(>|t|)
(Intercept) 13.824 5.579 2.478 0.0291 *
cost 48.597 3.862 12.584 2.84e-08 ***
---
Signif.codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05‘.’ 0.1 ‘ ’ 1
Residualstandard error: 9.106 on 12 degrees of freedom
MultipleR-squared: 0.9296, Adjusted R-squared: 0.9237
F-statistic:158.4 on 1 and 12 DF, p-value: 2.843e-08
上述的Multiple R-squared就是判定系数r2,该系数也可以使用summary(sol.lm)$r.squared来直接读取。
(2)修正判定系数adjusted.r2
事实上,判定系数r2在用于多元回归分析时有一个缺点,自变量越多,判定系数r2越大。为了消除这个缺点,可以引入修正判定系数adjusted.r2的概念。
lm函数产生的结果中也包含了修正判定系数adjusted.r2的信息
summary(sol.lm)
Call:
lm(formula= sales ~ cost, data = data)
Residuals:
Min 1Q Median 3Q Max
-19.701 -3.566 1.430 4.873 14.281
Coefficients:
Estimate Std. Error t valuePr(>|t|)
(Intercept) 13.824 5.579 2.478 0.0291 *
cost 48.597 3.862 12.584 2.84e-08 ***
---
Signif.codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05‘.’ 0.1 ‘ ’ 1
Residualstandard error: 9.106 on 12 degrees of freedom
MultipleR-squared: 0.9296, AdjustedR-squared: 0.9237
F-statistic:158.4 on 1 and 12 DF, p-value: 2.843e-08
上述的Adjusted R-squared就是修正判定系数,该系数也可以使用summary(sol.lm)$adj.r.squared来直接读取。
5. 回归系数的显著性检验
(1)T检验
T检验可以检验各个模型参数是否等于0,并计算其等于0时的概率。一般来说,当p.value小于0.05,时,可以认定k不会等于0,其模型结果可用并通过了检验。
summary(sol.lm)
Call:
lm(formula= sales ~ cost, data = data)
Residuals:
Min 1Q Median 3Q Max
-19.701 -3.566 1.430 4.873 14.281
Coefficients:
Estimate Std. Error t valuePr(>|t|)
(Intercept) 13.824 5.579 2.478 0.0291 *
cost 48.597 3.862 12.584 2.84e-08 ***
---
Signif.codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05‘.’ 0.1 ‘ ’ 1
Residualstandard error: 9.106 on 12 degrees of freedom
MultipleR-squared: 0.9296, Adjusted R-squared: 0.9237
F-statistic:158.4 on 1 and 12 DF, p-value: 2.843e-08
也可以使用如下代码直接读取结果:
summary(sol.lm)$coefficients[,4]
(Intercept) cost
2.907896e-022.843305e-08
(2) F检验
与T检验不同,F检验用于在整体上检验模型参数是否为0,并计算等于0的概率。
summary(sol.lm)
Call:
lm(formula= sales ~ cost, data = data)
Residuals:
Min 1Q Median 3Q Max
-19.701 -3.566 1.430 4.873 14.281
Coefficients:
Estimate Std. Error t valuePr(>|t|)
(Intercept) 13.824 5.579 2.478 0.0291 *
cost 48.597 3.862 12.584 2.84e-08 ***
---
Signif.codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05‘.’ 0.1 ‘ ’ 1
Residualstandard error: 9.106 on 12 degrees of freedom
MultipleR-squared: 0.9296, Adjusted R-squared: 0.9237
F-statistic:158.4 on 1 and 12 DF, p-value: 2.843e-08
其值为2.843e-08,远小于0.05,表示通过了F检验。
在summary(sol.lm)中只给出了样本自由度\自变量自由度以及F值,可以使用如下代码来直接读取F检验的p-value值。
(f<-summary(sol.lm)$fstatistic[1])
(df1<-summary(sol.lm)$fstatistic[2])
(df2<-summary(sol.lm)$fstatistic[3])
pf(f,df1,df2,lower.tail=F)
value
2.843305e-08
或者
1-pf(f,df1,df2)
value
2.843305e-08
6. 模型误差(残差)
回归模型sol.lm的误差(残差residuals),可用于体现样本点模型预测值与实际数据的差异程度,可通过sol.lm$residuals直接读取误差数据。对已一个正确的回归模型,其误差要服从正态分布。
shapiro.test(sol.lm$residuals)
Shapiro-Wilknormality test
data: sol.lm$residuals
W= 0.9669, p-value = 0.8329
说明残差服从正态分布。
残差的标准误(Residual standard error)可以从整体上体现一个模型的误差情况,它可以用于不同模型间性能的对比。
summary(sol.lm)
Call:
lm(formula= sales ~ cost, data = data)
Residuals:
Min 1Q Median 3Q Max
-19.701 -3.566 1.430 4.873 14.281
Coefficients:
Estimate Std. Error t valuePr(>|t|)
(Intercept) 13.824 5.579 2.478 0.0291 *
cost 48.597 3.862 12.584 2.84e-08 ***
---
Signif.codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05‘.’ 0.1 ‘ ’ 1
Residual standarderror: 9.106 on 12 degrees of freedom
MultipleR-squared: 0.9296, Adjusted R-squared: 0.9237
F-statistic:158.4 on 1 and 12 DF, p-value: 2.843e-08
也可以使用summary(sol.lm)$sigma直接读取。
7. 预测
在R语言中,使用predict函数可以方便地计算预测值和取值范围。
下面的代码返回原有14个样本的预测值数据。
predict(sol.lm)
1 2 3 4 5 6 7 8 9 10 11 12 13
101.29856 72.14029 33.26259 38.12230 135.31655135.31655 86.71942 72.14029 91.57914 62.42086 86.71942 47.84173 62.42086
14
52.70144
- R语言 一元线性回归
- R语言 一元线性回归
- R语言一元线性回归
- R语言解读一元线性回归模型
- R语言简单(一元)线性回归分析
- R语言线性回归
- R假设检验与一元线性回归分析
- 一元回归分析r语言代码
- 使用R语言进行一元回归
- R语言多元线性回归
- R语言学习-线性回归
- R语言多元线性回归
- R语言多元线性回归
- R语言多元线性回归
- R语言线性回归诊断
- R语言做线性回归
- 用R进行一元线性回归分析建模
- 一元线性回归分析
- 基于NVIDIA显卡的硬编解码的一点心得
- 关于ajaxFileUpload只能上传一次的解决
- WindowManager.LayoutParams文档中文参照
- IOS-TextField知多少
- Python之实现简单的注册登录系统
- R语言 一元线性回归
- windows 下配置 rsync
- [硬件结构]为什么branch prediction和cache在硬件体系结构中这么重要?
- JDK1.5或以上版本泛型报错
- JavaWeb - JavaScript中Window对象
- Andorid 清除项目中不用的资源
- web链接跳转安卓app的问题
- 数据量大MSYQL并发
- R树空间索引