Pustaka splines memiliki fungsi bs
dan ns
yang akan membuat basis spline untuk digunakan dengan lm
fungsi tersebut, maka Anda dapat menyesuaikan model linier dan model termasuk splines dan menggunakan anova
fungsi tersebut untuk melakukan tes model penuh dan tereduksi untuk melihat apakah model spline cocok secara signifikan lebih baik dari model linier.
Berikut ini beberapa contoh kode:
x <- rnorm(1000)
y <- sin(x) + rnorm(1000, 0, 0.5)
library(splines)
fit1 <- lm(y~x)
fit0 <- lm(y~1)
fit2 <- lm(y~bs(x,5))
anova(fit1,fit2)
anova(fit0,fit2)
plot(x,y, pch='.')
abline(fit1, col='red')
xx <- seq(min(x),max(x), length.out=250)
yy <- predict(fit2, data.frame(x=xx))
lines(xx,yy, col='blue')
Anda juga dapat menggunakan poly
fungsi untuk melakukan fit polinomial dan menguji istilah non-linear sebagai tes kelengkungan.
Untuk orang yang kurang fit, ini sedikit lebih rumit. Ada beberapa perkiraan derajat kebebasan yang setara untuk parameter perataan loess yang dapat digunakan bersama dengan nilai untuk model linier dan loess untuk dikonstruksi dan uji F. Saya pikir metode berdasarkan tes bootstrap dan permutasi mungkin lebih intuitif.R2
Ada teknik untuk menghitung dan memplot interval kepercayaan untuk fit loess (saya pikir mungkin ada cara built-in dalam paket ggplot2), Anda dapat merencanakan band kepercayaan dan melihat apakah garis lurus akan cocok di dalam band (ini bukan nilai-p, tetapi masih memberikan ya / tidak.
Anda dapat menyesuaikan model linier dan mengambil residu dan memasukkan model loess ke residual sebagai respons (dan variabel yang diminati sebagai prediktor), jika model yang sebenarnya adalah linier maka kecocokan ini harus dekat dengan garis datar dan menyusun ulang poin. relatif terhadap prediktor seharusnya tidak membuat perbedaan. Anda bisa menggunakan ini untuk membuat tes permutasi. Paskan loess, temukan nilai prediksi terjauh dari 0, sekarang secara acak permutasi poin dan paskan loess baru dan temukan titik prediksi terjauh dari 0, ulangi beberapa kali, p-value adalah proporsi dari nilai yang diijinkan yang lebih jauh dari 0 dari nilai aslinya.
Anda mungkin juga ingin melihat validasi silang sebagai metode pemilihan bandwidth loess. Ini tidak memberikan nilai p, tetapi bandwidth tak terbatas sesuai dengan model linier sempurna, jika validasi silang menunjukkan bandwidth yang sangat besar maka itu menunjukkan model linier mungkin masuk akal, jika bandwidth yang lebih tinggi jelas lebih rendah daripada beberapa bandwidth yang lebih kecil maka ini menunjukkan kelengkungan yang pasti dan linier tidak cukup.