Чи є залежна змінна?
(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)
yiy(xi)
Хочете ви ставитися до змінних однаково чи ні, залежить від мети. Це не властива якість даних. Ви повинні вибрати правильний статистичний інструмент для аналізу даних, в цьому випадку вибирайте між регресією та PCA.
Відповідь на запитання, яке не задавали
Отже, чому у вашому випадку лінійка (регресія) тенденції в Excel не здається підходящим інструментом для вашого випадку? Причина в тому, що лінія тренду - це відповідь на питання, яке не було задано. Ось чому.
lat=a+b×lon
Уявіть, що вітру не було. Параплан робив би один і той же коло знову і знову. Якою була б лінія тренду? Очевидно, це була б плоска горизонтальна лінія, її нахил був би нульовий, але це не означає, що вітер дме в горизонтальному напрямку!
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 повинен мати шанс тут, але як ми насправді його встановимо? Почнемо з додавання третьої змінної, часу. Ми будемо призначати час від 1 до 123 кожному 123 спостереженню, припускаючи постійну частоту вибірки. Ось як виглядає 3D-графік даних, розкриваючи його спіральну структуру:
Наступний сюжет показує уявний центр обертання параплана як коричневі кола. Ви можете бачити, як він летить на площині lat-lon з вітром, в той час як навколо нього кружляє параплан, показаний синьою крапкою. Час на вертикальній осі. Я підключив центр обертання до відповідного місця параплана, показуючи лише перші два кола.
Відповідний код 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)
Дрейф центру обертання параплана спричиняється, головним чином, вітром, а шлях і швидкість дрейфу співвідносяться з напрямком і швидкістю вітру, непомітними змінними, що цікавлять. Ось як виглядає дрейф при проектуванні на площину lat-lon:
Регресія PCA
Отже, раніше ми встановили, що звичайна лінійна регресія тут не працює дуже добре. Ми також зрозуміли, чому: оскільки він не відображає основний процес, тому що рух парапланера дуже нелінійний. Це поєднання кругового руху та лінійного дрейфу. Ми також обговорили, що в цій ситуації може бути корисним факторний аналіз. Ось окреслити один із можливих підходів до моделювання цих даних: регресія PCA . Але кулак я покажу вам PCA регресії обладнаних кривої:
Це було отримано наступним чином. Запустіть PCA на наборі даних, який має додатковий стовпець t = 1: 123, як обговорювалося раніше. Ви отримуєте три основні компоненти. Перший - просто t. Другий відповідає стовпцю lon, а третьому - стовпцю lat.
asin(ωt+φ)ω,φ
Це воно. Щоб отримати встановлені значення, ви відновите дані з пристосованих компонентів, підключивши транспозицію матриці обертання PCA до передбачуваних основних компонентів. Мій R-код вище показує частини процедури, а решту ви можете легко зрозуміти.
Висновок
Цікаво побачити, наскільки потужним є PCA та інші прості інструменти, коли мова йде про фізичні явища, де основні процеси стабільні, а входи перетворюються на виходи за допомогою лінійних (або лінеаризованих) зв’язків. Отже, у нашому випадку круговий рух дуже нелінійний, але ми його легко лінеаризуємо, використовуючи функції синус / косинус за параметром time t. Мої сюжети були зроблені з кількома рядками коду R, як ви бачили.
Модель регресії повинна відображати основний процес, тоді тільки ви можете розраховувати, що її параметри мають значення. Якщо це параплан, який пливе на вітрі, то простий сюжет розсіювання, як у первісному питанні, приховає структуру часу процесу.
Також регресія Excel була аналізом поперечного перерізу, для якого лінійна регресія найкраще працює, тоді як ваші дані - процес часових рядів, де спостереження впорядковані в часі. Тут слід застосувати аналіз часових рядів, і це було зроблено в регресії PCA.
Примітки до функції
y=f(x)xyxyyxlat=f(lon)