Saya menjalankan model regresi LOESS dalam R, dan saya ingin membandingkan output dari 12 model yang berbeda dengan ukuran sampel yang bervariasi. Saya dapat menjelaskan model yang sebenarnya lebih terinci jika itu membantu dengan menjawab pertanyaan.
Berikut adalah ukuran sampel:
Fastballs vs RHH 2008-09: 2002
Fastballs vs LHH 2008-09: 2209
Fastballs vs RHH 2010: 527
Fastballs vs LHH 2010: 449
Changeups vs RHH 2008-09: 365
Changeups vs LHH 2008-09: 824
Changeups vs RHH 2010: 201
Changeups vs LHH 2010: 330
Curveballs vs RHH 2008-09: 488
Curveballs vs LHH 2008-09: 483
Curveballs vs RHH 2010: 213
Curveballs vs LHH 2010: 162
Model regresi LOESS adalah fit permukaan, di mana lokasi X dan lokasi Y dari masing-masing lapangan baseball digunakan untuk memprediksi probabilitas sw, pukulan ayun. Namun, saya ingin membandingkan antara 12 model ini, tetapi pengaturan rentang yang sama (yaitu rentang = 0,5) akan menghasilkan hasil yang berbeda karena ada berbagai ukuran sampel.
Pertanyaan dasar saya adalah bagaimana Anda menentukan rentang model Anda? Rentang yang lebih tinggi memuluskan fit lebih banyak, sementara rentang yang lebih rendah menangkap lebih banyak tren tetapi memperkenalkan kebisingan statistik jika ada terlalu sedikit data. Saya menggunakan rentang yang lebih tinggi untuk ukuran sampel yang lebih kecil dan rentang yang lebih rendah untuk ukuran sampel yang lebih besar.
Apa yang harus saya lakukan? Apa aturan praktis yang baik ketika menetapkan rentang untuk model regresi LOESS di R? Terima kasih sebelumnya!
sumber
Jawaban:
Validasi silang sering digunakan, misalnya k- lipat, jika tujuannya adalah menemukan kecocokan dengan RMSEP terendah. Bagi data Anda menjadi kelompok k dan, biarkan masing-masing kelompok keluar, muat model loess menggunakan kelompok data k -1 dan nilai yang dipilih dari parameter smoothing, dan gunakan model itu untuk memprediksi untuk kelompok yang ditinggalkan. Simpan nilai yang diprediksi untuk kelompok yang ditinggalkan dan kemudian ulangi sampai masing-masing kelompok k telah ditinggalkan satu kali. Menggunakan set nilai yang diprediksi, hitung RMSEP. Kemudian ulangi semuanya untuk setiap nilai parameter penghalusan yang ingin Anda sempurnakan. Pilih parameter smoothing yang menghasilkan RMSEP terendah di bawah CV.
Seperti yang Anda lihat, ini adalah komputasi yang cukup berat. Saya akan terkejut jika tidak ada alternatif lintas-validasi umum (GCV) untuk CV sejati yang dapat Anda gunakan dengan LOESS - Hastie et al (bagian 6.2) menunjukkan ini cukup sederhana untuk dilakukan dan dibahas dalam salah satu latihan mereka .
Saya sarankan Anda membaca bagian 6.1.1, 6.1.2 dan 6.2, ditambah bagian tentang regularisasi dari splines smoothing (seperti konten berlaku di sini juga) dalam Bab 5 dari Hastie et al. (2009) Elemen Pembelajaran Statistik: Penambangan data, inferensi, dan prediksi . Edisi ke-2. Peloncat. PDF dapat diunduh secara gratis.
sumber
Saya sarankan untuk memeriksa model aditif umum (GAM, lihat paket mgcv dalam R). Saya hanya belajar tentang mereka sendiri, tetapi mereka tampaknya secara otomatis mencari tahu berapa banyak "kegoyahan" dibenarkan oleh data. Saya juga melihat bahwa Anda berurusan dengan data binomial (mogok vs bukan mogok), jadi pastikan untuk menganalisis data mentah (mis. Jangan agregat ke proporsi, gunakan data pitch-by-pitch yang mentah) dan gunakan family = 'binomial' (dengan asumsi Anda akan menggunakan R). Jika Anda memiliki informasi tentang kontribusi pitcher dan hitter pada data, Anda mungkin dapat meningkatkan kekuatan Anda dengan melakukan model campuran aditif umum (GAMM, lihat paket gamm4 dalam R) dan tentukan pitcher dan hitter sebagai efek acak (dan lagi , pengaturan family = 'binomial'). Akhirnya, Anda mungkin ingin mengizinkan interaksi antara smooth X & Y, tapi saya belum pernah mencobanya sendiri jadi saya tidak tahu bagaimana cara melakukannya. Model gamm4 tanpa interaksi X * Y akan terlihat seperti:
Kalau dipikir-pikir, Anda mungkin ingin membiarkan smooths bervariasi dalam setiap tingkat jenis pitch dan adonan kidal. Ini membuat masalah lebih sulit karena saya belum menemukan cara untuk membiarkan smooths bervariasi oleh beberapa variabel dengan cara yang kemudian menghasilkan tes analitik yang bermakna ( lihat pertanyaan saya ke daftar R-SIG-Mixed-Models ). Kamu bisa mencoba:
Tapi ini tidak akan memberikan tes yang berarti dari smooths. Dalam mencoba menyelesaikan masalah ini sendiri, saya telah menggunakan bootstrap resampling di mana pada setiap iterasi saya mendapatkan prediksi model untuk ruang data lengkap kemudian menghitung bootstap 95% CI untuk setiap titik di ruang dan setiap efek yang ingin saya hitung.
sumber
Untuk regresi loess, pemahaman saya sebagai non-ahli statistik, adalah bahwa Anda dapat memilih rentang berdasarkan interpretasi visual (plot dengan banyak nilai rentang dapat memilih yang dengan jumlah smoothing paling sedikit yang tampaknya sesuai) atau Anda dapat menggunakan validasi silang (CV) atau validasi silang umum (GCV). Di bawah ini adalah kode yang saya gunakan untuk GCV dari regresi loess berdasarkan kode dari buku Takezawa yang bagus, Pengantar Regresi Nonparametrik (dari p219).
dan dengan data saya, saya melakukan hal berikut:
Maaf kodenya agak ceroboh, ini adalah salah satu kali pertama saya menggunakan R, tetapi harus memberi Anda gagasan tentang bagaimana melakukan GSV untuk regresi loess untuk menemukan rentang terbaik untuk digunakan dalam cara yang lebih objektif daripada inspeksi visual sederhana. Pada plot di atas, Anda tertarik pada rentang yang meminimalkan fungsi (terendah pada "kurva" yang diplot).
sumber
Jika Anda beralih ke model aditif umum, Anda dapat menggunakan
gam()
fungsi dari paket mgcv , di mana penulis meyakinkan kami :(di
k
sini adalah parameter derajat kebebasan untuk lebih halus, yang mirip dengan parameter kelancaran loess ')sumber
Anda bisa menulis loop validasi silang Anda sendiri dari awal yang menggunakan
loess()
fungsi daristats
paket.Siapkan kerangka data mainan.
Siapkan variabel yang berguna untuk menangani loop validasi silang.
Jalankan
for
perulangan bersarang di setiap kemungkinan rentangspan.seq
, dan setiap lipatanfolds
.Plot hasil Anda.
sumber
Gunakan paket locfit. Versi loess yang sedikit dimodifikasi tetapi jauh lebih cepat. Ini juga memiliki fungsi bawaan untuk menghitung gcv http://www.statistik.lmu.de/~leiten/Lehre/Material/GLM_0708/Tutorium/locfit.pdf
sumber
The fANCOVA paket menyediakan cara otomatis untuk menghitung rentang ideal menggunakan GCV atau aic:
sumber