Czy istnieje zmienna zależna?
Linia trendu w programie Excel pochodzi z regresji zmiennej zależnej „lat” na zmiennej niezależnej „lon”. To, co nazywasz „linią zdrowego rozsądku”, można uzyskać, gdy nie wyznaczysz zmiennej zależnej i traktujesz jednocześnie szerokość i długość geograficzną. To ostatnie można uzyskać przez zastosowanie PCA . W szczególności jest to jeden z wektorów własnych macierzy kowariancji tych zmiennych. Możesz myśleć o tym jak o linii minimalizującej najkrótszą odległość od danego punktu do samej linii, tzn. Rysujesz prostopadle do linii i minimalizujesz sumę tych dla każdej obserwacji.(xi,yi)
Oto jak możesz to zrobić w 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)
Linia trendu uzyskana z Excela jest tak samo zdrowa, jak wektor własny z PCA, gdy zrozumiesz, że w regresji Excel zmienne nie są równe. Tutaj minimalizujesz pionową odległość od do , gdzie oś y jest szerokością geograficzną, a oś x jest długością geograficzną. y ( x i )yiy(xi)
To, czy chcesz traktować zmienne jednakowo, zależy od celu. To nie jest nieodłączna jakość danych. Musisz wybrać odpowiednie narzędzie statystyczne do analizy danych, w tym przypadku wybierz między regresją a PCA.
Odpowiedź na pytanie, które nie zostało zadane
Dlaczego więc w twoim przypadku linia trendu (regresja) w programie Excel nie wydaje się odpowiednim narzędziem dla twojego przypadku? Powodem jest to, że linia trendu jest odpowiedzią na pytanie, które nie zostało zadane. Dlatego.
Regresja Excela próbuje oszacować parametry linii . Tak więc pierwszym problemem jest to, że szerokość geograficzna nie jest nawet funkcją długości geograficznej, mówiąc ściśle (zobacz notatkę na końcu postu), i nawet nie jest to główny problem. Prawdziwy problem polega na tym, że nie jesteś nawet zainteresowany lokalizacją skrzydła, jesteś zainteresowany wiatrem.lat=a+b×lon
Wyobraź sobie, że nie było wiatru. Paralotniarz krążyłby ciągle w kółko. Jaka byłaby linia trendu? Oczywiście byłaby to płaska linia pozioma, jej nachylenie wynosiłoby zero, ale to nie znaczy, że wiatr wieje w kierunku poziomym!
Oto symulowana fabuła na wypadek silnego wiatru wzdłuż osi y, podczas gdy paralotnia tworzy idealne koła. Możesz zobaczyć, w jaki sposób regresja liniowa daje bezsensowny wynik, poziomą linię trendu. W rzeczywistości jest nawet nieco negatywny, ale nie znaczący. Kierunek wiatru jest pokazany czerwoną linią:y∼x
Kod R do symulacji:
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])
Tak więc kierunek wiatru wyraźnie nie jest wcale zgodny z linią trendu. Są ze sobą powiązane, ale w niebanalny sposób. Stąd moje stwierdzenie, że linia trendu Excela jest odpowiedzią na pewne pytanie, ale nie na to, o które pytałeś.
Dlaczego PCA
Jak zauważyłeś, istnieją co najmniej dwa elementy ruchu paralotni: dryf z wiatrem i ruch okrężny kontrolowany przez paralotnię. Widać to wyraźnie po połączeniu kropek na wykresie:
Z jednej strony ruch okrężny jest dla Ciebie naprawdę uciążliwy: interesuje Cię wiatr. Z drugiej strony nie obserwujesz prędkości wiatru, obserwujesz jedynie skrzydło. Twoim celem jest zatem wywnioskowanie niewidzialnego wiatru z odczytów lokalizacji obserwowalnych skrzydeł. Właśnie w takiej sytuacji przydatne mogą być narzędzia takie jak analiza czynnikowa i PCA.
Celem PCA jest wyodrębnienie kilku czynników, które określają wiele wyników, poprzez analizę korelacji w wynikach. Jest skuteczny, gdy dane wyjściowe są powiązane z czynnikami liniowymi, co zdarza się w danych: dryf wiatru po prostu dodaje współrzędne ruchu kołowego, dlatego PCA tutaj działa.
Konfiguracja PCA
Ustaliliśmy więc, że PCA powinna mieć tutaj szansę, ale jak to właściwie skonfigurować? Zacznijmy od dodania trzeciej zmiennej, time. Przydzielimy czas od 1 do 123 każdej obserwacji 123, zakładając stałą częstotliwość próbkowania. Oto jak wygląda wykres 3D danych, ukazując jego spiralną strukturę:
Kolejna fabuła pokazuje wyimaginowany środek obrotu skrzydła w postaci brązowych kół. Możesz zobaczyć, jak unosi się na płaszczyźnie lat-lon wraz z wiatrem, podczas gdy wokół niego krąży skrzydło pokazane z niebieską kropką. Czas jest na osi pionowej. Połączyłem środek obrotu z odpowiednią lokalizacją paralotni pokazującej tylko dwa pierwsze okręgi.
Odpowiedni kod 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)
Dryft środka obrotu skrzydła jest spowodowany głównie przez wiatr, a ścieżka i prędkość dryfu jest skorelowana z kierunkiem i prędkością wiatru, nieobserwowalnymi zmiennymi będącymi przedmiotem zainteresowania. Oto jak dryf wygląda podczas rzutowania na płaszczyznę lat-lon:
Regresja PCA
Wcześniej ustaliliśmy, że regresja liniowa nie wydaje się tutaj dobrze działać. Doszliśmy do wniosku, dlaczego: ponieważ nie odzwierciedla on leżącego u podstaw procesu, ponieważ ruch skrzydeł jest wysoce nieliniowy. Jest to połączenie ruchu kołowego i dryfu liniowego. Omówiliśmy również, że w tej sytuacji pomocna może być analiza czynnikowa. Oto zarys jednego z możliwych podejść do modelowania tych danych: regresja PCA . Ale najpierw pokażę ci dopasowaną krzywą regresji PCA :
Zostało to uzyskane w następujący sposób. Uruchom PCA na zestawie danych, który ma dodatkową kolumnę t = 1: 123, jak omówiono wcześniej. Otrzymasz trzy główne elementy. Pierwszy to po prostu t. Drugi odpowiada kolumnie lon, a trzeci do kolumny lat.
Dopasowuję dwa ostatnie główne składniki do zmiennej w postaci , gdzie są wyodrębniane z analizy spektralnej składników. Zdarza się, że mają tę samą częstotliwość, ale różne fazy, co nie jest zaskakujące, biorąc pod uwagę ruch kołowy.ω , φasin(ωt+φ)ω,φ
Otóż to. Aby uzyskać dopasowane wartości, odzyskujesz dane z dopasowanych komponentów, podłączając transpozycję macierzy obrotu PCA do przewidywanych głównych komponentów. Mój kod R powyżej pokazuje części procedury, a resztę możesz łatwo zrozumieć.
Wniosek
Ciekawie jest zobaczyć, jak potężna jest PCA i inne proste narzędzia, jeśli chodzi o zjawiska fizyczne, w których procesy leżące u ich podstaw są stabilne, a dane wejściowe przekładają się na dane wyjściowe za pomocą zależności liniowych (lub linearyzowanych). Zatem w naszym przypadku ruch kołowy jest bardzo nieliniowy, ale łatwo zlinearyzowaliśmy go za pomocą funkcji sinus / cosinus na parametrze czasu t. Moje wykresy zostały wyprodukowane z kilkoma liniami kodu R, jak widzieliście.
Model regresji powinien odzwierciedlać proces leżący u podstaw, wtedy tylko Ty możesz oczekiwać, że jego parametry są znaczące. Jeśli jest to paralotnia dryfująca na wietrze, wówczas prosty wykres rozproszenia, taki jak w pierwotnym pytaniu, ukryje strukturę czasową procesu.
Również regresja Excela była analizą przekrojową, dla której regresja liniowa działa najlepiej, podczas gdy dane są procesem szeregów czasowych, w którym obserwacje są uporządkowane w czasie. W tym przypadku należy zastosować analizę szeregów czasowych i przeprowadzono ją w regresji PCA.
Uwagi na temat funkcji
Ponieważ paralotnia tworzy koła, będzie wiele szerokości geograficznych odpowiadających jednej długości geograficznej. W matematyce funkcja odwzorowuje wartość na pojedynczą wartość . Jest to relacja wiele do jednego, co oznacza, że wielokrotność może odpowiadać , ale nie wielokrotność odpowiada pojedynczemu . Właśnie dlatego nie jest funkcją, ściśle mówiąc.x y x y y x l a t = f ( l o n )y=f(x)xyxyyxlat=f(lon)