最佳拟合线看起来不太合适。为什么?

机器算法验证 回归 擅长 直觉
2022-01-18 23:13:21

看看这个 Excel 图表:

图表

“常识”的最佳拟合线看起来是一条几乎垂直的线,笔直穿过点的中心(以红色手工编辑)。然而,由 Excel 决定的线性趋势线是显示的对角黑线。

  1. 为什么 Excel 产生的东西(在人眼看来)似乎是错误的?
  2. 我怎样才能产生一条看起来更直观的最佳拟合线(即像红线一样的东西)?

更新 1.此处提供了带有数据和图表的 Excel 电子表格: 示例数据Pastebin 中的 CSVtype1 和 type2 回归技术是否可用作 excel 函数?

更新 2.数据代表滑翔伞在热气流中攀爬,同时随风漂移。最终目标是研究风的强度和方向如何随高度变化。我是一名工程师,而不是数学家或统计学家,因此这些回复中的信息为我提供了更多研究领域。


这是一个有趣的线程,如果数据丢失并且将来有人无法重现这些示例,那将是一种耻辱,所以我在这里将其添加为评论(这是来自以下链接的数据)。

"lon","lat"
-0.713917,53.9351
-0.712917,53.93505
-0.712617,53.934983
-0.712333,53.9349
-0.7122,53.93475
-0.71215,53.934567
-0.712233,53.9344
-0.712483,53.934233
-0.712817,53.934167
-0.713217,53.934167
-0.713617,53.934267
-0.7141,53.934733
-0.714133,53.935
-0.71395,53.935283
-0.713617,53.9355
-0.713233,53.935617
-0.712767,53.935617
-0.712383,53.9355
-0.712183,53.9353
-0.712367,53.934883
-0.712717,53.934767
-0.713133,53.9348
-0.713583,53.934917
-0.713867,53.93515
-0.714017,53.935433
-0.7139,53.935717
-0.7136,53.935933
-0.71325,53.936067
-0.712833,53.936133
-0.7124,53.936117
-0.712083,53.935983
-0.7119,53.935767
-0.711917,53.935567
-0.7121,53.935383
-0.7124,53.935283
-0.712733,53.93525
-0.713117,53.935267
-0.7135,53.93535
-0.713817,53.935517
-0.71405,53.935733
-0.71415,53.935983
-0.7141,53.93625
-0.7139,53.9365
-0.713567,53.936667
-0.713183,53.936767
-0.712767,53.9368
-0.7124,53.9367
-0.712133,53.93655
-0.712033,53.936333
-0.712167,53.936167
-0.712383,53.936017
-0.712733,53.935917
-0.7132,53.93595
-0.713567,53.936067
-0.713867,53.936267
-0.714067,53.9365
-0.71415,53.936767
-0.714033,53.937033
-0.71375,53.937233
-0.7134,53.9374
-0.712967,53.93745
-0.71255,53.937433
-0.7122,53.937267
-0.712067,53.937033
-0.712117,53.9368
-0.712367,53.936617
-0.712733,53.936533
-0.713133,53.93655
-0.713467,53.93665
-0.71375,53.93685
-0.713933,53.937083
-0.71395,53.937367
-0.713767,53.937633
-0.713433,53.937833
-0.713033,53.937967
-0.712567,53.937967
-0.71215,53.937867
-0.711883,53.93765
-0.711817,53.937433
-0.711983,53.937233
-0.71265,53.937033
-0.713067,53.9371
-0.713683,53.93745
-0.713817,53.937983
-0.713633,53.938233
-0.7133,53.938433
-0.71285,53.938533
-0.71205,53.938333
-0.71185,53.938117
-0.711867,53.937867
-0.712067,53.9377
-0.712417,53.937583
-0.712833,53.937567
-0.713233,53.937667
-0.713567,53.937883
-0.7137,53.938417
-0.713467,53.93865
-0.713117,53.938817
-0.712683,53.938917000000004
-0.71225,53.938867
-0.711917,53.938717
-0.711767,53.938483
-0.711883,53.938267
-0.712133,53.9381
-0.712483,53.938017
-0.713283,53.93815
-0.713567,53.938333
-0.7138,53.938567
-0.713683,53.9391
-0.713417,53.9393
-0.71305,53.939433
-0.7126,53.939483
-0.7122,53.9394
-0.711917,53.93925
-0.711783,53.93905
-0.7118,53.938817
-0.711967,53.938667
-0.712217,53.938533
-0.712567,53.938433
-0.712933,53.93845
-0.7133,53.938567
-0.713583,53.93875
-0.71375,53.939
4个回答

