Estoy muy confundido con cómo funciona el peso en glm con family = "binomial". En mi opinión, la probabilidad de la glm con family = "binomial" se especifica de la siguiente manera:
En mi opinión, la probabilidad de éxito se parametriza con algunos coeficientes lineales como y la función glm con family = "binomial" busca:
Por lo tanto, si dejamos que para toda i = 1 , . . . , N para alguna constante c , entonces también debe ser cierto que: arg max β ∑ i log f ( y i ) = arg max β ∑ i n ∗ i [ y i log p ( β )
El archivo de ayuda de glm dice:
"For a binomial GLM prior weights are used to give the number of trials
when the response is the proportion of successes"
Por lo tanto, esperaba que el aumento de peso no afectara la estimada dada la proporción de éxito como respuesta. Sin embargo, los siguientes dos códigos devuelven valores de coeficientes diferentes:
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)
Esto produce:
Call: glm(formula = Y ~ 1, family = "binomial", weights = w)
Coefficients:
(Intercept)
-2.197
mientras que si multiplico todos los pesos por 1000, los coeficientes estimados son diferentes:
glm(Y~1,weights=w*1000,family=binomial)
Call: glm(formula = Y ~ 1, family = binomial, weights = w * 1000)
Coefficients:
(Intercept)
-3.153e+15
Vi muchos otros ejemplos como este, incluso con una escala moderada en los pesos. ¿Que esta pasando aqui?
weights
argumento termina en dos lugares dentro de laglm.fit
función (en glm.R ), que es lo que hace el trabajo en R: 1) en los residuales de desviación, a través de la función Cbinomial_dev_resids
(en family.c ) y 2) en el paso IWLS a modo deCdqrls
(en lm.c ). No sé lo suficiente C para ser de más ayuda en el seguimiento de la lógicaRespuestas:
Su ejemplo simplemente está causando un error de redondeo en R. Los pesos grandes no funcionan bien en
glm
. Es cierto que escalarw
en prácticamente cualquier número más pequeño, como 100, conduce a las mismas estimaciones que las sin escalaw
.Si desea un comportamiento más confiable con los argumentos de pesos, intente usar la
svyglm
función delsurvey
paquete.Mira aquí:
fuente
glm.fit
family$initialize
glm.fit
El
$intialize
código relevante es:Aquí hay una versión simplificada de la
glm.fit
cual muestra mi puntoPodemos repetir la última parte dos veces más para ver que el método Newton-Raphson diverge:
Esto no sucede si comienzas
weights <- 1:nrow(y)
o dicesweights <- 1:nrow(y) * 100
.Tenga en cuenta que puede evitar divergencias configurando el
mustart
argumento. Eg hacerfuente
mustart
argumento). Parece un asunto relacionado con una mala estimación inicial .