R中的加权线性回归
如果您像我一样,在工学院就读过线性回归,这是一种“将线拟合到数据”的方法,并且可能称为“最小二乘”。您可能将其扩展到影响单个因变量的多个变量。在统计类中,您必须计算一堆东西并估计这些行的置信区间。除非您专注于数学或统计学,否则这可能已经存在了很长时间。您可能会在使用“普通最小二乘法”的决策中有一些假设。
现在,由于有语言,免费代码和程序包可以执行分析中的大多数操作,因此很容易扩展到普通最小二乘法之外,并且这样做很有价值。在R中,使用普通最小二乘法进行多元线性回归仅需要一行代码:
型号<-lm(Y?X,数据= X_data)
注意,我们可以用多个变量替换X。您可以使用现在存储在模型中的模型,通过多一行代码对新数据进行预测:
Y_pred <-预测(模型,数据= new_X_data)
我们可以在R中轻松生成一些“理想”数据以进行回归:
X_data <-seq(1,100,1)
Y_raw <-3.5 + 2.1 * X_data
Y_noise <-rnorm(n = 100,平均值= 0,sd = 5)
Y <-data.frame(X = X_data,Y = Y_raw + Y_noise)
使用lm方法,我们得到以下结果:
左侧是噪声数据和线性回归线;右边是从拟合到数据的残差,以直方图的形式绘制,并叠加了均值和标准差相同的正态曲线。R通过简单地调用summary(Model)来提供模型统计信息:
>摘要(型号)
呼叫:
lm(公式= Y_noisy?X,数据= Y)
残留物:
最小值1Q中位数3Q最大值
-11.1348 -2.9799 0.3627 2.9478 10.3814
系数:
估计标准 误差t值Pr(> | t |)
(截取)3.51543 0.98362 3.574 0.000548 ***
X 2.11284 0.01691 124.946 <2e-16 ***
---
签名 编码:0'***'0.001'**'0.01'*'0.05'。' 0.1''1
残留标准误差:98自由度上为4.881
多个R平方:0.9938,调整后R平方:0.9937
F统计量:1.561e + 04在1和98 DF上,p值:<2.2e-16
我们可以看到,系数与基础模型略有不同。此外,这两个模型参数都非常重要,这是可以预期的。现在,让我们看一个更麻烦的案例,以及我们可以做些什么。
X_data <-seq(1,1000,1)
#
#Y在x中是线性的,具有均匀,周期性和偏斜的噪声
#
Y_raw <-1.37 + 2.097 * x
Y_noise <-(X_data / 100)* 25 *(sin(2 * pi * X_data / 100))*
符文(n =长度(X_data),最小值= 3,最大值= 4.5)+
(X_data / 100)^ 3 * runif(n = 100,最小值= 1,最大值= 5)
Y <-data.frame(X = X_data,Y = Y_raw + Y_noise)
再次使用lm我们可以获得以下内容:
左侧是原始数据,红线是线性最小二乘法线,虚线是“实际” Y,当然我们可能事先并不知道。右边是残留物和以前的正常固化方法。
在继续进行之前,我们需要对一些事情进行整理。首先,这是一个极端且可能不现实的例子。如果我们一无所知,我们可能会得出结论,实数Y是周期性的,随X增大,而周期性部分的振幅也随X增大。但是,假设我们有充分的理由相信基本现象是线性的。另外,假设我们对Y应该是什么有所了解,并且我们认为红线太高了。在所有这些条件下,我们可能会想知道如何处理数据。(是的,我们可以解雇收集了它们的技术人员,将测量设备送去维修,或只是重新开始。现在,假设我们明天开始一个过程,并且需要控制程序的回归方程式。)
所以我们认为我们有一个很大的噪音问题。但是,除了右边的一点点,残差图看起来非常正态分布(高斯)。让我们以其他几种方式看一下残差。
左侧是残差值与拟合Y值的关系图。绘制这样的情节通常是个好主意。普通最小二乘的基本假设是残差不取决于函数的值,并且残差的分布在各处都相同。我们可以看到仅通过检查左图即可同时违反这两个条件。这给我们提供了更多的信息,而不仅仅是直方图。右侧是正常QQ图,其构造使得满足我们的正态性和恒定性要求的残差值都在红线上。这表明朝着更高的值存在一个问题。这是我们的另一条线索,我们可能只看拟合度或直方图就错过了。
左图显示了行为统计量,其他人称为异方差。希望有一天您可以在Scrabble?中使用该词。本质上说,异质性意味着残差确实表现出我们观察到的有害变化。那我们该怎么办呢?实际上,可以使用很多建模方法,但是在这里,我们将仅关注加权线性回归。有大量统计数据可用于确定要应用于原始数据点的权重,以提高回归模型的准确性。在许多情况下,权重的一个好估计是将Y值除以残差的方差。这就引出了一个问题:我们如何计算方差值,特别是每个X值只有1点?理想情况下,
我们在这里说明一种务实的方法。我们定义一个分箱大小,在这种情况下为10个测量值,并通过计算分箱中10个测量值的方差并使用与分箱中心对应的X值的方差来计算残余方差的移动值。在数据的左端和右端,我们分别使用了初始值和最后10个值的方差。宾果游戏,每个Y值都有一个残差方差值。R包MASS包含一个健壮的线性模型函数,我们可以将其与以下权重一起使用:
加权拟合<-rlm(Y?X,数据= Y,权重= 1 / sd_variance)
使用rlm,我们获得以下信息:
左边的一个,新的拟合度是绿线。请注意,除了残差方差以外,没有任何其他信息,该模型现在更接近“真实”Y。在右侧,我们看到残差有偏斜,但最有可能的值接近0。
总之,除了通常的回归汇总表以外,检查回归模型的残差行为始终是一个好主意。如果有问题的证据,则有解决问题的方法,包括我们在此处演示的(简单)加权回归。
题库