残差学习【转载】
转自:https://baike.baidu.com/item/%E6%AE%8B%E5%B7%AE/5162512#1
https://blog.csdn.net/mengjizhiyou/article/details/82216278
1.定义
在回归模型 中,假定
的期望值为0,方差相等且服从正态分布的一个随机变量。但是,若关于
的假定不成立,此时所做的检验以及估计和预测也许站不住脚。
确定有关的假定是否成立的方法之一是进行残差分析(residual analysis).
//期望值为0,不是均值为0。方差相等,若以自变量为横轴,那么就是残差不会随着自变量的增大而变化。
2.残差
普通残差就是使用预测值与真实值的差值。
减去残差的均值,比上残差的标准差。百科上是这么说的:
//这里计算方差,需要用到矩阵的性质吧,我还不太明白。
性质
3.残差图
分析:
(a)对所有x值,的方差都相同,且描述变量x和y之间的回归模型是合理的,残差图中的所有点落在一条水平带中间。
(b)对所有的值,的方差是不同的,对于较大的x值,相应的残差也较大,违背了
的方差相等的假设
(c)表明所选的回归模型不合理,应考虑曲线回归或多元回归模型。
标准化残差图
如果误差项 服从正态分布的这一假定成立,则标准化残差的分布也服从正态分布。大约有95%的标准化残差在 -2~2 之间。
从图中可以看出,除了箭头所标识的点外,所有的标准化残差都在 -2~2 之间,所以误差项服从正态分布的假定成立。
3.R中计算残差
普通残差
转自:http://baijiahao.baidu.com/s?id=1581878577084855837&wfr=spider&for=pc
> x=c(274, 180, 375, 205, 86, 265, 98, 330, 195, 53, 430, 372, 236, 157, 370) > y=c(162, 120, 223, 131, 67, 169, 81, 192, 116, 55,252, 234, 144, 103, 212) > lm.reg<-lm(y~x) > lm.reg Call: lm(formula = y ~ x) Coefficients: (Intercept) x 22.5959 0.5301 > plot(x,y) > plot(x,x*0.5301+22.5959) > residuals(lm.reg) 1 2 3 4 5 6 7 8 -5.8371655 1.9901142 1.6250126 -0.2618219 -1.1826061 5.9335315 6.4564646 -5.5215024 9 10 11 12 13 14 15 -9.9610475 4.3099496 1.4707532 14.2152450 -3.6942227 -2.8181046 -6.7246001 > length(x) [1] 15 > y-predict(lm.reg) 1 2 3 4 5 6 7 8 -5.8371655 1.9901142 1.6250126 -0.2618219 -1.1826061 5.9335315 6.4564646 -5.5215024 9 10 11 12 13 14 15 -9.9610475 4.3099496 1.4707532 14.2152450 -3.6942227 -2.8181046 -6.7246001 > predict(lm.reg) 1 2 3 4 5 6 7 8 9 167.83717 118.00989 221.37499 131.26182 68.18261 163.06647 74.54354 197.52150 125.96105 10 11 12 13 14 15 50.69005 250.52925 219.78476 147.69422 105.81810 218.72460
其中,x和y的散点图:
标准化误差
> rstandard(lm.reg)#使用R的函数计算 1 2 3 4 5 6 7 8 -0.9416479 0.3235814 0.2754541 -0.0422737 -0.2046419 0.9558474 1.1044435 -0.9081795 9 10 11 12 13 14 15 -1.6121139 0.7749377 0.2642816 2.4037012 -0.5942624 -0.4626949 -1.1352669 > ?lm > h=hatvalues(lm.reg)#调用帽子矩阵的对角线元素 > h 1 2 3 4 5 6 7 8 0.07211511 0.08661028 0.15960771 0.07372797 0.19358595 0.06949958 0.17478005 0.10743828 9 10 11 12 13 14 15 0.07809592 0.25307344 0.25215275 0.15547037 0.06683869 0.10423942 0.15276447 > mse=sum((residuals(lm.reg)-mean(residuals(lm.reg)))^2)/13#这里为什么要减去两个样本..不明白 > mse [1] 41.41263 > standard_error= residuals(lm.reg)/(sqrt(mse*(1-h)))#用公式计算标准化残差 > standard_error 1 2 3 4 5 6 7 8 -0.9416479 0.3235814 0.2754541 -0.0422737 -0.2046419 0.9558474 1.1044435 -0.9081795 9 10 11 12 13 14 15 -1.6121139 0.7749377 0.2642816 2.4037012 -0.5942624 -0.4626949 -1.1352669
通过 标准化残差公式 计算得到的结果。