Günlük verilerle Auto.arima: mevsimsellik / periyodiklik nasıl yakalanır?


21

Günlük bir zaman serisine bir ARIMA modeli uyguluyorum. Veriler günlük olarak 02-01-2010 - 30-07-2011 saatleri arasında toplanmaktadır ve gazete satışlarıyla ilgilidir. Satışlardaki haftalık bir patern bulunabildiğinden (satılan günlük ortalama kopya miktarı genellikle pazartesiden cumaya aynıdır, ardından cumartesi ve pazar günleri artar), bu "mevsimsellik" i yakalamaya çalışıyorum. Satış verileri "veri" göz önüne alındığında, zaman serisini aşağıdaki gibi oluşturuyorum:

salests<-ts(data,start=c(2010,1),frequency=365)

ve sonra AIC kriteri ile en iyi ARIMA modelini seçmek için auto.arima (.) işlevini kullanıyorum. Sonuç her zaman mevsimsel olmayan bir ARIMA modelidir, ancak bazı SARIMA modelini aşağıdaki sözdizimiyle örnek olarak denersem:

sarima1<-arima(salests, order = c(2,1,2), seasonal = list(order = c(1, 0, 1), period = 7))

Daha iyi sonuçlar elde edebilirim. Ts komutunda / arima şartnamesinde yanlış bir şey var mı? Haftalık model çok güçlü, bu yüzden yakalama konusunda çok fazla zorluk beklemem. Herhangi bir yardım çok yararlı olacaktır. Teşekkürler Giulia Deppieri

Güncelleştirme:

Bazı tartışmaları çoktan değiştirdim. Daha doğrusu, prosedür belirlediğim zaman en iyi model olarak ARIMA'yı (4,1,3) seçiyor D=7, ancak AIC ve diğerleri de uygun endeks ve tahminlerin iyi olması hiç de iyileşmiyor . Sanırım mevsimsellik ile periyodiklik arasındaki karışıklık nedeniyle bazı hatalar var ..?!

Auto.arima çağrısı kullanılmış ve elde edilen çıktı:

modArima<-auto.arima(salests,D=7,max.P = 5, max.Q = 5)



 ARIMA(2,1,2) with drift         : 1e+20
 ARIMA(0,1,0) with drift         : 5265.543
 ARIMA(1,1,0) with drift         : 5182.772
 ARIMA(0,1,1) with drift         : 1e+20
 ARIMA(2,1,0) with drift         : 5137.279
 ARIMA(2,1,1) with drift         : 1e+20
 ARIMA(3,1,1) with drift         : 1e+20
 ARIMA(2,1,0)                    : 5135.382
 ARIMA(1,1,0)                    : 5180.817
 ARIMA(3,1,0)                    : 5117.714
 ARIMA(3,1,1)                    : 1e+20
 ARIMA(4,1,1)                    : 5045.236
 ARIMA(4,1,1) with drift         : 5040.53
 ARIMA(5,1,1) with drift         : 1e+20
 ARIMA(4,1,0) with drift         : 5112.614
 ARIMA(4,1,2) with drift         : 4953.417
 ARIMA(5,1,3) with drift         : 1e+20
 ARIMA(4,1,2)                    : 4960.516
 ARIMA(3,1,2) with drift         : 1e+20
 ARIMA(5,1,2) with drift         : 1e+20
 ARIMA(4,1,3) with drift         : 4868.669
 ARIMA(5,1,4) with drift         : 1e+20
 ARIMA(4,1,3)                    : 4870.92
 ARIMA(3,1,3) with drift         : 1e+20
 ARIMA(4,1,4) with drift         : 4874.095

 Best model: ARIMA(4,1,3) with drift        

Dolayısıyla, arima fonksiyonunun şu şekilde kullanılması gerektiğini düşünüyorum:

bestOrder <- cbind(modArima$arma[1],modArima$arma[5],modArima$arma[2])
sarima1<-arima(salests, order = c(4,1,3))

mevsimsel bileşen parametreleri ve periyot spesifikasyonları olmadan. Veriler ve keşif analizi, aynı haftalık örüntüsün, Ağustos 2010 hariç (satışlardaki tutarlı bir artışın kaydedilmesi durumunda) sadece her hafta için yaklaşık olarak düşünülebileceğini göstermektedir. Ne yazık ki zamanlama modellemesi konusunda hiçbir uzmanlığım yok, aslında parametrik olmayan diğer parametrelere alternatif bir çözüm bulmak için bu yaklaşımı deniyorum, bu problemli verilere uymaya çalıştım. Aynı zamanda birçok bağımlı sayısal değişkenim var ancak cevap değişkenini açıklamada düşük güç gösterdiler: şüphesiz, modellemesi en zor kısım zaman bileşenidir. Dahası, ay ve hafta içi günleri temsil eden kukla değişkenlerin inşasının sağlam bir çözüm olmadığı ortaya çıktı.

Yanıtlar:


28

Haftalık mevsimsellik varsa, mevsimsel dönemi 7 olarak ayarlayın.

salests <- ts(data,start=2010,frequency=7) 
modArima <- auto.arima(salests)

