Объединение двух временных рядов путем усреднения точек данных


10

Я хотел бы объединить прогнозируемые и обратные (то есть прогнозируемые прошлые значения) данных временного ряда в один временной ряд, сводя к минимуму среднеквадратичную ошибку прогноза.

Скажем, у меня есть временные ряды 2001–2010 годов с разрывом на 2007 год. Я смог прогнозировать 2007 год с использованием данных за 2001–2007 годы (красная линия - называемая « ) и ретроспективно с использованием данных за 2008–2009 годы (легкий синяя линия - назовите это Y б ).YfYb

Я хотел бы объединить точки данных и Y b в вмененную точку данных Y_i для каждого месяца. В идеале я хотел бы получить вес w таким образом, чтобы он сводил к минимуму среднеквадратическую ошибку прогноза (MSPE) для Y i . Если это невозможно, как бы я нашел среднее между точками данных двух временных рядов?YfYbwYi

Yi=wYf+(1w)Yb

В качестве быстрого примера:

tt_f <- ts(1:12, start = 2007, freq = 12)
tt_b <- ts(10:21, start=2007, freq=12)

tt_f
     Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
2007   1   2   3   4   5   6   7   8   9  10  11  12
tt_b
     Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
2007  10  11  12  13  14  15  16  17  18  19  20  21

Я хотел бы получить (просто показывая усреднение ... в идеале минимизируя MSPE)

tt_i
     Jan Feb Mar Apr May Jun  Jul  Aug  Sep  Oct  Nov  Dec
2007 5.5 6.5 7.5 8.5 9.5 10.5 11.5 12.5 13.5 14.5 15.5 16.5

введите описание изображения здесь


Что такое модель прогнозирования (арима, этс, некоторые другие)? (+1) для предложения о подходе, я когда-то думал о таком пути, но остался в рамках максимизации ожидания после интерполяции. В принципе, период обучения может иметь значение, чтобы придать больший вес модели, основанной на большей информации (красный прогноз на рисунке). Некоторые критерии точности также могут быть полезны для определения весов, чтобы они не были так детерминированно связаны с длинами временных рядов.
Дмитрий Челов

Извините за то, что вычеркнули модель прогнозирования. Вышеуказанное просто использует predictфункцию пакета прогноза. Тем не менее, я думаю, что я собираюсь использовать модель прогнозирования HoltWinters для прогнозирования и обратного вещания. У меня есть временные ряды с небольшим количеством <50, и я пытался прогнозировать регрессию Пуассона - но по некоторым причинам очень слабые прогнозы.
ОСОЛСО

log(counts)t

У вас есть только подсчеты или какие-то дополнительные временные ряды без NAзначений? Кажется, что создание периода обучения MSPE могло бы вводить в заблуждение, поскольку подпериоды 'хорошо описываются линейными тенденциями, но в пропущенном периоде где-то происходит спад, и это фактически может быть любая точка. Отметим также, что, поскольку прогнозы коллинеарны по тренду, их среднее значение приведет к двум структурным разрывам вместо кажущегося одного.
Дмитрий Челов

Извините за возвращение только сейчас @Dmitij. О каком "разрыве" ты говоришь? Я сделал журнал (рассчитывает) для регрессии GLM. И есть подмножество данных подсчета, число которых меньше <6, что заставит меня их использовать. У меня есть только счет. Если вы посмотрите на этот вопрос, вы получите представление о данных, которые у меня есть. Вышеуказанные значения относятся только к возрастной группе «15up». Если это имеет смысл?
OSLOSO

Ответы:


0

Предполагая, что у вас есть Квадратные ошибки прогноза для прогноза и обратного прогноза по отдельности, я бы порекомендовал это: Пусть w будет вектором длины 12, пусть m будет месяцем, который вас интересует.

w=rep(NA,12);
for(w in 1:12){
w[m]=SPE_Backcast[m]/(SPE_Backcast[m]+SPE_Forecast[m]);
}

Теперь w - вес для прогноза, а 1-w - вес для обратного прогноза.


