Прогноз лесса для многих групп данных

Я использую loess для интерполяции данных между датами измерений с отдельных графиков. Я хочу получать ежедневное разрешение по всем 48 участкам за каждый год. Ниже приведен образец из моего набора данных:

dput(vi.sample)

структура (список (год = c (2012L, 2012L, 2012L, 2012L, 2012L, 2012L, 2012L, 2012L, 2012L, 2012L, 2012L, 2012L, 2012L, 2012L, 2012L, 2012L, 2012L, 2012L, 2012L, 2012L, 2012L, 2012L), julian = c (150L, ​​153L, 157L, 165L, 173L, 179L, 186L, 193L, 201L, 208L, 226L, 150L, ​​153L, 157L, 165L, 173L, 179L, 186L, 193L, 201L, 208L, 226L ), JDX = с (2,573770492, 2,625245902, 2,693879781, 2,831147541, 2,968415301, 3,07136612, 3,19147541, 3,311584699, 3,448852459, 3,568961749, 3,877814208, 2,573770492, 2,625245902, 2,693879781, 2,831147541, 2,968415301, 3,07136612, 3,19147541, 3,311584699, 3,448852459, 3,568961749, 3,877814208) , сайт = структура (c (1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L ), .Label = "east", class = "factor"), type = structure (c (1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = "b", class = "factor"), trt = structure (c (1L, 1L, 1L, 1L, 1L, 1L, 1L , 1 L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = "a", class = "factor"), plot = c (1L , 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), vi = c (0,41, 0,44, 0,52, 0,64, 0,66, 0,67, 0,64, 0,66, 0,61, 0,7, 0,7, 0,41, 0,45, 0,55, 0,61, 0,63, 0,66, 0,63, 0,64, 0,6, 0,7, 0,69)), .Names = c (" year "," julian "," jdx "," site "," type "," trt "," plot "," vi "), class =" data.frame ", row.names = c (NA, -22L ))

Мне нужно интерполировать данные с каждого графика в течение каждого из трех сезонов (2012–2014 гг.) Собранных данных. Я успешно сделал это с помощью функции subset. Обратите внимание, что я использую юлианские даты, однако я не особо привязан к этому формату даты.

lo <- loess(vi~julian, 
               subset(vi.sample, year=="2012" & site=="east" 
               & type=="b" & trt=="a" & plot=="1"),
               model=TRUE,
               na.action=na.exclude)

Вопрос: есть ли способ автоматизировать код для интерполяции данных из каждой комбинации графика / года без необходимости разделять каждую из них? Я думаю о функциях nlsList, используя дизайн | year/site/type/trt/plot.

Мой второй вопрос касается функции predict. Следующий код успешно отображает подогнанные значения vi для указанного выше графика.

pred <- predict(lo, seq(from =150, to =226, 
            by = 1), se=FALSE)

Однако соответствующие значения x не совпадают с исходными юлианскими датами.
Вопрос: Как мне получить предсказанные значения для представления юлианских дат, используемых в лессовой модели? Обратите внимание, что эти даты могут отличаться для каждого года / участка.


person woodland_creature    schedule 27.07.2015    source источник


Ответы (1)


Что касается вопроса 1, это стандартная обработка данных - разделение, применение, объединение. Здесь используется plyr

library(plyr)
fits <- dlply(vi.sample, .(year, site, type, trt, plot), .fun=function(samp)
    loess(vi ~ julian, model=T, na.action=na.exclude, data=samp))

Вы разделяете данные на группы по году / участку / типу / trt / графику, применяете функцию лесса, а затем снова объединяете результаты в список.

Что касается второго вопроса, вы выбираете юлианские даты, когда делаете предсказание, возможно, мне что-то там не хватает.

person Rorschach    schedule 27.07.2015
comment
спасибо за Ваш ответ. Продолжение: fits генерирует большой список, который не может быть преобразован во фрейм данных. Я пробовал unlist, но получаю сообщение об ошибке: incorrect number of dimensions. Любые указатели на преобразование этого в фрейм данных? - person woodland_creature; 11.09.2015