优秀的编程知识分享平台

网站首页 > 技术文章 正文

用R语言做数据分析——一元线性回归

nanyue 2024-08-06 18:08:18 技术文章 8 ℃

在许多实际问题中,经常会遇到需要同时考虑几个变量的情况。例如,在电路中会遇到电压、电流和电阻之间的关系;在炼钢过程中会遇到钢水中的碳含量和钢材的物理性能之间的关系,在医学上经常测量人的身高、体重,研究人的血压与年龄的关系,这些变量之间是相互制约的。

通常变量间的关系有两大类:

一类是变量间有完全确定的关系,可用函数关系式来表示,如电路中的欧姆定律:I(电流)=U(电压)/R(电阻);

另一类是变量间有一定的关系,但由于情况错综复杂无法精确研究,或由于存在不可避免的误差等原因,以致它们的关系无法用函数形式表示出来,为研究这类变量之间的关系就需要通过大量实验或观测获得数据,用统计方法去寻找它们间的关系,这种关系反映了变量间的统计规律,研究这类统计规律的方法之一便是回归分析。

在回归分析中,把变量分成两类,一是因变量,它们通常是实际问题中所关系的一些指标,通常用Y表示,而影响因变量取值的另一些变量称为自变量,它们用X1,,X2,...,Xp来表示。

在回归分析中研究的主要问题是:

1. 确定Y与X1,,X2,...,Xp间的定量关系表达式,这种表达式称为回归方程;

2. 对求得的回归方程的可信度进行检验;

3. 判断自变量Xj(j=1,2,...,p)对Y有无影响;

4. 利用所求得的回归方程进行预测和控制。

先从最简单的情况开始讨论,只考虑一个因变量Y与一个自变量X之间的关系。

例子:在制造领域中,合金的强度Y与合金含碳量X有关,为了了解它们间的关系,从生产中收集了一批数据(Xi,Yi),i=1,2,...,n,具体数据如下图:

第一步、绘制散点图,确定数学模型

> x<-c(0.10,0.11,0.12,0.13,0.14,0.15,0.16,0.17,0.18,0.20,0.21,0.23)

> y<-c(42.0,43.5,45.0,45.5,45.0,47.5,49.0,53.0,50.0,55.0,55.0,60.0)

> plot(x,y)

从散点图中可以看出,Y与X的关系基本上是线性的,而这些点直线的偏离是由其他一切不确定因素的影响造成的,因此做如下假定:

Y = β0+β1X+ξ

其中β0+β1X表示Y随X的变化而线性变化的部分,ξ是随机误差。β0为回归常数,β1为回归系数,称X为回归自变量(或回归因子),称Y为回归因变量(或响应变量)。

第二步、作回归参数的估计,进行显著性检验

这里使用R语言的lm()函数可以非常方便地求出回归参数和作相应的检验:

> lm.sol<-lm(y~1+x)

> summary(lm.sol)

Call:

lm(formula = y ~ 1 + x)

Residuals:

Min 1Q Median 3Q Max

-2.0431 -0.7056 0.1694 0.6633 2.2653

Coefficients:

Estimate Std. Error t value Pr(>|t|)

(Intercept) 28.493 1.580 18.04 5.88e-09 ***

x 130.835 9.683 13.51 9.50e-08 ***

---

Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.319 on 10 degrees of freedom

Multiple R-squared: 0.9481, Adjusted R-squared: 0.9429

F-statistic: 182.6 on 1 and 10 DF, p-value: 9.505e-08

lm()函数表示作线性模型,其模型公式y ~ 1 + x表示的是Y = β0+β1X+ξ,函数summary()提取模型的计算结果:

1. 第一部分(call)列出了相应的回归模型的公式;

2. 第二部分(Residuals )列出的是残差的最小值、1/4分位点、中位数、3/4分位点和最大值点;

3. 第三部分(Coefficients)中,Estimate表示回归参数估计,Std. Error表示回归参数的标准差,t value表示t值,Pr(>|t|) 表示P值。还有显著性标记,其中***说明极为显著,**说明高度显著,*说明显著,.说明不太显著,没有记号为不显著

4. 第四部分中,Residual standard error表示残差的标准差,Multiple R-squared为相关系数的平方,Adjusted R-squared 为调整相关系数的平方,F-statistic表示F统计量

第三,回归参数的区间估计

编写相应的区间估计计算程序(beta.int.R),并假设变量fm是相应的拟合模型。

beta.int<-function(fm,alpha=0.05){

A<-summary(fm)$coefficients

df<-fm$df.residual

left<-A[,1]-A[,2]*qt(1-alpha/2,df)

right<-A[,1]+A[,2]*qt(1-alpha/2,df)

rowname<-dimnames(A)[[1]]

colname<-c("Estimate","Left","Right")

matrix(c(A[,1],left,right),ncol = 3,dimnames = list(rowname,colname))

}

在程序中,summary是提取模型信息,返回值为一列表,其中$coefficients是由回归系数、标准差、t值和P值构成的矩阵,fm是由lm计算得到的回归模型,其中$df.residual为模型的自由度,left和right是区间估计的左右值。

得出回归模型lm.sol,调用自编函数beta.int.R,得出相应的区间估计:

> source("beta.int.R")

> beta.int(lm.sol)

Estimate Left Right

(Intercept) 28.49282 24.97279 32.01285

x 130.83483 109.25892 152.41074

第四、预测与控制

当经过检验,回归方程式有意义时,可用它作预测,这里将的预测可以有两方面的意义,一是当给定X=x0时,求相应平均值的点估计与其置信水平为1-α的区间估计,而是对给定X=x0求预测值及它的概率为1-α的预测区间。

利用R语言的predict()函数可以非常方便求出预测值与预测区间:

> new<-data.frame(x=0.16)

> lm.pred<-predict(lm.sol,new,interval = "prediction",level = 0.95)

> lm.pred

fit lwr upr

1 49.42639 46.36621 52.48657

这里输入一个新的点x=0.16,注意:即使一个点也要采用数据框的形式,predict()函数给出相应的预测值,参数interval = "prediction"表示同时要给出相应的预测区间,参数level=0.95表示相应的概率为0.95.这里也可以省略不写,因为它的缺省值就是0.95。

回归方程还可用于控制,设某质量指标Y与某一自变量X之间有线性相关关系,且已求得线性回归方程Y=β0+β1X,此外,当Y∈(Yi,Yu)为质量合格,那么X应该控制在什么范围内才能以概率1-α保证质量合格,这便是一个控制问题。控制可以看成与预测相反的问题,即要求观察值Y在某一区间(Yi,Yu )取值时,问将X控制在什么范围内。

Tags:

最近发表
标签列表