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 splines
paket dengan ns
fungsi. 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
.
Jawaban:
Cara menentukan simpul di R
The
ns
Fungsi menghasilkan spline regresi alami secara diberikan vektor input. Knot dapat ditentukan baik melalui argumen derajat kebebasandf
yang mengambil integer atau melalui argumen knotknots
yang mengambil vektor yang memberikan penempatan knot yang diinginkan. Perhatikan bahwa dalam kode yang Anda tulisAnda belum meminta lima simpul, melainkan meminta satu simpul (interior) di lokasi 5.
Jika Anda menggunakan
df
argumen, maka simpul interior akan dipilih berdasarkan pada kuantil vektorx
. Misalnya, jika Anda melakukan panggilanKemudian dasar akan mencakup dua simpul batas dan 4 simpul internal, ditempatkan pada kuantil ke-20, ke-40, ke-60, dan ke-80
x
masing-masing. Simpul batas, secara default, ditempatkan pada min dan maksx
.Berikut adalah contoh untuk menentukan lokasi knot
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
ns
paling sering digunakan dalam hubungannya denganlm
, yang mencakup intersepsi secara implisit (kecuali dipaksa untuk tidak). Jika Anda menggunakanintercept=TRUE
panggilan Anda untukns
, pastikan Anda tahu mengapa Anda melakukannya, karena jika Anda melakukan ini dan kemudian menelepon secaralm
naif, 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.
sumber
x <- 0:100
, cara "tepat" untuk menentukan breakpoint adalah melakukanknots_x <- quantile(x, probs=c(.2, .35, .5))
, yang kemudian akan digunakanns(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 dalamknots
argumen, sedangkan saya perlu memasukkan nilai aktual darix
vektor ...