¿Hay una variable dependiente?
(xi,yi)
Así es como puedes hacerlo en 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)
Si desea tratar las variables por igual o no depende del objetivo. No es la calidad inherente de los datos. Debe elegir la herramienta estadística adecuada para analizar los datos, en este caso, elija entre la regresión y PCA.
Una respuesta a una pregunta que no se hizo
Entonces, ¿por qué en su caso una línea de tendencia (de regresión) en Excel no parece ser una herramienta adecuada para su caso? La razón es que la línea de tendencia es una respuesta a una pregunta que no se hizo. Este es el por qué.
lat=a+b×lon
Imagina que no hubiera viento. Un parapente estaría haciendo el mismo círculo una y otra vez. ¿Cuál sería la línea de tendencia? Obviamente, sería una línea horizontal plana, su pendiente sería cero, ¡pero no significa que el viento esté soplando en dirección horizontal!
y∼x
Código R para la simulación:
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])
Entonces, la dirección del viento claramente no está alineada con la línea de tendencia. Están vinculados, por supuesto, pero de una manera no trivial. Por lo tanto, mi afirmación de que la línea de tendencia de Excel es una respuesta a alguna pregunta, pero no la que usted hizo.
¿Por qué PCA?
Como notó, hay al menos dos componentes del movimiento de un parapente: la deriva con un viento y un movimiento circular controlado por un parapente. Esto se ve claramente cuando conecta los puntos en su trama:
Por un lado, el movimiento circular es realmente una molestia para ti: estás interesado en el viento. Aunque, por otro lado, no observas la velocidad del viento, solo observas el parapente. Por lo tanto, su objetivo es inferir el viento no observable a partir de la lectura de ubicación del parapente observable. Esta es exactamente la situación en la que herramientas como el análisis factorial y PCA pueden ser útiles.
El objetivo de PCA es aislar algunos factores que determinan las salidas múltiples mediante el análisis de las correlaciones en las salidas. Es efectivo cuando la salida está vinculada a factores linealmente, como sucede en los datos: la deriva del viento simplemente se suma a las coordenadas del movimiento circular, por eso PCA está trabajando aquí.
Configuración de PCA
Entonces, establecimos que PCA debería tener una oportunidad aquí, pero ¿cómo lo configuraremos realmente? Comencemos agregando una tercera variable, el tiempo. Vamos a asignar tiempo de 1 a 123 a cada 123 observación, suponiendo la frecuencia de muestreo constante. Así es como se ve el diagrama 3D de los datos, revelando su estructura espiral:
La siguiente gráfica muestra el centro imaginario de rotación de un parapente como círculos marrones. Puedes ver cómo se desplaza en el plano lat-lon con el viento, mientras que el parapente que se muestra con un punto azul está dando vueltas alrededor de él. El tiempo está en eje vertical. Conecté el centro de rotación a la ubicación correspondiente de un parapente que muestra solo los dos primeros círculos.
El código R correspondiente:
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)
La deriva del centro de rotación del parapente es causada principalmente por el viento, y la trayectoria y la velocidad de la deriva se correlacionan con la dirección y la velocidad del viento, variables de interés no observables. Así es como se ve la deriva cuando se proyecta al plano lat-lon:
Regresión PCA
Entonces, anteriormente establecimos que la regresión lineal regular no parece funcionar muy bien aquí. También descubrimos por qué: porque no refleja el proceso subyacente, porque el movimiento del parapente es altamente no lineal. Es una combinación de movimiento circular y una deriva lineal. También discutimos que en esta situación el análisis factorial podría ser útil. Aquí hay un resumen de un posible enfoque para modelar estos datos: la regresión de PCA . Pero puño, te mostraré la curva ajustada de regresión de PCA :
Esto se ha obtenido de la siguiente manera. Ejecute PCA en el conjunto de datos que tiene una columna adicional t = 1: 123, como se discutió anteriormente. Obtienes tres componentes principales. El primero es simplemente t. El segundo corresponde a la columna lon, y el tercero a la columna lat.
asin(ωt+φ)ω,φ
Eso es. Para obtener los valores ajustados, recupere los datos de los componentes ajustados conectando la transposición de la matriz de rotación de PCA a los componentes principales pronosticados. Mi código R anterior muestra partes del procedimiento, y el resto puede resolverlo fácilmente.
Conclusión
Es interesante ver cuán poderoso es PCA y otras herramientas simples cuando se trata de fenómenos físicos donde los procesos subyacentes son estables y las entradas se traducen en salidas a través de relaciones lineales (o linealizadas). Entonces, en nuestro caso, el movimiento circular es muy no lineal, pero lo linealizamos fácilmente mediante el uso de funciones seno / coseno en un parámetro de tiempo t. Mis tramas se produjeron con solo unas pocas líneas de código R como viste.
El modelo de regresión debe reflejar el proceso subyacente, entonces solo usted puede esperar que sus parámetros sean significativos. Si se trata de un parapente a la deriva en el viento, entonces un diagrama de dispersión simple como en la pregunta original ocultará la estructura temporal del proceso.
También la regresión de Excel fue un análisis transversal, para el cual la regresión lineal funciona mejor, mientras que sus datos son un proceso de series de tiempo, donde las observaciones se ordenan a tiempo. El análisis de series de tiempo debe aplicarse aquí, y se realizó en regresión PCA.
Notas sobre una función
y=f(x)xyxyyxlat=f(lon)