Я хочу рассчитать тренд каждого дня за несколько лет.Например, тренд 1 мая с 2000 по 2010 год. Вот мой тест-фрейм данных:
library(lubridate)
date_list = seq(ymd('2000-01-15'),ymd('2010-09-18'),by='day')
testframe = data.frame(Date = date_list)
testframe$Day = substr(testframe$Date, start = 6, stop = 10)
testframe$V1 = rnorm(3900)
testframe$V2 = rnorm(3900)
testframe$V3 = seq(from = 10, to = 25, length.out = 3900)
testframe$V4 = seq(from = 5, to = 45, length.out = 3900)
V1 до V4 - значения.В тестовом фрейме $ Day я уже вырезал день, чтобы использовать его для группировки строк.Я знаю, что aggregate
хорош для группировки таким образом, но я совершенно не понимаю, как совместить это с линейной моделью.
В конце я хотел бы иметь фрейм данных, в котором есть столбец, который содержит каждый день (без года курса), и столбцы, которые содержат тренд / наклон значений от V1 до V4.
Есть идеи?
ОБНОВЛЕНИЕ:
Чтобы сделать это более наглядно.Я хочу и вывод, который выглядит следующим образом (тренды являются случайными)
Day V1 Trend V2 Trend V3 Trend V4 Trend
01-01 +0.3 +0.4 +0.9 +0.5
01-02 +0.5 +0.3 +0.8 +0.4
01-03 -0.1 -0.2 +1.0 -0.3
01-04 +0.7 -0.7 +0.9 +0.9
......
......
12-30 -0.3 -0.4 +0.5 +0.8
12-31 -0.7 -0.3 +0.6 +0.9
p-значения, Intercept и все было бы также здорово иметь.
Я нашел этот пример, но он все ещене в выводе, который я хочу иметь:
#Add year for lm
testframe$Year = as.numeric(format(testframe$Date,'%Y'))
library(plyr)
# Break up d by state, then fit the specified model to each piece and
# return a list
models <- dlply(testframe, "Day", function(df)
lm(Year ~ V4, data = df))
# Apply coef to each model and return a data frame
ldply(models, coef)
# Print the summary of each model
l_ply(models, summary, .print = TRUE)