2012-11-12 10 views
9

Sto provando a eseguire un modello di sopravvivenza del nido usando il metodo di esposizione logistica basato su Shaffer, 2004. Ho una serie di parametri e desidero confrontare tutti i possibili modelli e quindi stimare i parametri mediati dal modello usando il restringimento come in Burnham e Anderson, 2002. Tuttavia, sto avendo problemi a capire come stimare gli intervalli di confidenza per i parametri aggiustati per il restringimento.Calcolare gli intervalli di confidenza per i dati medi del modello usando il restringimento in R

È possibile stimare intervalli di confidenza per i parametri mediati dal modello stimati utilizzando il restringimento? Posso facilmente estrarre le stime medie per i parametri mediati dal modello con il restringimento utilizzando model.average $ coef.shrinkage ma non sono chiaro come ottenere gli intervalli di confidenza corrispondenti.

Qualsiasi aiuto è gradito. Attualmente sto lavorando con il pacchetto MuMIn mentre ottengo errori con AICcmodavg riguardo alla funzione di collegamento.

Qui di seguito è una versione semplificata del codice che sto utilizzando:

library(MuMIn) 

# Logistical Exposure Link Function 
# See Shaffer, T. 2004. A unifying approach to analyzing nest success. 
# Auk 121(2): 526-540. 

logexp <- function(days = 1) 
{ 
    require(MASS) 
    linkfun <- function(mu) qlogis(mu^(1/days)) 
    linkinv <- function(eta) plogis(eta)^days 
    mu.eta <- function(eta) days * plogis(eta)^(days-1) * 
    .Call("logit_mu_eta", eta, PACKAGE = "stats") 
    valideta <- function(eta) TRUE 
    link <- paste("logexp(", days, ")", sep="") 
    structure(list(linkfun = linkfun, linkinv = linkinv, 
      mu.eta = mu.eta, valideta = valideta, name = link), 
     class = "link-glm") 
} 

# randomly generate data 
nest.data <- data.frame(egg=rep(1,100), chick=runif(100), exposure=trunc(rnorm(100,113,10)), density=rnorm(100,0,1), height=rnorm(100,0,1)) 
    nest.data$chick[nest.data$chick<=0.5] <- 0 
    nest.data$chick[nest.data$chick!=0] <- 1 

# run global logistic exposure model 
glm.logexp <- glm(chick/egg ~ density * height, family=binomial(logexp(days=nest.data$exposure)), data=nest.data) 

# evaluate all possible models 
model.set <- dredge(glm.logexp) 

# model average 95% confidence set and estimate parameters using shrinkage 
mod.avg <- model.avg(model.set, beta=TRUE) 
(mod.avg$coef.shrinkage) 

Tutte le idee su come estrarre/generare i corrispondenti intervalli di confidenza?

Grazie Amy

+1

Questo è un po 'di modellazione davvero cool. Non lo capisco appieno, ma presumo che tu sia consapevole del fatto che mod.avg $ avg.model restituisce gli elementi della configurazione e stai chiedendo delle stime che utilizzano il restringimento, che, se ho capito bene, non lo sono. E l'aiuto per model.avg usa questo per gli elementi della configurazione ma non sono sicuro di cosa stia facendo l'argomento cumsum (peso): confint (model.avg (model.set, cumsum (weight) <= .95)) – MattBagg

+1

più, questa domanda potrebbe ricevere maggiore attenzione in Cross-validated (stats.stackexchange.com), che in realtà ha un tag di restringimento. Nella misura in cui la domanda riguarda il metodo appropriato per stimare gli elementi della configurazione in questo tipo di modello, è più una domanda di statistiche che una domanda di codifica. – MattBagg

+0

Grazie @ mb3041023. L'argomento 'cumsum (weight = x)' limita i modelli inclusi nel modello facendo la media a quelli il cui peso cumulativo è uguale a x. Sfortunatamente 'confint' non usa il restringimento ma ho escogitato un trucco che penso funzioni basato sull'equazione 5 in Lukacs, P.M., Burnham, K.P., Anderson, D.R. (2009). Bias di selezione del modello e paradosso di Freedman. Annali dell'Istituto di statistica matematica, 62 (1), 117-125. Codice incluso in un commento separato. Grazie anche per l'heads-up su Cross-validated. – nzwormgirl

risposta

2

Dopo riflettere su questo per un po ', hanno escogitato la seguente soluzione basata su equazione 5 in Lukacs, P. M., Burnham, K. P., & Anderson, D. R. (2009). Bias di selezione del modello e paradosso di Freedman. Annali dell'Istituto di matematica statistica, 62 (1), 117-125. Sarebbe gradito qualsiasi commento sulla sua validità.

Il codice fa seguito a quello di cui sopra:

# MuMIn generated shrinkage estimate 
    shrinkage.coef <- mod.avg$coef.shrinkage 

# beta parameters for each variable/model combination 
coef.array <- mod.avg$coefArray 
    coef.array <- replace(coef.array, is.na(coef.array), 0) # replace NAs with zeros 

# generate empty dataframe for estimates 
shrinkage.estimates <- data.frame(shrinkage.coef,variance=NA) 

# calculate shrinkage-adjusted variance based on Lukacs et al, 2009 
for(i in 1:dim(coef.array)[3]){ 
    input <- data.frame(coef.array[,,i],weight=model.set$weight) 

    variance <- rep(NA,dim(input)[2]) 
    for (j in 1:dim(input)[2]){ 
    variance[j] <- input$weight[j] * (input$Std..Err[j]^2 + (input$Estimate[j] - shrinkage.estimates$shrinkage.coef[i])^2) 
    } 
    shrinkage.estimates$variance[i] <- sum(variance) 
} 

# calculate confidence intervals 
shrinkage.estimates$lci <- shrinkage.estimates$shrinkage.coef - 1.96*shrinkage.estimates$variance 
shrinkage.estimates$uci <- shrinkage.estimates$shrinkage.coef + 1.96*shrinkage.estimates$variance 
+0

La mia ipotesi è che intendevi usare la radice quadrata della varianza quando costruisci i tuoi intervalli di confidenza di restringimento invece della varianza. A meno che non mi fossi perso dove hai preso la radice quadrata? – aosmith

Problemi correlati