Я хочу рассчитать тренд каждого дня за несколько лет. Например, тенденция 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 являются значениями. В testframe$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)