Есть ли зависимая переменная?
Линия тренда в Excel основана на регрессии зависимой переменной «lat» на независимую переменную «lon». То, что вы называете «линией здравого смысла», можно получить, если вы не назначите зависимую переменную и одинаково относитесь к широте и долготе. Последний может быть получен путем применения PCA . В частности, это один из собственных векторов ковариационной матрицы этих переменных. Вы можете думать об этом как о линии, минимизирующей кратчайшее расстояние от любой данной точки до самой линии, т.е. вы рисуете перпендикуляр к линии и минимизируете сумму этих значений для каждого наблюдения.( хя, уя)
Вот как вы можете сделать это в 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)
YяY( хя)
Хотите ли вы относиться к переменным одинаково или нет, зависит от цели. Это не присущее качество данных. Вы должны выбрать правильный статистический инструмент для анализа данных, в этом случае выберите регрессию и PCA.
Ответ на вопрос, который не был задан
Итак, почему в вашем случае (регрессия) линия тренда в Excel не кажется подходящим инструментом для вашего случая? Причина в том, что линия тренда - это ответ на вопрос, который не задавался. Вот почему
l a t = a + b × l o n
Представь, что ветра не было. Параплан будет делать один и тот же круг снова и снова. Какой будет линия тренда? Очевидно, что это будет плоская горизонтальная линия, ее наклон будет нулевым, но это не значит, что ветер дует в горизонтальном направлении!
Y∼ х
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 должен быть шанс, но как мы его на самом деле настроим? Давайте начнем с добавления третьей переменной, времени. Мы собираемся назначить время от 1 до 123 каждому 123 наблюдению, предполагая постоянную частоту дискретизации. Вот как выглядит трехмерный график данных, показывая его спиральную структуру:
Следующий график показывает воображаемый центр вращения параплана в виде коричневых кружков. Вы можете видеть, как он дует на лат-плоскость с ветром, в то время как параплан, показанный с синей точкой, кружит вокруг него. Время на вертикальной оси. Я подключил центр вращения к соответствующему месту на параплане, показывая только первые два круга.
Соответствующий код 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 регрессии оборудованных кривой:
Это было получено следующим образом. Запустите PCA для набора данных, который имеет дополнительный столбец t = 1: 123, как обсуждалось ранее. Вы получаете три основных компонента. Первый просто т. Второй соответствует столбцу lon, а третий - столбцу lat.
грех( ω т + φ )ω , φ
Вот и все. Чтобы получить подогнанные значения, вы восстанавливаете данные из подогнанных компонентов, вставляя транспонирование матрицы вращения PCA в предсказанные главные компоненты. Мой код R выше показывает части процедуры, а остальное вы можете легко понять.
Заключение
Интересно посмотреть, насколько мощным является PCA и другие простые инструменты, когда дело доходит до физических явлений, когда базовые процессы стабильны, а входы преобразуются в выходы посредством линейных (или линеаризованных) отношений. Таким образом, в нашем случае круговое движение очень нелинейное, но мы легко линеаризовали его, используя функции синуса / косинуса для параметра времени t. Мои графики были созданы с помощью нескольких строк кода R, как вы видели.
Модель регрессии должна отражать базовый процесс, тогда только вы можете ожидать, что ее параметры значимы. Если это параплан, дрейфующий на ветру, то простой график рассеяния, как в оригинальном вопросе, будет скрывать временную структуру процесса.
Кроме того, регрессия Excel была анализом поперечного сечения, для которого лучше всего работает линейная регрессия, в то время как ваши данные представляют собой процесс временных рядов, где наблюдения упорядочены по времени. Анализ временных рядов должен быть применен здесь, и это было сделано в регрессии PCA.
Примечания о функции
Y= ф( х )ИксYИксYYИксl a t = f( Л о п )