Veri noktalarının ortalamasını alarak iki zaman serisini birleştirme


10

Ortalama Kareli Tahmin Hatasını en aza indirerek bir zaman serisi verisinin öngörülen ve geriye dönük (yani, tahmin edilen geçmiş değerleri) bir zaman serisine birleştirmek istiyorum.

Ben 2001-2007 verileri kullanılarak 2007 tahmini mümkün olmuştur 2007 yılı için bir boşluk ile 2001-2010 arası zaman serileri olduğunu varsayalım - (kırmızı çizgi denir Yf 2008-2009 verileri kullanılarak) ve backcast için (ışık mavi çizgi - buna ).Yb

ve veri noktalarını her ay için bir gizli veri noktasına Y_i olarak birleştirmek istiyorum . İdeal ağırlık elde etmek istiyorum bu ortalama kare tahmin hatası ve (MSPE) en aza indirdiği gibi . Bu mümkün değilse, iki zaman serisinin veri noktaları arasındaki ortalamayı nasıl bulabilirim?Y b w Y iYfYbwYi

Yi=wYf+(1w)Yb

Kısa bir örnek olarak:

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

Almak istiyorum (sadece ortalama gösteren ... İdeal MSPE en aza indirmek)

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

resim açıklamasını buraya girin


Tahmin modeli nedir (arima, ets, diğer bazıları)? (+1) yaklaşım önerisi için, bir zamanlar böyle düşündüm, ancak enterpolasyondan sonra Beklenti-Maksimizasyon içinde kaldım. Prensip olarak öğrenme süresi önemli olabilir, daha büyük bilgilere dayanarak model için daha yüksek ağırlık vermek (resimde kırmızı tahmin). Bazı doğruluk kriterleri, zaman serisi uzunluklarına bu kadar belirleyici bir şekilde bağlı olmamak üzere ağırlıklar oluşturmak için de potansiyel olarak yararlı olabilir.
Dmitrij Celov

Öngörme modelini hariç tutma konusunda üzgünüm. Yukarıdaki seçenek predict, tahmin paketinin işlevini kullanmaktır . Ancak, tahmin etmek ve geri yayınlamak için HoltWinters tahmin modelini kullanacağımı düşünüyorum. <50 sayımdan küçük zaman serilerim var ve Poisson regresyon tahminini denedim - ama bazı nedenlerden dolayı çok zayıf tahminlere.
OSlOlSO

Sayımlara ilişkin veriler tam olarak gösterdiğiniz yerde bir mola veriyor gibi görünüyor, tahminler ve geri yayınlar da aynı şeyi gösteriyor. Poisson'da regresyonunu zaman trendinde yaptınız mı? tlog(counts)t
Dmitrij Celov

Sadece sayımlarınız veya NAdeğer içermeyen ek zaman dizileriniz var mı? Görünüşe göre alt dönemler doğrusal eğilimler tarafından iyi tanımlandığından, öğrenme periyodu MSPE'nin yanıltıcı olabileceği, ancak kaçırılan dönemde bir yerde bir düşüş meydana geldiği ve aslında herhangi bir nokta olabileceği görülmektedir. Ayrıca, tahminler trend olarak eş zamanlı olduğu için, ortalamalarının görünüşte bir yerine iki yapısal mola vereceğini unutmayın.
Dmitrij Celov

@Dmitij'e şimdi geri döndüğüm için üzgünüm. Bahsettiğiniz bu 'mola' nedir? GLM regresyonu için log (sayım) yaptım . Ve sayım verilerinin <6'dan daha az olan ve beni kullanmaya zorlayacak bir alt kümesi var. Sadece sayım var. Bu soruya bakarsanız sahip olduğum veriler hakkında bir fikir edineceksiniz. Yukarıdaki sayılar sadece '15up' Yaş Grubu içindir. Bu mantıklıysa?
OSlOlSO

Yanıtlar:


0

Tek tek tahmin ve backcast için Kare Tahmin Hataları var varsayarsak ben bunu tavsiye ederim: w uzunluğu 12 bir vektör olalım, ilgilendiğiniz ay olalım.

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

Şimdi w, tahmin için ağırlık ve 1-w, backcast için ağırlıktır.


Bu sadece en düşük değeri daha yüksek ağırlıkta gibi görünmektedir (negatif sayıların ağırlık> 1 olabileceği noktaya kadar). Amaç ne? Ayrıca, ikinci satırs/w/m/
naught101

Negatif kare tahmin hatalarını nasıl elde edersiniz?
Owe Jessen

3

t

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