По-видимому, это просто взвешивает самое низкое значение более высоко (до такой степени, что отрицательные числа могут в конечном итоге иметь веса> 1). В чем смысл? Кроме того, вторая строкаs/w/m/
naught101

Как бы вы получили отрицательные квадратные ошибки предсказания?
Ау Йессен,

3

t

Y^t:=E(Yt|Y1:r,Ys:n)
Yu:v:=[Yu,Yu+1,,Yv]uvr+1s1ntY^t|1:r,s:n

Y^tt

αtYtt

αtYt

Ytи может использоваться для построения интервалов сглаживания, которые обычно имеют тенденцию быть больше в середине промежутка. Обратите внимание, однако, что оценка структурных моделей может быть затруднена.

AP <- log10(AirPassengers) 
## Fit a Basic Structural Model
fit <- StructTS(AP, type = "BSM")

## Fit with a gap
AP.gap <- AP
AP.gap[73:96] <- NA
fit.gap <- StructTS(AP.gap, type = "BSM", optim.control = list(trace = TRUE))

# plot in orginal (non-logged) scale
plot(AirPassengers, col = "black", ylab = "AirPass")
AP.missing <- ts(AirPassengers[73:96], start=1955, , freq=12)
lines(AP.missing, col = "grey", lwd = 1)

## smooth and sum 'level' and 'sea' to retrieve series
sm <- tsSmooth(fit.gap)
fill <- apply(as.matrix(sm[ , c(1,3)]), 1, sum)
AP.fill <- ts(fill[73:96], start=1955, , freq=12)
lines(10^AP.fill, col = "red", lwd = 1)

Сглаженная заливка


2

Я нахожу ваш предложенный подход, предусматривающий использование средств переднего и заднего бросков, интересным.

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

Это подразумевает, что нам лучше полагаться больше на прогнозные данные для более ранней части пропущенного периода и больше на данные обратного анализа для последней части. Самый простой способ сделать это - использовать линейно уменьшающийся вес для прогноза, а для обратного - наоборот.

> n <- [number of missing datapoints] 
> w <- seq(1, 0, by = -1/(n+1))[2:(n+1)]

Это дает немного веса обратной передачи на первом элементе. Вы также можете использовать n-1 без подписей в конце, если вы хотите использовать только прогнозное значение в первой интерполированной точке.

> w
 [1] 0.92307692 0.84615385 0.76923077 0.69230769 0.61538462 0.53846154
 [7] 0.46153846 0.38461538 0.30769231 0.23076923 0.15384615 0.07692308

У меня нет ваших данных, поэтому давайте попробуем это на наборе данных AirPassenger в R. Я просто удалю двухлетний период около центра:

> APearly <- ts(AirPassengers[1:72], start=1949, freq=12)
> APlate <- ts(AirPassengers[97:144], start=1957, freq=12)
> APmissing <- ts(AirPassengers[73:96], start=1955, freq=12)
> plot(AirPassengers)
# plot the "missing data" for comparison
> lines(APmissing, col="#eeeeee")
# use the HoltWinters algorithm to predict the mean:
> APforecast <- hw(APearly)[2]$mean
> lines(APforecast, col="red")
# HoltWinters doesn't appear to do backcasting, so reverse the ts, forecast, 
# and reverse again (feel free to edit if there's a better process)
> backwards <- ts(rev(APlate), freq=12)
> backcast <- hw(backwards)[2]$mean
> APbackcast <- ts(rev(backcast), start=1955, freq=12)
> lines(APbackcast, col='blue')
# now the magic: 
> n <- 24 
> w <- seq(1, 0, by=-1/(n+1))[2:(n+1)]
> interpolation = APforecast * w + (1 - w) * APbackcast
> lines(interpolation, col='purple', lwd=2)

И есть ваша интерполяция.

вывод графика

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

Полагаю, вы могли бы попробовать это, включая доверительные интервалы, но я не уверен в правильности выполнения этого так просто.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.