有因变量吗?

Excel 中的趋势线来自变量“lat”对变量“lon”的回归。当您不指定因变量时,可以得到您所谓的“常识线” ,并平等对待纬度和经度。后者可以通过应用PCA获得。特别是,它是这些变量的协方差矩阵的特征向量之一。您可以将其视为一条最小化从任何给定$(x_i,y_i)$点到一条线本身的最短距离的线,即您绘制一条线的垂线,并最小化每个观察值的总和。

在此处输入图像描述

以下是你如何在 R 中做到这一点:

> para <- read.csv("para.csv")
> plot(para)
> 
> # run PCA
> pZ=prcomp(para,rank.=1)
> # look at 1st PC
> pZ$rotation
           PC1
lon 0.09504313
lat 0.99547316
> 
> colMeans(para) # PCA was centered
       lon        lat 
-0.7129371 53.9368720 
> # recover the data from 1st PC
> pc1=t(pZ$rotation %*% t(pZ$x) )
> # center and show
> lines(pc1 + t(t(rep(1,123))) %*% c)

当您了解 Excel 回归中的变量不相等时,您从 Excel 获得的趋势线与 PCA 的特征向量一样是常识。在这里,您正在最小化从$y_i$$y(x_i)$的垂直距离,其中 y 轴是纬度,x 轴是经度。

是否要平等对待变量取决于目标。这不是数据的内在质量。您必须选择正确的统计工具来分析数据,在这种情况下,请在回归和 PCA 之间进行选择。

一个没有被问到的问题的答案

那么,为什么在您的情况下,Excel 中的(回归)趋势线似乎不是适合您的情况的工具?原因是趋势线是对一个没有被问到的问题的答案。这就是为什么。

Excel 回归试图估计直线$lat=a+b \times lon$的参数。所以,第一个问题是纬度甚至不是经度的函数,严格来说(见帖子末尾的注释),它甚至不是主要问题。真正的麻烦是你甚至对滑翔伞的位置都不感兴趣,你对风感兴趣。

想象一下没有风。滑翔伞会一遍又一遍地绕同一个圆圈。趋势线会是什么?显然,它是一条水平线,它的斜率为零,但这并不意味着风是在水平方向吹的!

这是一个模拟图,当沿 y 轴有强风时,滑翔伞正在形成完美的圆圈。您可以看到线性回归$y\sim x$如何产生无意义的结果,即水平趋势线。实际上,它甚至有点负面,但并不重要。风向用红线表示:

在此处输入图像描述

用于模拟的 R 代码:

t=1:123
a=1 #1
b=0 #1/10
y=10*sin(t)+a*t
x=10*cos(t)+b*t

plot(x,y,xlim=c(-60,60))
xp=-60:60
lines(b*t,a*t,col='red')

model=lm(y~x)
lines(xp,xp*model$coefficients[2]+model$coefficients[1])

因此,风向显然与趋势线完全不一致。当然,它们是相互关联的,但以一种非平凡的方式。因此,我声明 Excel 趋势线是对某些问题的回答,但不是您提出的问题。

为什么选择 PCA?

正如您所指出的,滑翔伞的运动至少有两个组成部分:风的漂移和滑翔伞控制的圆周运动。当您连接绘图上的点时,可以清楚地看到这一点:

在此处输入图像描述

