Como obter erros padrão da regressão de dados de contagem inflada a zero com R? [fechadas]


9

O código a seguir

PredictNew <- predict (glm.fit, newdata = Predict, X1 =X1, Y1= Y1, 
                       type = "response", se.fit = TRUE)

produz um data.frame--PredictNew de 3 colunas , os valores ajustados, os erros padrão e um termo residual da escala.

Perfeito ... No entanto, usando um modelo equipado com zeroinfl {pscl}:

PredictNew <- predict (zeroinfl.fit, newdata = Predict, X1 =X1, Y1= Y1, 
                       type = "response", se.fit = TRUE)

ou

PredictNew <- predict (zeroinfl.fit, newdata = Predict, X1 =X1, Y1= Y1, 
                       type = "response", se.fit = TRUE, MC = 2500, conf = .95))

produza um vetor de coluna única apenas de valores ajustados. No entanto, eu gostaria muito de ter erros padrão. Tudo o que li diz que eles devem ser produzidos.

(O código foi um pouco simplificado, na verdade, tenho quatro variáveis ​​e um deslocamento - sem probs com as SEs predict.glme se.fit = TRUEprodutoras.)


5
Dê uma olhada neste tópico na R-Help: stat.ethz.ch/pipermail/r-help/2008-December/thread.html#182806 (particularmente a mensagem de Achim Zeileis que fornece código para fazer o que eu acho que você está tentando fazer). Não parece que erros padrão tenham sido implementados na predict()função zeroinfl()no momento.
— smillig

Obrigado, esse código parecia produzir resultados bastante razoáveis. Outros devem observar que o parâmetro prever () na nova função zeroinfl.predict para se.fit = TRUE foi mudado para se = TRUE, a fim de extrair os intervalos previstos e se
— KalahariKev

Respostas:


4

Que eu saiba, o predictmétodo para obter resultados zeroinflnão inclui erros padrão. Se seu objetivo é construir intervalos de confiança, uma alternativa atraente é usar o bootstrap. Eu digo atraente porque o bootstrapping tem o potencial de ser mais robusto (com perda de eficiência se todas as suposições para as SEs forem atendidas).

Aqui está um código aproximado para fazer o que você deseja. Não funcionará exatamente, mas espero que você possa fazer as correções necessárias.

## load boot package
require(boot)
## output coefficients from your original model
## these can be used as starting values for your bootstrap model
## to help speed up convergence and the bootstrap
dput(round(coef(zeroinfl.fit, "count"), 3))
dput(round(coef(zeroinfl.fit, "zero"), 3))

## function to pass to the boot function to fit your model
## needs to take data, an index (as the second argument!) and your new data
f <- function(data, i, newdata) {
  require(pscl)
  m <- zeroinfl(count ~ child + camper | persons, data = data[i, ], start = list(count = c(1.598, -1.0428, 0.834), zero = c(1.297, -0.564)))
  mparams <- as.vector(t(do.call(rbind, coef(summary(m)))[, 1:2]))
  yhat <- predict(m, newdata, type = "response")
  return(c(mparams, yhat))    
}

## set the seed and do the bootstrap, make sure to set your number of cpus
## note this requires a fairly recent version of R
set.seed(10)
res <- boot(dat, f, R = 1200, newdata = Predict, parallel = "snow", ncpus = 4)

## get the bootstrapped percentile CIs
## the 10 here is because in my initial example, there were 10 parameters before predicted values
yhat <- t(sapply(10 + (1:nrow(Predict)), function(i) {
  out <- boot.ci(res, index = i, type = c("perc"))
  with(out, c(Est = t0, pLL = percent[4], pUL = percent[5]))
}))

## merge CIs with predicted values
Predict<- cbind(Predict, yhat)

Eu desenhei esse código de duas páginas que escrevi, um parâmetro de bootstrapping de uma regressão de poisson inflada com zeroinfl zero com poisson inflado com zero e um demonstrando como obter intervalos de confiança de bootstrap para valores previstos de um modelo binomial negativo zero truncado Binomial negativo truncado zero . Combinado, esperançosamente, isso fornece exemplos suficientes para fazê-lo funcionar com valores previstos de um poisson inflado com zero. Você também pode obter algumas idéias gráficas :)


Tentei adaptar seu código para um modelo binomial negativo com truncamento zero no pacote VGAM, mas recebi um erro. Devo criar uma nova pergunta aqui no CV e vincular aqui? Eu realmente aprecio sua ajuda com isso. Especificamente, este é o erro que eu recebo: Error in X.vlm.save %*% coefstart : non-conformable arguments.
— Raphael K #
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.