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.)

KalahariKev
fonte
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 :)

Joshua
fonte
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 #