En R, usando binomial() y lapply para restringir los valores de predicción() entre 0 y 1
Pregunta
Tengo un modelo GLM, family=binomial(link=logit) que aplico dentro de una función predict(), como se ve a continuación.Los valores de predicción van más allá de cero y 1, pero me gustaría mantenerlos como probabilidades.Entonces uso el comando binomial()$inverse que luego se puede usar en la función de aplicación.
Esto funcionó bien la primera vez que lo ejecuté, pero después de cerrar R y comenzar de nuevo, aparece este error:
Error in get(as.character(FUN), mode = "function", envir = envir) :
object 'ilogit' of mode 'function' was not found"
He estado luchando con esto durante horas, ya que este código normalmente funcionaba.¿Alguien tiene una idea de lo que estoy haciendo mal?¿Existe una mejor manera de hacer esto?
Mi código está debajo.También probé otra variación pero no puedo hacer que funcione.
## predicted probabilities
pp <- predict(logit_model,
newdata=data,
type="link",
se.fit=T)
ilogit <- binomial()$inverse
yhat_prob <- lapply(pp,ilogit) #converts to probabilities
Solución
Si quieres las probabilidades, puedes tenerlas directamente con type="response"
, como se explica en la documentación, ?pregict.glm
.
Para el mensaje de error que recibe, probablemente necesite binomial()$linkinv
.
> str( binomial() )
List of 12
$ family : chr "binomial"
$ link : chr "logit"
$ linkfun :function (mu)
$ linkinv :function (eta)
$ variance :function (mu)
...
La falta de error probablemente se debió a algún paquete que habías cargado, que definía un ilogit
función.