Representasi kedua Anda lebih tradisional untuk variabel kategori seperti hari dalam seminggu.
Ini juga dikenal sebagai membuat variabel dummy dan merupakan metode yang banyak digunakan untuk pengkodean variabel kategori. Jika Anda menggunakan 1-7 penyandian, Anda memberi tahu model bahwa hari 4 dan 5 sangat mirip, sedangkan hari 1 dan 7 sangat berbeda. Bahkan, hari 1 dan 7 sama seperti hari 4 dan 5. Logika yang sama berlaku untuk 0-30 penyandian untuk hari dalam sebulan.
Hari dalam sebulan sedikit lebih sulit, karena sementara setiap minggu memiliki 7 hari yang sama, tidak setiap bulan memiliki 30 hari yang sama: beberapa bulan memiliki 31 hari, dan beberapa bulan memiliki 28 hari. Karena minggu dan bulan bersifat siklis, Anda dapat menggunakan transformasi fourier untuk mengubahnya menjadi variabel linier yang lancar.
Misalnya ( menggunakan R, bahasa pemrograman pilihan saya ):
day_of_month = c(1:31, 1:28, 1:30)
day_of_year <- 1:length(day_of_month)
s = sin((2*pi)/30*day_of_month)
c = cos((2*pi)/30*day_of_month)
plot(day_of_month ~ day_of_year)
lines(15*s+15 ~ day_of_year, col='blue')
lines(15*c+15 ~ day_of_year, col='red')
legend(10, 30, c('raw', 'sin', 'cos'), c('black', 'blue', 'red'))
(Saya menskala variabel sinus / kosinus menjadi 0/30, daripada -1/1 sehingga grafik terlihat lebih baik)
Seperti yang Anda lihat, sementara "hari dalam variabel bulan" mentah melompat kembali ke nol pada akhir setiap bulan, transformasi sinus dan kosinus membuat transisi yang mulus yang memungkinkan model mengetahui hari-hari pada akhir satu bulan sama dengan hari pada awal bulan berikutnya.
Anda dapat menambahkan sisa istilah fourier sebagai berikut:
for(i in 1:3){
s = sin((2*pi)/30*day_of_month + 30 * i/4)
c = cos((2*pi)/30*day_of_month + 30 * i/4)
lines(15*s+15 ~ day_of_year, col='blue')
lines(15*c+15 ~ day_of_year, col='red')
}
legend(10, 30, c('raw', 'sin', 'cos'), c('black', 'blue', 'red'))
Setiap pasang gelombang sinus / kosinus membuat lingkaran:
m <- lapply(1:4, function(i){
as.matrix(
data.frame(
s = sin((2*pi)/30*day_of_month + 30 * i/4),
c = cos((2*pi)/30*day_of_month + 30 * i/4)
)
)
})
m <- do.call(cbind, m)
pairs(m)
Halaman ini memiliki penjelasan yang sangat berguna tentang bagaimana memanipulasi gelombang sinus dan kosinus.