一方面,圆周运动对你来说真的很烦人:你对风很感兴趣。虽然另一方面,你不观察风速,你只观察滑翔伞。因此,您的目标是从可观测滑翔伞的位置读数中推断出不可观测的风。这正是因子分析和 PCA 等工具有用的情况。

PCA 的目的是通过分析输出中的相关性来分离确定多个输出的几个因素。当输出与线性因素相关联时它是有效的,这恰好是您的数据中的情况:风漂移只是添加到圆周运动的坐标中,这就是 PCA 在这里工作的原因。

PCA 设置

因此,我们确定 PCA 应该有机会,但我们将如何实际设置它?让我们从添加第三个变量时间开始。假设采样频率恒定,我们将为每个 123 次观测分配时间 1 到 123。以下是数据的 3D 图的样子,揭示了它的螺旋结构:

在此处输入图像描述

下图将滑翔伞的假想旋转中心显示为棕色圆圈。您可以看到它是如何随风在纬度平面上漂移的,而带有蓝点的滑翔伞则在它周围盘旋。时间在纵轴上。我将旋转中心连接到仅显示前两个圆圈的滑翔伞的相应位置。

在此处输入图像描述

对应的R代码:

library(plotly)       

 para <- read.csv("para.csv")
 n=24

   para$t=1:123 # add time parameter

   # run PCA
     pZ3=prcomp(para)
     c3=colMeans(para) # PCA was centered
     # look at PCs in columns
       pZ3$rotation

       # get the imaginary center of rotation 
       pc31=t(pZ3$rotation[,1] %*% t(pZ3$x[,1]) )
     eye = pc31 + t(t(rep(1,123))) %*% c3
     eyedata = data.frame(eye)

     p = plot_ly(x=para[1:n,1],y=para[1:n,2],z=para[1:n,3],mode="lines+markers",type="scatter3d") %>%
       layout(showlegend=FALSE,scene=list(xaxis = list(title = 'lat'),yaxis = list(title = 'lon'),zaxis = list(title = 't'))) %>%
     add_trace(x=eyedata[1:n,1],y=eyedata[1:n,2],z=eyedata[1:n,3],mode="markers",type="scatter3d") 
     for( i in 1:n){
         p = add_trace(p,x=c(eyedata[i,1],para[i,1]),y=c(eyedata[i,2],para[i,2]),z=c(eyedata[i,3],para[i,3]),color="black",mode="lines",type="scatter3d")
       }

subplot(p)

滑翔伞旋转中心的漂移主要是由风引起的,漂移的路径和速度与风的方向和速度相关,是不可观测的关注变量。这是投影到纬度平面时漂移的样子:

在此处输入图像描述

PCA 回归

所以,早些时候我们确定常规线性回归在这里似乎效果不佳。我们还找到了原因:因为它没有反映底层过程,因为滑翔伞的运动是高度非线性的。它是圆周运动和线性漂移的结合。我们还讨论了在这种情况下因素分析可能会有所帮助。以下是对这些数据建模的一种可能方法的概述:PCA 回归但首先我将向您展示 PCA 回归拟合曲线:

在此处输入图像描述

这已如下获得。如前所述,在具有额外列 t=1:123 的数据集上运行 PCA。你得到三个主要成分。第一个只是 t。第二个对应于 lon 列,第三个对应于 lat 列。

我将后两个主成分拟合到$a\sin(\omega t+\varphi)$形式的变量中,其中$\omega,\varphi$是从分量的光谱分析中提取的。它们恰好具有相同的频率但不同的相位,考虑到圆周运动,这并不奇怪。

就是这样。要获得拟合值,您可以通过将 PCA 旋转矩阵的转置插入到预测的主成分中来从拟合成分中恢复数据。我上面的 R 代码显示了该过程的一部分,其余的你可以很容易地弄清楚。

结论

有趣的是,当涉及到底层过程稳定且输入通过线​​性(或线性化)关系转化为输出的物理现象时,PCA 和其他简单工具的功能有多么强大。所以在我们的例子中,圆周运动是非常非线性的,但我们很容易通过在时间 t 参数上使用正弦/余弦函数对其进行线性化。如您所见,我的绘图仅用几行 R 代码生成。

