Dalam komentar untuk pertanyaan ini , pengguna @whuber mengutip kemungkinan menggunakan versi splines periodik agar sesuai dengan data periodik. Saya ingin tahu lebih banyak tentang metode ini, khususnya persamaan yang mendefinisikan splines, dan bagaimana menerapkannya dalam praktik (saya sebagian besar R
pengguna, tetapi saya bisa puas dengan MATLAB atau Python, jika perlu). Juga, tetapi ini adalah "baik untuk memiliki", akan lebih baik untuk mengetahui tentang kemungkinan keuntungan / kerugian sehubungan dengan pemasangan polinomial trigonometrik, yang merupakan cara saya biasanya menangani data semacam ini (kecuali jika responsnya tidak terlalu lancar, dalam hal ini saya beralih ke Proses Gaussian dengan kernel periodik).
regression
time-series
seasonality
splines
DeltaIV
sumber
sumber
Jawaban:
Splines digunakan dalam pemodelan regresi untuk memodelkan bentuk fungsional yang kompleks dan mungkin non-linear. Tren smoothed spline terdiri dari polinomial kontinu piecewise yang koefisien utamanya berubah pada setiap breakpoint atau simpul. Spline dapat ditentukan dalam hal tingkat polinomial tren serta breakpoints. Representasi spline dari kovariat memperluas vektor tunggal dari nilai yang diamati ke dalam matriks yang dimensinya adalah derajat polinom ditambah jumlah simpul.
Versi berkala splines hanyalah versi periodik dari setiap regresi: data dipotong menjadi ulangan panjang periode. Jadi misalnya, memodelkan tren diurnal dalam percobaan multiday pada tikus akan membutuhkan pengodean ulang waktu percobaan menjadi peningkatan 24 jam, sehingga jam ke-154 akan menjadi nilai modulo 24 dari 10 (154 = 6 * 24 + 10). Jika Anda cocok dengan regresi linier pada data yang dipotong, itu akan memperkirakan bentuk gelombang gigi gergaji untuk tren tersebut. Jika Anda memasukkan fungsi langkah di suatu tempat dalam periode tersebut, itu akan menjadi bentuk gelombang persegi yang cocok dengan seri. Spline mampu mengekspresikan wavelet yang jauh lebih canggih. Untuk apa nilainya, dalam
splines
paket, ada fungsiperiodicSpline
yang melakukan hal ini.Saya tidak menemukan implementasi spline default "bs" R bermanfaat untuk interpretasi. Jadi saya menulis skrip saya sendiri di bawah ini. Untuk spline derajat dengan simpul , representasi ini memberikan kolom pertama representasi polinomial standar, kolom -th ( ) dievaluasi sebagai di mana adalah vektor yang sebenarnya knot.p nk p p+i i≤nk Sp+i=(X−ki)pI(X<ki) k
Untuk studi kasus kecil, sisipkan tren sinusoidal pada domain 0 hingga (atau ) seperti:2π τ
Anda akan melihat mereka cukup sesuai. Selanjutnya, konvensi penamaan memungkinkan interpretasi. Dalam hasil regresi Anda melihat:
Set kovariat pertama untuk derajat spline1.1 saya adalah tren polinomial untuk domain pertama di belakang breakpoint pertama. Istilah linear adalah kemiringan garis singgung pada titik asal, X = 0. Ini hampir 1 yang akan ditunjukkan oleh turunan dari kurva sinusoidal (cos (0) = 1), tetapi kita harus ingat bahwa ini adalah perkiraan, dan kesalahan mengekstrapolasi tren kuadrat keluar cenderung kesalahan. Istilah kuadrat menunjukkan bentuk cekung yang negatif. Istilah spline2.2 menunjukkan perbedaan dari kemiringan kuadratik pertama, yang mengarah ke koefisien memimpin positif 0,4 yang menunjukkan bentuk cembung ke atas. Jadi kami sekarang memiliki interpretasi yang tersedia untuk output spline dan dapat menilai inferensi dan estimasi yang sesuai.π/2
Saya akan berasumsi bahwa Anda tahu periodisitas data yang ada. Jika data tidak memiliki komponen pertumbuhan atau rata-rata bergerak, Anda dapat mengubah deret waktu yang lama menjadi ulangan dari deret pendek dengan durasi 1 periode. Anda sekarang memiliki ulangan dan dapat menggunakan analisis data untuk memperkirakan tren berulang.
Misalkan saya membuat seri waktu yang agak noisey, sangat lama:
Output yang dihasilkan menunjukkan kinerja yang wajar.
sumber