2016-12-14 5 views
1

У меня есть набор временных рядов с 2 столбцами: x - это «ежечасные» данные о непрерывной температуре, а y - периодически отбираемые данные ответа (периодические образцы, сделанные в 5 утра, 2 вечера, 8 вечера каждый день) в течение пары недель.Вперед во время rollapply

Я хотел бы сделать 2 лаг подходы к анализу данных

1) построить все мои данные у (постоянные) против более отсроченных х данных (данные сдвига х от 0-24 часов в 1 часы шагов), т.е. x при 6pm против y в 6 часов; x в 5 вечера по сравнению с y в 18:00 ...... x (5pm в предыдущий день) vs y (6pm)

2) То же, что и 1), но кумулятивные сдвиги, т.е. «назад по времени», суммарное отставание окна 0 : 24 с шагом 1 для данных x и протестировать его по данным y , т.е. x в 18:00 против y в 18:00; x at (avg 5pm & 18:00) vs y в 18:00 ...... x (среднее значение с 18:00 до 17:00 в предыдущий день) против y (6 вечера)

Я хочу построить линейную модель (lm) y "vs" сдвинуто x "для каждого сценария запаздывания (0 - 24) и составить таблицу со столбцом для числа лагов, p-значение lm; и Adj. R2 из lm), поэтому я могу видеть, какое отставание и суммарное среднее отставание в «x» лучше всего объясняют y-данные.

По существу это то же самое, что и функции «cummean» или «rollapply», но работают в обратном направлении, но я не мог найти что-либо в R, которое делает это. Перевертывание данных X не работает, так как порядок данных должен поддерживаться, так как мне нужно отставание для x в течение нескольких y's

Я бы предположил, что для цикла будет использоваться цикл 'for' для всех данных в каждый лаг с «я» является отставание

один проход с 0 лаг будет выглядеть следующим образом:

#Creating dummy data 

x<- zoo(c(10,10.5,10.5,11,11.5,12,12.5,12,12,12.5,13,12.5,12,12,11.5,10.5), as.Date(1:16)) 
y<- zoo(c(rep("NA",3),40,rep("NA",3),45,rep("NA",3),50,rep("NA",3),40), as.Date(1:16)) 
z<-merge(x, y, all = FALSE) 
z 

reslt<-lm(z$y~z$x) 
a<-summary(reslt)$coefficients[2,4] 
b<-summary(reslt)$adj.r.squared 

ResltTable<-c(a,b) 
colnames(ResltTable)<-c("p-value","Adj. R^2") 

Спасибо!

ответ

0

Это будет регрессировать y против значения x i периодов назад итерации по i. Обратите внимание, что в вопросе «NA» используется, где NA должно использоваться. Также вопрос относится к почасовым, но предоставляет ежедневные данные, поэтому мы показываем ежедневные задержки. dyn$lm работает lm добавление автоматического выравнивания. (Обратите внимание, что в CRAN вчера была выпущена новая версия dyn, которая касается изменений в R в версии для разработки R.) Мы выполнили это для lags 0, 1, 2, ..., 10, но если у вас есть больше данных, вы может запустить его до более высоких значений. Если вы хотите отстать в обратном направлении, замените -i на i в lag. Если вы хотите использовать все лаги от 0 до i, используйте lag(x, 0:-i) и соответствующим образом скорректируйте заявление cbind.

library(dyn) # also loads zoo 


x <- zoo(c(10,10.5,10.5,11,11.5,12,12.5,12,12,12.5,13,12.5,12,12,11.5,10.5), as.Date(1:16)) 
y <- zoo(c(rep(NA,3),40,rep(NA,3),45,rep(NA,3),50,rep(NA,3),40), as.Date(1:16)) 
z < -merge(x, y, all = FALSE) 
z 


k <- 10 # highest lag to consider 
tab <- t(sapply(0:10, function(i) { 
    fm <- dyn$lm(y ~ lag(x, -i), z) 
    s <- summary(fm) 
    cbind(i, coef(fm)[1], coef(fm)[2], coef(s)[2, 4], s$adj.r.squared) 
})) 
colnames(tab) <- c("Lag", "Intercept", "Slope", "P Value", "Adj R Sq") 
tab 

дает:

> tab 
     Lag Intercept  Slope P Value Adj R Sq 
[1,] 0 -13.750000 5.0000000 0.04653741 0.8636364 
[2,] 1 -2.542373 3.8983051 0.09717103 0.7226502 
[3,] 2 -1.944444 3.8888889 0.29647353 0.2424242 
[4,] 3 14.651163 2.5581395 0.49421946 -0.1162791 
[5,] 4 70.357143 -2.1428571 0.78770438 -0.7857143 
[6,] 5 53.571429 -0.7142857 0.87896228 -0.9285714 
[7,] 6 58.461538 -1.1538462 0.84557904 -0.8846154 
[8,] 7 57.884615 -1.1538462 0.84557904 -0.8846154 
[9,] 8 160.000000 -10.0000000  NaN  NaN 
[10,] 9 102.500000 -5.0000000  NaN  NaN 
[11,] 10 120.000000 -6.6666667  NaN  NaN 

 Смежные вопросы

  • Нет связанных вопросов^_^