题目
MASS 库中包含 Boston (波士顿房价)数据集,它记录了波士顿周围 506 个街区的 medv (房价中位数)。我们将设法用 13 个预测变量如 rm (每栋住宅的平均房间数), age (平均房 龄), lstat (社会经济地位低的家庭所占比例)等来预测 medv (房价中位数)。
************************************************MASS是R语言自带的库********************************************************
library(MASS) #加载MASS程序包
library(ISLR) #加载ISLR程序包,确保事先已经下载install.packages("ISLR")
fix(Boston) #打开Boston房价数据,excel
names(Boston) #查看所有的数据特征,即:列属性
# [1] "crim" "zn" "indus" "chas" "nox" "rm"
# [7] "age" "dis" "rad" "tax" "ptratio" "black"
# [13] "lstat" "medv"
?Boston#查看Boston的更多数据信息(帮助文档)
准备好了数据集,我们开始用 lm ()函数拟合一个简单线性回归模型开始,将 lstat 作为预测变量, medv 作 为响应变量。基本句法是 lm (y ~ x , data) ,其中 y 是响应变量, x 是预测变量, data 是这 两个变量所属的数据集。
lm.fit=lm(medv~lstat)
发现提示错误:Error in eval(predvars, data, env) : 找不到对象'medv'
因为 R 不知道哪里可以找到变量 medv 和 lstat。下一行命令告诉 R,变 量在 Bosto日数据集中。如果绑定 Boston 数据集, R 就能识别变量,此时第一行语句可以正 常工作。
lm.fit=lm(medv~lstat,data=Boston)
attach(Boston)
lm.fit=lm(medv~lstat)
lm.fit# Call:
# lm(formula = medv ~ lstat)# Coefficients : 系数
# (Intercept) lstat
# 34.55 -0.95
如果我们输入 lm. fit ,则会输出模型的一些基本信息,这给出了预测的线性函数的截距以及系数。那么预测的线性函数就已经出来了。
summary(lm.fit)
Call:
lm(formula = medv ~ lstat)Residuals: 残差Min 1Q Median 3Q Max
-15.168 -3.990 -1.318 2.034 24.500 Coefficients: Estimate Std. Error t value Pr(>|t|) #估计标准误差t值
(Intercept) 34.55384 0.56263 61.41 <2e-16 ***
lstat -0.95005 0.03873 -24.53 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1Residual standard error: 6.216 on 504 degrees of freedom #预测的残差标准误 #Coefficient of determination(有的译为“决定性系数”)。
Multiple R-squared: 0.5441, Adjusted R-squared: 0.5432 #F统计量 P值
F-statistic: 601.6 on 1 and 504 DF, p-value: < 2.2e-16
这一句会列出系数的p值和标准误,以及模型R^2统计量和F统计量。
Residuals: 残差Min 1Q Median 3Q Max
-15.168 -3.990 -1.318 2.034 24.500
上方的代表残差。 通过将预测结果(通过函数计算) 减去 对应的目标变量 (预测变量的真实值)的真实值,便可获得残差值。
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
显著性标记 * * * 极度显著,* * 高度显著,*显著,圆点不太显著,没有记号不显著简而言之,*越多代表效果越好,下面估计的系数,代表就极度显著,就是很准确的意思。
Coefficients: Estimate Std. Error t value Pr(>|t|) #估计标准误差t值
(Intercept) 34.55384 0.56263 61.41 <2e-16 ***
lstat -0.95005 0.03873 -24.53 <2e-16 ***
第一列代表34.55384代表的是截距,-0.95005代表斜率
第二列:推算的系数的标准差
第三列:t值,t统计量
第四列:p值,是一个验证假设是否成立的值。比如身高体重模型,假设身高height与weight无关系,也就是在原始的模型中呢,体重=常数+0*height,height前面系数为0,由此我们可以通过R算出一个统计量t值,Pr表示t值以外的面积,也就是下面谈到的p值
估计标准误差(Se)是说明实际值与其估计值之间相对偏离程度的指标,主要用来衡量回归方程的代表性。估计标准误差,即因变量y的实际值与回归方程求出的估计值之间的标准误差,估计标准误差越小,回归方程拟合程度越好。
估计标准误差的值越小,则估计量与其真实值的近似误差越小,但不能认为估计量与真实值之间的绝对误差就是估计标准误差。估计标准误差与判定系数相反,se反映了预测值与真实值之间误差的大小,se越大说明拟合度越低。
Residual standard error: 6.216 on 504 degrees of freedom #预测的残差标准误
残差标准误即计算标准误的样本是样本数值的残差。
标准误,即样本均数的标准差,是描述均数抽样分布的离散程度及衡量均数抽样误差大小的尺度,反映的是样本均数之间的变异。标准误不是标准差,是多个样本平均数的标准差。
标准误用来衡量抽样误差。标准误越小,表明样本统计量与总体参数的值越接近,样本对总体越有代表性,用样本统计量推断总体参数的可靠度越大。因此,标准误是统计推断可靠性的指标。
#Coefficient of determination(有的译为“决定性系数”)。
Multiple R-squared: 0.5441, Adjusted R-squared: 0.5432
这里的决定性系数R方,我经常与函数的相关系数R弄混,今天将两者简单谈一下。
1、 相关系数 R
定义: 变量之间线性相关的度量。
计算:
解释:
自变量X和因变量Y的协方差/标准差的乘积。
* 协方差:两个变量变化是同方向的还是异方向的。X高Y也高,协方差就是正,相反,则是负。
* 为什么要除标准差:标准化。即消除了X和Y自身变化的影响,只讨论两者之间关系。
* 因此,相关系数是一种特殊的协方差。
2、决定性系数 R方
定义:对模型进行线性回归后,评价回归模型系数拟合优度。
公式:R方=(TSS-RSS)/TSS=1-RSS/TSS
TSS (total sum of squares):总平方和,即:用真实值-真实值的平均值的平方
RSS (regression sum of squares):残差平方和
在简单回归模型中,R方是响应变量Y和预测变量X相关系数的平方.在多元线性回归中,是响应值Y和线性拟合值,相关系数的平方。
综上:R方接近于1,则表明该模型能解释大部分响应变量的方差。
#F统计量 P值
F-statistic: 601.6 on 1 and 504 DF, p-value: < 2.2e-16
1、 P值
P值即概率,反映某一事件发生的可能性大小。统计学根据显著性检验方法所得到的P 值,一般以P < 0.05 为有统计学差异, P<0.01 为有显著统计学差异,P<0.001为有极其显著的统计学差异。其含义是样本间的差异由抽样误差所致的概率小于0.05 、0.01、0.001。实际上,P值不能赋予数据任何重要性,只能说明某事件发生的几率。统计结果中显示Pr > F,也可写成Pr( >F),P = P{ F0.05 > F}或P = P{ F0.01 > F}。
计算:
一般呢,我们进行线性拟合时:拟合出来的公式为 Y(预测) = b(预测) + a(预测)x 。
但是b(预测)与真实的b会有一定误差,a(预测)也如此,差距如何衡量?
计算a,b的标准误差可以使用以下公式
σ 是变量 Y 的每个实现值 Yi 的标准差。
计算p值,还需要引入t统计量。
t统计量
定义:用于测量 了 β1 偏离 0 的标准偏差。即:测量函数是一个常数函数还是一个一元函数。
计算:
以0为中心,左右对称的单峰分布;t分布是一簇曲线,其形态变化与n(确切地说与自由度df)大小有关。自由度df越小,t分布曲线越低平;自由度df越大,t分布曲线越接近标准正态分布(u分布)曲线;随着自由度逐渐增大,t分布逐渐接近标准正态分布。
(自由度:估计的样本数据中有n个点,其中有a个点的取值不受其他点的影响,则自由度为a,所谓受影响即:变量x的取值如果不会影响的变量z的取值,比如z不是根据x来计算出来的。那么称z与x没有关系,则没有影响)
P值定义: 计算任意观测值大于等于 I t I 的概率就十分简单了,我们称这个概率为 p 值 。
解释::一个很小的 p 值表示,在预测变量和响应变量之间的真实关系 未知的情况下,不太可能完全由于偶然而观察到预测变量和响应变量之间的强相关。因此,如 果看到一个很小的 p 值,就可以推断预测变量和响应变量问存在关联。
2、F统计量
F统计量定义:用来检测响应变量Y与预测变量X之间是否有关系。对于多元一次函数分析用了超过一个参数的统计模型,以 判断该模型中的全部或一部分参数是否适合用来估计母体。
计算:
这里把选择忽略的变量放在了列表末尾。在这种情况下,我们用除最后 q 个变量 之外的所有变量建立第二个模型。假 设该模型的残差平方为 RSSo
解释:当响应变量与预测变量时F统计量应该接近于1。
回到实验,我们可以使用names ()函数找出 lm. fit 中存储的其他信息。虽然可以用名称提取这些量 例 如: lm. fit $ coefficients但用提取功能如 coef ()访问它们会更安全。
> names(lm.fit)[1] "coefficients" "residuals" "effects" "rank" [5] "fitted.values" "assign" "qr" "df.residual" [9] "xlevels" "call" "terms" "model"
> coef(lm.fit)#这样访问更加安全
(Intercept) lstat 34.5538409 -0.9500494 > confint(lm.fit)#得到系数估计值的置信区间2.5 % 97.5 %
(Intercept) 33.448457 35.6592247 #截距估计
lstat -1.026148 -0.8739505 #一次项系数估计> predict(lm.fit,data.frame(lstat=(c(5,10,15))), interval="confidence")#计算置信区间fit lwr upr
1 29.80359 29.00741 30.59978
2 25.05335 24.47413 25.63256
3 20.30310 19.73159 20.87461
> predict(lm.fit,data.frame(lstat=(c(5,10,15))), interval="prediction")#计算预测区间fit lwr upr
1 29.80359 17.565675 42.04151
2 25.05335 12.827626 37.27907
3 20.30310 8.077742 32.52846
由以上数据可以看出:如当 lstat 等于 10 时,相应的 95% 置信区间为 (24. 47 , 25. 63) ,相应的 95% 预测区 间为 (12.828 , 37.28) 。正如预期的那样,置信区间和预测区间有相同的中心点(当 lstat 等于 10 时, medv 的预测值是 25.05) ,但后者要宽得多。
用函数 plot ()和 abline ()绘制 medv 和 lstat 的散点图以及最小二乘回归 直线。
plot(lstat,medv)
abline(lm.fit)
abline(lm.fit,lwd=3)
abline(lm.fit,lwd=3,col="red")
plot(lstat,medv,col="red")
plot(lstat,medv,pch=20)
plot(lstat,medv,pch="+")
plot(1:20,1:20,pch=1:20)
以上命令,分别是改变线条的宽度,线的颜色,散点图的点的形状,点的大小、颜色等。
接下来我们检查一些诊断图。对lm ( )的输出直接用 plot ()命令将自动生成四幅诊断图。一般情况下,这个命令每次生成一幅图,按下回车键 (Enter) 将生成下一幅图。然而,同时查看所有 4 幅图通常比较方便。可以用 par ()函数做到 这一点,它指示 R 将显示屏分割成独立的面板,所以可以同时查看多个图。例如, par (mfrow = c (2 , 2)) 把绘图区域划分成 2 x2 的网格面板。
par(mfrow=c(2,2))
plot(lm.fit)#生成4幅诊断图
plot(predict(lm.fit), residuals(lm.fit))
plot(predict(lm.fit), rstudent(lm.fit))plot(hatvalues(lm.fit))
which.max(hatvalues(lm.fit))
375
375
以用 residuals ()函数计算线性回归拟合的残差。函数 rstudent ()可计算学生化 残差,我们也可以用这个函数绘制残差对拟合值的散点图。
残差图中的一些证据表明数据有非线性。杠杆统计量可以由 hatva1ues ()函数为任意多 个预测变量来计算。
which. max ()函数可识别出向量中最大元素的索引。在本例中,它告诉我们哪个观测具 有最大的杠杆统计量。