Em R, usando binomial() e lapply para restringir valores de previsão() entre 0 e 1
Pergunta
Eu tenho um modelo GLM, family=binomial(link=logit) que aplico dentro de uma função predict(), vista abaixo.Os valores previstos vão além de zero e 1, mas gostaria de mantê-los como probabilidades.Então eu uso o comando binomial()$inverse que pode ser usado na função apply.
Isso funcionou muito bem na primeira vez que executei, mas depois de fechar o R e começar novamente, agora recebo este erro:
Error in get(as.character(FUN), mode = "function", envir = envir) :
object 'ilogit' of mode 'function' was not found"
Estou lutando com isso há horas, pois esse código normalmente funcionava.Alguém tem uma idéia do que estou fazendo de errado?Existe um jeito melhor de fazer isso?
Meu código está abaixo.Também tentei outra variação, mas não consigo fazê-la funcionar.
## predicted probabilities
pp <- predict(logit_model,
newdata=data,
type="link",
se.fit=T)
ilogit <- binomial()$inverse
yhat_prob <- lapply(pp,ilogit) #converts to probabilities
Solução
Se você quiser as probabilidades, poderá obtê-las diretamente com type="response"
, conforme explicado na documentação, ?pregict.glm
.
Para a mensagem de erro que você recebe, você provavelmente precisará binomial()$linkinv
.
> str( binomial() )
List of 12
$ family : chr "binomial"
$ link : chr "logit"
$ linkfun :function (mu)
$ linkinv :function (eta)
$ variance :function (mu)
...
A falta de erro provavelmente foi devido a algum pacote que você carregou, que definiu um ilogit
função.