Düzeltilen değer tahmin ettiğiniz basit biçime sahip değildir. Bilinen kovaryans yapısına sahip bir gauss sabit zaman serisi için , boşluktaki için tahmini doğrusal bir sistem çözülerek bulunabilir. tY^tt

Zaman serisi modeli Durum Uzayı (SS) formuna yerleştirilebildiğinde, FI düzgünleştirme Kalman filtrelemesine dayalı standart bir işlemdir ve örneğin mevcut R fonksiyonları kullanılarak yapılabilir. Sadece boşluktaki değerlerin eksik olduğunu belirtmeniz gerekir. , boşluktaki için ilgili tüm bilgileri içeren gizli durumunu tahmin eder . ARIMA modelleri SS formunda olabilir.αt tYtt

İlginç bir şekilde, FI düzgünleştirme iki filtrenin bir kombinasyonu olarak yazılabilir: bir ileri ve bir geri, beklediğiniz türden bir formüle yol açar, ancak gizli durum tahmini için (tahmin ve geri yayın), ama gözlem için değil . Bu Rauch-Tung-Striebel filtrelemesi olarak bilinir .Y tαtYt

En azından çarpımsal versiyonlarda, Holt-Winters gibi 'ad hoc' tahmin prosedürleri, SS formuna yerleştirilemedikleri için basit FI algoritmaları olmayan stokastik modellere dayanır. Düzeltme formülü muhtemelen SS modeli kullanılarak tahmin edilebilir, ancak log dönüşümleri ile Yapısal Zaman Serisi modellerini kullanmak çok daha kolaydır . İşi R istatistik paketinin 'KalmanSmooth', 'tsSmooth' ve 'StructTS' işlevleri yapabilir. Harvey veya Durbin ve Koopman'ın R yardım sayfalarında belirtilen kitaplarına bir göz atmalısınız. Yumuşatma algoritması, tahmini için koşullu bir değişiklikYtve genellikle boşluğun ortasında daha büyük olma eğilimi gösteren düzeltme aralıklarını oluşturmak için kullanılabilir. Bununla birlikte, Yapısal Modellerin tahmin edilmesinin zor olabileceğine dikkat edin.

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)

Düzgün doldurma


2

Ön ve arka atma araçlarını almak için önerdiğiniz yaklaşımı ilginç buluyorum.

Dikkat çekmeye değer bir şey, kaotik bir yapı sergileyen herhangi bir sistemde, tahminlerin daha kısa dönemlerde daha doğru olması muhtemeldir. Bu, tüm sistemler için geçerli değildir, örneğin sönümlü bir sarkaç yanlış döneme sahip bir fonksiyonla modellenebilir, bu durumda uzun vadeli olanların hepsi yanlış olurken, tüm orta vadeli tahminlerin yanlış olması muhtemeldir. sistem sıfıra yaklaştığında çok doğru. Ama bana göre, sorudaki grafikten, bunun burada yapılması için makul bir varsayım olabilir.

Bu, eksik dönemin önceki bölümü için tahmin verilerine ve ikinci bölüm için geriye dönük verilere daha fazla güvenebileceğimizi gösterir. Bunu yapmanın en basit yolu, tahmin için doğrusal olarak azalan bir ağırlık kullanmak ve geri döküm için tersini kullanmaktır:

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

Bu, ilk elemandaki backcast'in biraz ağırlığını verir. Ayrıca, ilk enterpole edilen noktada yalnızca tahmin değerini kullanmak istiyorsanız, n-1'i sonunda abonelik olmadan da kullanabilirsiniz.

> 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

Verileriniz yok, bu yüzden bunu R'deki AirPassenger veri kümesinde deneyelim. Merkezin yakınında iki yıllık bir dönemi kaldıracağım:

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

Ve enterpolasyonunuz var.

grafik çıktısı

Tabii ki, mükemmel değil. Sanırım bu, verilerin önceki kısmındaki örüntülerin ikinci kısımdakilerden farklı olmasının bir sonucudur (Temmuz-Ağustos zirvesi önceki yıllarda çok güçlü değildir). Ancak görüntüden de görebileceğiniz gibi, sadece tahmin veya arka dökümden açıkça daha iyi. Bu kadar güçlü bir mevsimsel değişiklik olmadığı için verilerinizin biraz daha az güvenilir sonuçlar alabileceğini hayal ediyorum.

Benim tahminim güven aralıkları da dahil olmak üzere bunu deneyebilirsiniz, ama bunu bu kadar basit yapmanın geçerliliğinden emin değilim.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.