Ich bin sehr verwirrt darüber, wie Gewicht in glm mit family = "binomial" funktioniert. Nach meinem Verständnis wird die Wahrscheinlichkeit des glm mit family = "binomial" wie folgt angegeben: wobeiyder "Anteil des beobachteten Erfolgs" ist undndie bekannte Anzahl von Versuchen ist.
Nach meinem Verständnis wird die Erfolgswahrscheinlichkeit mit einigen linearen Koeffizienten β wie folgt parametrisiert: p = p ( β ) und glm-Funktion mit family = "binomial" suche nach: arg max β ∑ i log f ( y i ) . Dann kann dieses Optimierungsproblem vereinfacht werden als:
Deshalb , wenn wir lassen für alle i = 1 , . . . , N für eine Konstante c , dann muss es auch wahr sein, dass: arg max β ∑ i log f ( y i ) = arg max β ∑ i n ∗ i [ y i log p ( β )
Die Hilfedatei von glm sagt:
"For a binomial GLM prior weights are used to give the number of trials
when the response is the proportion of successes"
Daher erwartete ich, dass die Skalierung des Gewichts das geschätzte angesichts des Erfolgsanteils als Antwort nicht beeinflussen würde . Die folgenden beiden Codes geben jedoch unterschiedliche Koeffizientenwerte zurück:
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)
Dies ergibt:
Call: glm(formula = Y ~ 1, family = "binomial", weights = w)
Coefficients:
(Intercept)
-2.197
Wenn ich alle Gewichte mit 1000 multipliziere, sind die geschätzten Koeffizienten unterschiedlich:
glm(Y~1,weights=w*1000,family=binomial)
Call: glm(formula = Y ~ 1, family = binomial, weights = w * 1000)
Coefficients:
(Intercept)
-3.153e+15
Ich habe viele andere Beispiele wie dieses gesehen, auch wenn die Gewichte mäßig skaliert waren. Was geht hier vor sich?
weights
endet das Argument an zwei Stellen innerhalb derglm.fit
Funktion (in glm.R ), was die Arbeit in R: 1) in den Abweichungsrestwerten über die C-Funktionbinomial_dev_resids
(in family.c ) ist. und 2) im IWLS-Schritt mitCdqrls
(in lm.c ). Ich kenne nicht genug C, um die LogikAntworten:
Ihr Beispiel verursacht lediglich einen Rundungsfehler in R. Große Gewichte funktionieren in nicht gut
glm
. Es stimmt, dass eine Skalierungw
mit praktisch jeder kleineren Zahl, wie beispielsweise 100, zu denselben Schätzungen führt wie die nicht skaliertew
.Wenn Sie ein zuverlässigeres Verhalten mit den weight-Argumenten wünschen, verwenden Sie die
svyglm
Funktion aus demsurvey
Paket.Siehe hier:
quelle
glm.fit
family$initialize
glm.fit
Der relevante
$intialize
Code lautet:Hier ist eine vereinfachte Version,
glm.fit
die meinen Standpunkt zeigtWir können den letzten Teil noch zweimal wiederholen, um festzustellen, dass die Newton-Raphson-Methode divergiert:
Dies passiert nicht, wenn Sie mit
weights <- 1:nrow(y)
oder sagenweights <- 1:nrow(y) * 100
.Beachten Sie, dass Sie Abweichungen vermeiden können, indem Sie das
mustart
Argument setzen. ZB tunquelle
mustart
Argument gebe). Es scheint eine Sache zu sein, die mit einer schlechten anfänglichen Schätzung zusammenhängt .