Mengatur simpul dalam splines kubik alami di R


23

Saya memiliki data dengan banyak fitur yang berkorelasi, dan saya ingin memulai dengan mengurangi fitur dengan fungsi basis yang halus, sebelum menjalankan LDA. Saya mencoba menggunakan splines kubik alami dalam splinespaket dengan nsfungsi. Bagaimana cara menetapkan knot?

Berikut kode R dasar:

library(splines)
lda.pred <- lda(y ~ ns(x, knots=5))

Tetapi saya tidak tahu bagaimana cara memilih simpulnya ns.


3
apakah Anda bertanya tentang cara menentukan simpul di (yaitu, melalui argumen ke ns ) atau apakah Anda bertanya tentang strategi untuk memutuskan di mana menempatkan simpul? R
kardinal

1
Lihat Harrell, Regression Strategies 2015, untuk diskusi yang baik tentang tempat meletakkan simpul (tidak masalah, jadi kuantil sama bagusnya dengan apa pun - pengecualian adalah jika Anda memiliki alasan kuat untuk memercayai perubahan perilaku di beberapa titik) dan jumlah knot (3, 4, atau 5 tergantung pada N)
statsguy

Jawaban:


40

Cara menentukan simpul di R

The nsFungsi menghasilkan spline regresi alami secara diberikan vektor input. Knot dapat ditentukan baik melalui argumen derajat kebebasan dfyang mengambil integer atau melalui argumen knot knotsyang mengambil vektor yang memberikan penempatan knot yang diinginkan. Perhatikan bahwa dalam kode yang Anda tulis

library(splines)
lda.pred <- lda(y ~ ns(x, knots=5))

Anda belum meminta lima simpul, melainkan meminta satu simpul (interior) di lokasi 5.

Jika Anda menggunakan dfargumen, maka simpul interior akan dipilih berdasarkan pada kuantil vektor x. Misalnya, jika Anda melakukan panggilan

ns(x, df=5)

Kemudian dasar akan mencakup dua simpul batas dan 4 simpul internal, ditempatkan pada kuantil ke-20, ke-40, ke-60, dan ke-80 xmasing-masing. Simpul batas, secara default, ditempatkan pada min dan maks x.

Berikut adalah contoh untuk menentukan lokasi knot

x <- 0:100
ns(x, knots=c(20,35,50))

Jika Anda sebaliknya menelepon ns(x, df=4), Anda akan berakhir dengan 3 simpul internal di lokasi 25, 50, dan 75, masing-masing.

Anda juga dapat menentukan apakah Anda ingin istilah intersepsi. Biasanya ini tidak ditentukan karena nspaling sering digunakan dalam hubungannya dengan lm, yang mencakup intersepsi secara implisit (kecuali dipaksa untuk tidak). Jika Anda menggunakan intercept=TRUEpanggilan Anda untuk ns, pastikan Anda tahu mengapa Anda melakukannya, karena jika Anda melakukan ini dan kemudian menelepon secara lmnaif, matriks desain akan berakhir dengan kekurangan peringkat.

Strategi untuk menempatkan simpul

Simpul paling sering ditempatkan pada kuantil, seperti perilaku default ns. Intuisi adalah bahwa jika Anda memiliki banyak data yang berkerumun berdekatan, maka Anda mungkin ingin lebih banyak simpul di sana untuk memodelkan potensi nonlinier di wilayah itu. Tetapi, itu tidak berarti bahwa ini adalah (a) satu-satunya pilihan atau (b) pilihan terbaik.

Pilihan lain jelas dapat dibuat dan khusus untuk domain. Melihat histogram dan perkiraan kepadatan prediksi Anda dapat memberikan petunjuk di mana simpul diperlukan, kecuali ada beberapa pilihan "kanonik" yang diberikan data Anda.

Dalam hal menafsirkan regresi, saya akan mencatat bahwa, sementara Anda pasti dapat "bermain-main" dengan penempatan simpul, Anda harus menyadari bahwa Anda dikenakan penalti pemilihan model untuk ini sehingga Anda harus berhati-hati untuk mengevaluasi dan harus menyesuaikan setiap kesimpulan sebagai hasil.


Mengingat x <- 0:100, cara "tepat" untuk menentukan breakpoint adalah melakukan knots_x <- quantile(x, probs=c(.2, .35, .5)), yang kemudian akan digunakan ns(x, knots=knots_x)untuk menentukan 3 simpul internal di lokasi 25, 50, dan 75, masing-masing. Apa yang membuat saya bingung dalam jawabannya adalah bahwa saya berharap perlu menentukan kuantil yang diinginkan dalam knotsargumen, sedangkan saya perlu memasukkan nilai aktual dari xvektor ...
landroni

Analisis Survei Kesehatan, Oleh Edward L. Korn, Barry I. Graubard hal.98 menyatakan bahwa Durrleman dan Simon (1989) merekomendasikan (0,05,0.50,0,95) untuk splines alami
Chris
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.