2017-01-29 13 views
-3

Я сталкивался с этой проблемой несколько раз за эти годы, поэтому, возможно, я просто что-то недопонимаю или как-то просто глупо об этом. Я столкнулся с более сложной проблемой при выполнении скользящего среднего по нерегулярным временным рядам. Хороший обзор доступных методов в пакетах и ​​простой скрипт находится здесь: Calculating moving average in RR Средний уровень от нерегулярных временных рядов

Возможно, я ошибаюсь в некоторых из них, но я вижу проблему при работе с нерегулярными временными рядами. Например, общий метод Rolling в пакете zoo требует уникальных значений для каждого из данных. Но в этом случае это не скользящее среднее, но скользящее среднее из средних значений за единицу времени единицы времени меньше точек данных будет иметь относительно большее влияние на среднее число, чем больше.

Мне кажется, что истинная скользящая средняя должна работать не с агрегатами, а с распределением для каждой расчетной точки.

Учитывая, что у меня есть следующий фрейм данных или нерегулярные значения, как лучше всего создать меру скользящей средней для каждого из значений.

df <- data.frame(year = c(rep(2000,3),rep(2001,1),rep(2004,4),rep(2005,3),+ 
     rep(2006,3),rep(2007,1),rep(2008,2),rep(2009,6),rep(2010,8)),+ 
     value1=rnorm(31), value2=rnorm(31), value3=rnorm(31)) 

Я нашел легкий способ сделать это с помощью Подменят, что я буду размещать в качестве первоначального ответа, но это работает в ограниченных условиях и должно быть настроено каждый раз. Мне интересно, какое общее решение. Кроме того, если кто-либо может прокомментировать практику использования средних средних значений по сравнению с средними распределениями в вычислениях качения, это будет полезно. Благодаря!

ответ

0

Итак, вот просто подмножество, которое я придумал. Может оказаться полезным, если кто-либо найдет те же проблемы:

df <- data.frame(year = c(rep(2000,3),rep(2001,1),rep(2004,4),rep(2005,3), + 
rep(2006,3),rep(2007,1),rep(2008,2),rep(2009,6),rep(2010,8)), + 
value1=rnorm(31), value2=rnorm(31), value3=rnorm(31)) 

rmeans <- data.frame() 
for (i in (min(df$year)+2):(max(df$year)-2)){ 
    rmeans <- rbind(rmeans, data.frame(year=i,as.data.frame.list(colMeans(df + 
[df$year>=(i-2)&df$year<(i+2),-c(1,2)])))) 
} 

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

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