Saya sangat bingung dengan bagaimana berat bekerja di glm dengan family = "binomial". Dalam pemahaman saya, kemungkinan glm dengan family = "binomial" ditentukan sebagai berikut: mana adalah "proporsi keberhasilan yang diamati" dan adalah jumlah percobaan yang diketahui.yn
Dalam pemahaman saya, probabilitas keberhasilan adalah parametrized dengan beberapa koefisien linier sebagai dan fungsi glm dengan pencarian family = "binomial" untuk: Maka masalah optimasi ini dapat disederhanakan sebagai:β p = p ( β ) arg max β ∑ i
Oleh karena itu jika kita membiarkan untuk semua untuk beberapa konstanta , maka harus juga benar bahwa:
File bantuan glm mengatakan:
"For a binomial GLM prior weights are used to give the number of trials
when the response is the proportion of successes"
Oleh karena itu saya berharap bahwa penskalaan berat tidak akan mempengaruhi perkiraan mengingat proporsi keberhasilan sebagai respons. Namun dua kode berikut mengembalikan nilai koefisien yang berbeda:
Y <- c(1,0,0,0) ## proportion of observed success
w <- 1:length(Y) ## weight= the number of trials
glm(Y~1,weights=w,family=binomial)
Ini menghasilkan:
Call: glm(formula = Y ~ 1, family = "binomial", weights = w)
Coefficients:
(Intercept)
-2.197
sementara jika saya kalikan semua bobot dengan 1000, koefisien yang diperkirakan berbeda:
glm(Y~1,weights=w*1000,family=binomial)
Call: glm(formula = Y ~ 1, family = binomial, weights = w * 1000)
Coefficients:
(Intercept)
-3.153e+15
Saya melihat banyak contoh lain seperti ini bahkan dengan beberapa skala dalam bobot. Apa yang terjadi disini?
weights
argumen berakhir di dua tempat di dalamglm.fit
fungsi (di glm.R ), yang merupakan pekerjaan di R: 1) dalam residu penyimpangan, dengan cara fungsi Cbinomial_dev_resids
(dalam keluarga.c ) dan 2) pada langkah IWLS dengan caraCdqrls
(dalam lm.c ). Saya tidak tahu cukup C untuk bisa lebih membantu dalam melacak logikaJawaban:
Contoh Anda hanya menyebabkan kesalahan pembulatan di R. Bobot besar tidak berkinerja baik di
glm
. Benar bahwa penskalaanw
dengan jumlah yang lebih kecil, seperti 100, mengarah ke perkiraan yang sama dengan yang tidak dihitungw
.Jika Anda ingin perilaku yang lebih andal dengan argumen bobot, coba gunakan
svyglm
fungsi darisurvey
paket.Lihat disini:
sumber
glm.fit
family$initialize
glm.fit
$intialize
Kode yang relevan adalah:Ini adalah versi sederhana
glm.fit
yang menunjukkan poin sayaKita dapat mengulangi bagian terakhir dua kali lagi untuk melihat bahwa metode Newton-Raphson berbeda:
Ini tidak terjadi jika Anda memulai
weights <- 1:nrow(y)
atau mengatakanweights <- 1:nrow(y) * 100
.Perhatikan bahwa Anda dapat menghindari perbedaan dengan menetapkan
mustart
argumen. Misalnya lakukansumber
mustart
argumen). Sepertinya masalah yang terkait dengan perkiraan awal yang buruk .