Saya ingin berasumsi bahwa suhu permukaan laut dari Laut Baltik adalah tahun yang sama tahun demi tahun, dan kemudian menggambarkannya dengan model fungsi / linier. Gagasan yang saya miliki adalah hanya memasukkan tahun sebagai angka desimal (atau num_months / 12) dan keluar berapa suhu yang seharusnya sekitar waktu itu. Melemparkannya ke fungsi lm () di R, itu tidak mengenali data sinusoidal sehingga hanya menghasilkan garis lurus. Jadi saya meletakkan fungsi sin () dalam braket I () dan mencoba beberapa nilai agar sesuai dengan fungsi tersebut, dan itu mendekati apa yang saya inginkan. Tetapi laut semakin cepat memanas di musim panas dan kemudian mendingin lebih lambat di musim gugur ... Jadi modelnya salah pada tahun pertama, kemudian menjadi lebih benar setelah beberapa tahun, dan kemudian di masa depan saya kira itu menjadi lebih dan lebih salah lagi.
Bagaimana saya bisa mendapatkan R untuk memperkirakan model untuk saya, jadi saya tidak perlu menebak angka sendiri? Kuncinya di sini adalah bahwa saya ingin menghasilkan nilai yang sama tahun demi tahun, tidak hanya benar untuk satu tahun. Jika saya tahu lebih banyak tentang matematika, mungkin saya bisa menebaknya sebagai sesuatu seperti Poisson atau Gaussian alih-alih dosa (), tapi saya juga tidak tahu bagaimana melakukannya. Setiap bantuan untuk mendekati jawaban yang baik akan sangat dihargai.
Berikut adalah data yang saya gunakan, dan kode untuk menunjukkan hasil sejauh ini:
# SST from Bradtke et al 2010
ToY <- c(1/12,2/12,3/12,4/12,5/12,6/12,7/12,8/12,9/12,10/12,11/12,12/12,13/12,14/12,15/12,16/12,17/12,18/12,19/12,20/12,21/12,22/12,23/12,24/12,25/12,26/12,27/12,28/12,29/12,30/12,31/12,32/12,33/12,34/12,35/12,36/12,37/12,38/12,39/12,40/12,41/12,42/12,43/12,44/12,45/12,46/12,47/12,48/12)
Degrees <- c(3,2,2.2,4,7.6,13,16,16.1,14,10.1,7,4.5,3,2,2.2,4,7.6,13,16,16.1,14,10.1,7,4.5,3,2,2.2,4,7.6,13,16,16.1,14,10.1,7,4.5,3,2,2.2,4,7.6,13,16,16.1,14,10.1,7,4.5)
SST <- data.frame(ToY, Degrees)
SSTlm <- lm(SST$Degrees ~ I(sin(pi*2.07*SST$ToY)))
summary(SSTlm)
plot(SST,xlim=c(0,4),ylim=c(0,17))
par(new=T)
plot(data.frame(ToY=SST$ToY,Degrees=8.4418-6.9431*sin(2.07*pi*SST$ToY)),type="l",xlim=c(0,4),ylim=c(0,17))
sumber
Suhu yang Anda berikan dalam pertanyaan Anda berulang setiap tahun. Saya menduga ini bukan suhu yang benar-benar diukur selama empat tahun. Dalam contoh Anda, Anda tidak perlu model, karena suhunya hanya mengulangi persis. Tetapi sebaliknya Anda bisa menggunakan
nls
fungsi ini agar sesuai dengan kurva sinus:Tapi pas tidak terlalu bagus, terutama di awal. Tampaknya data Anda tidak dapat dimodelkan secara memadai oleh kurva sinus sederhana. Mungkin fungsi trigonometri yang lebih kompleks akan berhasil?
Kurva merah lebih cocok dengan data. Dengan
nls
fungsinya, Anda bisa memasukkan model yang menurut Anda sesuai.Atau mungkin Anda bisa menggunakan
forecast
paket itu. Dalam contoh di bawah ini, saya berasumsi bahwa rangkaian waktu dimulai pada Januari 2010:Karena data bersifat deterministik, tidak ada pita kepercayaan yang ditampilkan.
sumber
lm()
seperti prediktor lain. Dengan kata lain,lm()
tidak perlu melihat trigonometri sama sekali. Namun, Anda mungkin perlu model lain untuk menangkap asimetri dengan baik. Saya bukan pengguna R biasa tapi saya sering menggunakan pendekatan ini di tempat lain (lihat stata-journal.com/sjpdf.html?articlenum=st0116 ).