有因变量吗?
Excel中的趋势线来自因变量“ lat”对自变量“ lon” 的回归。当您不指定因变量,并且平等地对待纬度和经度时,就可以获得所谓的“常识线” 。后者可以通过应用PCA获得。特别是,它是这些变量协方差矩阵的特征向量之一。您可以将其视为一条直线,以最小化任何给定点到直线本身的最短距离,即,绘制一条垂直于直线的线,并最小化每个观测值的总和。(xi,yi)
这是您在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轴是纬度,x轴是经度。 y (x i)yiy(xi)
是否要平等对待变量取决于目标。这不是数据的固有质量。您必须选择正确的统计工具来分析数据,在这种情况下,请在回归和PCA之间进行选择。
对未提出的问题的答案
那么,为什么在您的情况下,Excel中的(回归)趋势线似乎不适合您的情况?原因是趋势线是对未提出问题的答案。这就是为什么。
Excel回归试图估算线的参数。因此,第一个问题是,严格地说,纬度甚至不是经度的函数(请参阅文章末尾的注释),甚至不是主要问题。真正的麻烦是,您甚至对滑翔伞的位置都不感兴趣,而对风感兴趣。lat=a+b×lon
想象没有风。滑翔伞将一遍又一遍地绕同一圈。趋势线是什么?显然,这将是一条水平的水平线,其斜率将为零,但这并不意味着风在水平方向上吹!
这是一个模拟图,用于说明y轴上有强风而滑翔伞正在形成完美的圆。您可以看到线性回归如何产生无意义的结果,即水平趋势线。实际上,它甚至略有负面,但意义不大。风向以红线显示:y∼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图看起来像数据的样子,揭示了其螺旋结构:
下一个图将滑翔伞的假想旋转中心显示为棕色圆圈。您会看到它在风中在Latlon平面上如何漂移,同时带有蓝色圆点的滑翔伞在它周围盘旋。时间在垂直轴上。我将旋转中心连接到滑翔伞的相应位置,仅显示前两个圆圈。
相应的R代码:
library(plotly)
para <- read.csv("C:/Users/akuketay/Downloads/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列。
我将后两个主要成分拟合为形式的变量,其中是从成分的频谱分析中提取的。它们碰巧具有相同的频率但相位不同,考虑到圆周运动,这不足为奇。ω ,φasin(ωt+φ)ω,φ
而已。要获得拟合值,您可以通过将PCA旋转矩阵的转置插入预测的主成分来从拟合的组件中恢复数据。我上面的R代码显示了该过程的一部分,其余的您可以轻松弄清楚。
结论
有趣的是,当涉及到基本过程稳定且输入通过线性(或线性化)关系转换为输出的物理现象时,PCA和其他简单工具的功能多么强大。因此,在我们的情况下,圆周运动是非常非线性的,但是我们可以通过在时间t参数上使用正弦/余弦函数轻松地将其线性化。如您所见,我的绘图仅用几行R代码生成。
回归模型应该反映基础过程,然后只有您可以期望其参数有意义。如果这是一个随风飘扬的滑翔伞,那么像原始问题中那样的简单散点图将隐藏该过程的时间结构。
同样,Excel回归是一种横截面分析,对于该分析,线性回归最有效,而您的数据是时间序列过程,其中观察按时间排序。时间序列分析必须在这里应用,并且它是在PCA回归中完成的。
功能说明
由于滑翔伞正在绕圈,因此将有多个纬度对应于一个经度。在数学中,函数将值映射到单个值。这是多对一的关系,这意味着多个可能与对应,但没有多个与一个对应。严格来讲,这就是为什么不是函数。x y x y y x l a t = f (l o n )y=f(x)xyxyyxlat=f(lon)