データポイントの平均化による2つの時系列の結合


10

Mean Squared Prediction Errorを最小化することにより、時系列データセットの予測とバックキャスト(つまり過去の予測値)を1つの時系列に結合したいと思います。

2001年から2010年までの時系列があり、2007年のギャップがあるとします。2001年から2007年のデータ(赤い線と呼ばれ)を使用して2007年を予測し、2008年から2009年のデータ(水色)を使用してバックキャストすることができました。行と呼びます)。Y bYfYb

とデータポイントを、されたデータポイントY_i に結合したいとます。理想的には、平均二乗予測誤差(MSPE)を最小にするような重みを取得したいと考えています。これが不可能な場合、2つの時系列のデータポイント間の平均をどのように見つけることができますか?Y b w Y iYfYbwYi

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

ここに画像の説明を入力してください


予測モデルとは何ですか(arima、etsなど)。(+1)アプローチの提案について、私はそのような方法について一度考えましたが、補間後も期待値最大化の範囲内にとどまりました。原則として、より大きな情報に基づいてモデルに高い重みを与えるために、学習期間が重要になる可能性があります(図の赤い予測)。いくつかの精度基準は、時系列の長さにそれほど確定的にリンクされないように、重みを作成するのに役立つ可能性もあります。
Dmitrij Celov 2011

予測モデルを省略して申し訳ありません。上記は、単純predictに予測パッケージの機能を使用したものです。ただし、HoltWinters予測モデルを使用して予測とバックキャストを行うつもりだと思います。50カウント未満の時系列があり、ポアソン回帰予測を試しましたが、何らかの理由で非常に弱い予測になりました。
OSlOlSO

カウントのデータは、表示した場所で正確に途切れているようです。予測とバックキャストも同じことを示しています。ポアソンでは、時間傾向で回帰を行いましたか?tlog(counts)t
Dmitrij Celov 2011

カウントのみ、またはNA値のないいくつかの関連する時系列がありますか?学習期間をMSPEにすることは、サブピリオドが線形傾向によってよく説明されているので誤解を招く可能性があるようですが、見落とされた期間ではどこかでドロップダウンが発生し、実際には任意のポイントになる可能性があります。また、予測は傾向的に同一線上にあるため、それらの平均は、一見したところではなく、2つの構造的な中断をもたらすことに注意してください。
Dmitrij Celov 2011

ただ今@Dmitijに戻ってきてすみません。あなたが話しているこの「休憩」とは何ですか?私がやったのログ(カウント) GLM回帰のために。また、カウントが6未満のカウントデータのサブセットがあるため、強制的に使用する必要があります。私は数だけを持っています。この質問を見ると、私が持っているデータがわかります。上記のカウントは、「15up」AgeGroupの場合のみです。これが理にかなっていますか?
OSlOlSO

回答:


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になる可能性があるまで)。ポイントは何ですか?また、2行目s/w/m/
naught101

どのようにして負の二乗予測エラーが発生しますか?
Owe Jessen 2012

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

時系列モデルを状態空間(SS)形式にできる場合、FIスムージングは​​カルマンフィルター処理に基づく標準操作であり、たとえば使用可能なR関数を使用して実行できます。ギャップの値が欠落していることを指定するだけです。平滑化アルゴリズムは、隠れ状態推定に関するすべての関連情報が含まれ用ギャップです。ARIMAモデルは、SSフォームで配置できます。Y トントンαtYtt

興味深いことに、FIスムージングは​​、2つのフィルタの組み合わせとして記述できます。1つは前方に、もう1つは後方にあり、期待した種類の式になりますが、隠れた状態の推定 (予測とバックキャスト)では、しかし、観測ではありません。これは、Rauch-Tung-Striebelフィルタリングと呼ばれますY トンαtYt

少なくとも乗算バージョンでは、Holt-Wintersのような「アドホック」予測手順は、SS形式にできないため、単純なFIアルゴリズムのない確率モデルに依存しています。平滑化の式はおそらくSSモデルを使用して概算でき ますが、対数変換で構造時系列モデルを使用するよりもはるかに簡単です。R statsパッケージの「KalmanSmooth」、「tsSmooth」、「StructTS」関数は、この仕事を実行できます。Rのヘルプページで引用されているHarveyまたはDurbinとKoopmanの書籍をご覧ください。平滑化アルゴリズムは、推定された条件付き分散を提供できます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

フォアキャストとバックキャストの手段をとるという提案されたアプローチは興味深いと思います。

指摘する価値があるかもしれないことの1つは、無秩序な構造を示すどのシステムでも、予測は短期間に渡ってより正確になる可能性が高いことです。これは、すべてのシステムに当てはまるわけではありません。たとえば、減衰した振り子は、間違った期間の関数によってモデル化できます。システムはゼロに収束するため、非常に正確です。しかし、問題のグラフから、これはここで行うには妥当な仮定である可能性があるように私には見えます。

これは、欠落期間の前半部分の予測データをより信頼し、後半部分のバックキャストデータをより信頼したほうがよいことを意味します。これを行う最も簡単な方法は、予測に線形的に減少する重みを使用し、逆キャストにその逆を使用することです。

> 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

私はあなたのデータを持っていないので、RのAirPassengerデータセットでこれを試してみましょう。中心の近くの2年の期間を削除します。

> 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)

そして、あなたの補間があります。

グラフ出力

もちろん、完璧ではありません。これは、データの前半部分のパターンが後半部分のパターンと異なるためだと思います(7月から8月のピークは、以前の年ほど強くはありません)。しかし、画像からわかるように、予測やバックキャスティングだけの場合よりも明らかに優れています。それほど大きな季節変動がないため、データの信頼性がやや低くなると思います。

私はあなたが信頼区間も含めてこれを試すことができると思いますが、私はこれほど単純にそれを行うことの妥当性がわかりません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.