回归模型应该反映底层过程,那么只有你可以期望它的参数是有意义的。如果这是在风中飘荡的滑翔伞,那么像原始问题中的简单散点图将隐藏过程的时间结构。

此外,Excel 回归是一种横截面分析,其中线性回归效果最好,而您的数据是时间序列过程,其中观察按时间排序。时间序列分析必须在这里应用,它是在 PCA 回归中完成的。

函数注释

由于滑翔伞是在做圆周运动,所以会有多个纬度对应一个经度。在数学中,函数$y=f(x)$将值$x $映射到单个值$y$这是多对一的关系,这意味着多个$x$可能对应于$y$,但不是多个$y$对应于单个$x$这就是为什么$lat=f(lon)$严格来说不是函数的原因。

答案可能与您如何在心理上判断与回归线的距离有关。标准(类型 1)回归最小化平方误差,其中误差是根据到直线的垂直距离计算的。

类型 2 回归可能更类似于您对最佳线的判断。其中,最小化的平方误差是与直线的垂直距离这种差异有许多后果。一个重要的问题是,如果您在绘图中交换 X 轴和 Y 轴并重新拟合线,您将在类型 1 回归的变量之间获得不同的关系。对于类型 2 回归,关系保持不变。

我的印象是,关于在哪里使用 Type 1 与 Type 2 回归存在相当多的争论,因此我建议在决定应用哪一个之前仔细阅读差异。在一个轴要么通过实验控制,要么至少以比另一轴小得多的误差测量的情况下,通常建议使用 1 型回归。如果不满足这些条件,则类型 1 回归将使斜率偏向 0,因此建议使用类型 2 回归。然而,由于两个轴上有足够的噪声,2 型回归显然倾向于将它们偏向 1。Warton等人。(2006 年)和史密斯(2009 年)是理解辩论的好来源。

另请注意,在类型 2 回归的广泛类别(长轴、缩减长轴和标准长轴回归)中有几种细微不同的方法,并且关于具体方法的术语是不一致的。

Warton、DI、IJ Wright、DS Falster 和 M. Westoby。2006.异速生长的双变量线拟合方法。生物学。修订版81:259–291。doi:10.1017/S1464793106007007

Smith, RJ 2009。关于使用和误用减小的主轴进行线拟合。是。J.物理。人类警察。140:476–486。doi:10.1002/ajpa.21090


编辑

@amoeba 指出我上面所说的类型 2 回归也称为正交回归;这可能是更合适的术语。正如我上面所说,这方面的术语不一致,需要格外小心。

Excel 试图回答的问题是:“假设 y 取决于 x,哪一行预测 y 最好”。答案是,由于 y 的巨大变化,没有哪一行可能特别好,而 Excel 显示的内容是你能做的最好的。

如果您采用建议的红线,并继续向上直到 x = -0.714 和 x = -0.712,您会发现它的值与图表相差甚远,并且与相应的 y 值相差很大.

Excel 回答的问题不是“哪条线最接近数据点”,而是“哪条线最适合从 x 值预测 y 值”,并且它正确地做到了这一点。

我不想在其他答案中添加任何内容,但我想说的是,您被错误的术语误入歧途,特别是在某些统计课程中使用的术语“最佳拟合线”。

直观地说,“最合适的线”看起来就像你的红线。但是 Excel 生成的线并不是“最合适的线”;它甚至没有试图成为。这条线回答了这个问题:给定 x 的值,我对 y 的最佳预测是什么?或者,每个 x 值的平均 y 值是多少?

注意 x 和 y 之间的不对称;使用“最佳拟合线”这个名称掩盖了这一点。Excel 对“趋势线”的使用也是如此。

以下链接解释得很好:

https://www.stat.berkeley.edu/~stark/SticiGui/Text/regression.htm

您可能想要更类似于上面答案中所谓的“类型 2”,或伯克利统计课程页面上的“SD Line”。