Mevsimsel farklılık seçiminin auto.arima()yakın zamana kadar iyi olmadığını unutmayın . forecastPaketin v2.xx'sini kullanıyorsanız , mevsimsel farklılıklara zorlamak D=1için çağrıya ayarlayın auto.arima(). forecastPaketin v3.xx kullanıyorsanız , otomatik seçim Ddaha iyi çalışır (bir CH testi yerine bir OCSB testi kullanarak).

Farklı fark seviyelerine sahip modeller için AIC'yi karşılaştırmaya çalışmayın. Doğrudan karşılaştırılamazlar. AIC'yi yalnızca aynı sıralama sırasına sahip modellerle güvenilir bir şekilde karşılaştırabilirsiniz.

Aradıktan sonra modeli tekrar ayarlamanıza gerek yok auto.arima(). arima()Seçtiğiniz model sırasını seçmişsiniz gibi bir Arima nesnesi döndürür .


Aptal hatamı gösterdiğin için teşekkürler. Cevabımı geri çekeceğim.
mpiktas

1
Çok yararlı önerileriniz için çok teşekkür ederim. Tahmin paketinin 2.19 sürümünü kullanıyorum, bu yüzden tavsiyene uydum ve D parametresini auto.arima () çağrısında 1'e eşit olarak ayarladım. Şimdi, tuzak serileri için seçilen en iyi model, sıfır ortalaması olmayan bir ARIMA (1,0,0). Mevsimsellik kısmının spesifikasyonunu, iade edilen en iyi model için beklemeli miyim, yani P, D, Q veya en azından D değerleri mi demek istiyorum?
Giulia

2
Verileriniz 1 dışında bir sıklığa sahip olduğu sürece, mevsimsel ARIMA modelleri dikkate alınacaktır. Eğer mevsimsel olmayan bir model iade ediliyorsa, o zaman ya mevsimsellik çok zayıf ya da veriler> 1 frekansına sahip bir ts nesnesinde değil.
Rob Hyndman

15

Mevsimsel ARIMA'nın günlük verilere uyumu ile ilgili sorun, "mevsimsel bileşen" in yalnızca hafta sonları veya belki sadece hafta günleri çalışabileceği, dolayısıyla genel olarak önemsiz bir "mevsimsel bileşen" olduğu yönündedir. Şimdi yapmanız gereken, verilerinizi haftanın günlerini temsil eden 6 aptal ve belki de yıllık etkileri temsil eden aylık göstergelerle 6 ayarınızı artırmak. Şimdi tatiller gibi olayları dahil etmeyi düşünün ve bu bilinen değişkenlerin etrafına herhangi bir kurşun, çağdaş veya gecikme etkisi ekleyin. Hayır, verilerde olağandışı değerler (darbeler) veya seviye kaymaları veya yerel zaman eğilimleri olabilir. Ayrıca, haftanın günü etkileri zaman içinde değişebilir, örneğin ilk 20 hafta boyunca Cumartesi etkisi yoktu, son 50 hafta boyunca Cumartesi etkisi oldu.


Bu durumda (IrishStat), bu, ARIMA yerine Karışık Modelleme Tekniği olmazdı. ARIMA'da Box Jlung Testi hariç gecikmeler yapılmaz. Auto.arima (yeni) verilerin ölçeklendirilmesi, mevsimsellik dalgalanmaları dahil her şeyi düzeltir (bu yüzden en iyi p, d, q parametrelerini buluyorum).
wackyanil

Bir Aktarım Fonksiyonu denilen ve bir sinerjik yaklaşım bkz yansıtır autobox.com/pdfs/capable.pd slayt 42 ile başlayan. Auto.arima basit durumlar için çalışabilir ama bence yeterince genel değil. Aklınızda tutulan bir veri varsa, yeni bir soru yapın ve ekleyin.
IrishStat 18:15

@IrishStat müdahale ile ARIMA mı demek istediniz? haftanın günü kukla değişken olmak? ve tatiller için benzer kukla değişkenler?
Meraklısı,

Evet .. bu günlük verilere olan yaklaşımım olurdu
IrishStat

0

Ts'daki mevsimsellik sırasını belirlemek için (3 yıl boyunca günlük veriler) Matlab'da bu kodu kullandım:

s = 0; min = 1 e + 07, n = uzunluğu (x); i = 1 için: 400 diff = x (i + 1: n) -x (1: ni); s (i) = toplamı (abs (fark)); eğer (s (i)

Bana mantıklı olan 365 verir.


1
Siteye Hoşgeldiniz. Bana bunun asıl soruyu nasıl cevapladığı açık değil ve gönderdiğiniz kodun sadece ona bakmaktan ne yaptığı bana açık değil. Belki cevabı biraz genişletebilirsin?
einar

1
Çözümünüz haftanın günü sabit etkileri, ayın sabit gün etkileri, ayın hafta etkileri, ayın gün etkileri, tatillerin kurşun ve gecikme etkileri ile nasıl başa çıkıyor? , pazartesi-cuma tatilinden sonra, pazartesi tatilinden önceki cuma, aylık etkiler, haftalık etkiler, zaman içindeki haftanın günü etkilerinde değişiklikler, bakliyatlar, seviye / kademe vardiyaları?
IrishStat

Matlab kodu s = 0; min = 1e + 07; n = uzunluk (x); i = 1 için: 400 diff = x (i + 1: n) -x (1: ni); s (i) = toplamı (abs (fark)); if (s (i) <dk) dk = s (i); sonu
nkabouche 01.01.2013
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.