Hi - Thanks for the reply. I provided answers below. Sally
Sally_roman <sroman <at> umassd.edu> writes: > Hi - I am using R version 2.13.0. I have run several GLMMs using > the glmmPQL function to model the proportion of fish caught in one > net to the total caught in both nets by length. I started with a > polynomial regression full model with three length terms: l, l^2, > and l^3 (l=length). The length terms and intercept were the fixed > effects and the random effect was a paired haul (n=18). > m1<-glmmPQL(fixed=Proportion~1+Length+second+third,random=~1|Pair, > family=binomial,data=species,verbose=T,niter=2, > weight=(Experimental+Control)) Why did you set niter=2? That seems like a bad idea (the default is 10; I can imagine increasing it if there are warnings that the fit hasn't converged, but I don't see why you would decrease it). I set niter=2 after I ran the models with the default. All models converged within 2 iterations. > For the majority of the models, I ended up with a constant model with no > length effect. This isn't quite clear: did you do some kind of stepwise model reduction or AIC-based model selection? I used a step wise backward selection for length terms and terms were removed if they were not significant. > The issue I am having is with the confidence intervals that > were calculated. For two models the CIs are not symmetrical around the > mean > proportion from the model. The CIs for the other constant models are > symmetrical around the mean. I was wondering if anyone has an idea why > this > would be or if anyone has any suggestions. > Thanks Sally There's not enough detail here to answer. How did you get your confidence intervals? A reproducible example would be helpful. If m1 is the result of a glmmPQL fit, then confint(m1) gives odd results (because it calls confint.default, which doesn't really know what to do with the results of the fit); intervals(m1) might be more what you're looking for. #subsample of data Pair Species Length Experimental Control Proportion second third 2 Monkfish 23 0 1 0 529 12167 2 Monkfish 27 0 1 0 729 19683 7 Monkfish 27 0 2 0 729 19683 8 Monkfish 27 0 1 0 729 19683 14 Monkfish 28 1 0 1 784 21952 13 Monkfish 29 0 1 0 841 24389 14 Monkfish 29 0 1 0 841 24389 1 Monkfish 30 0 1 0 900 27000 5 Monkfish 30 0 2 0 900 27000 18 Monkfish 30 1 0 1 900 27000 4 Monkfish 31 1 0 1 961 29791 5 Monkfish 31 0 1 0 961 29791 11 Monkfish 31 0 1 0 961 29791 2 Monkfish 32 0 1 0 1024 32768 11 Monkfish 32 0 1 0 1024 32768 12 Monkfish 32 0 1 0 1024 32768 18 Monkfish 32 1 1 0.5 1024 32768 4 Monkfish 34 0 1 0 1156 39304 17 Monkfish 34 0 1 0 1156 39304 18 Monkfish 34 0 1 0 1156 39304 18 Monkfish 35 0 1 0 1225 42875 1 Monkfish 37 0 1 0 1369 50653 2 Monkfish 40 1 0 1 1600 64000 14 Monkfish 40 0 1 0 1600 64000 18 Monkfish 40 1 0 1 1600 64000 This is my model code #Models #Select trip t<-t1 #select species species<-subset(t,Species=="Monkfish") #define polynomials #2nd order poly second<-species$Length^2 #3rd order poly third<-species$Length^3 #combine species,second & third species<-cbind(species,second,third) #backward selection #full model m1<-glmmPQL(fixed=Proportion~1+Length+second+third,random=~1|Pair,family=binomial,data=species,verbose=T,niter=2,weight=(Experimental+Control)) summary(m1) #2nd order m2<-update(m1, . ~. -third) summary(m2) #linear m3<-update(m2, . ~. -second) summary(m3) #constant m4<-update(m3, . ~. -Length) summary(m4) I used some code that was passed to me from a colleague who got it from someone else. I tried to go through the code to understand it, but got stuck on a couple of areas. I did not hear back from the original person who wrote the code. Here is the code for a constant model - #CIs get.sel.and.conf.band.catch=function(parm,varm,l.min,l.max,n=200){ lgt<-seq(l.min,l.max,length=n) X=sapply(1:length(parm),function(i){lgt^(i-1)}) reg.line=X%*%parm se=apply(X,1,function(x,varm){sqrt(t(x)%*%varm%*%x)},varm) cbind(lengtht=lgt,min.L50=reg.line-2*se,mean.L50=reg.line,max.L50=reg.line+2*se) } #plots model results plot.fit=function(glmm.fit,limx,Spec.Text){ varm=glmm.fit$varFix coeff=glmm.fit$coeff$fixed eta.matrix=get.sel.and.conf.band.catch(coeff,varm,min(limx),max(limx)) xxx=c(eta.matrix[,1],rev(eta.matrix[,1])) yyy=c(ilogit(eta.matrix[,2]),rev(ilogit(eta.matrix[,4]))) plot(eta.matrix[,1],ilogit(eta.matrix[,3]) ,type="l" ,xlab="Length (cm)" ,ylab="Proportion: exp/(exp+control)" ,ylim=c(0,1), xlim=limx ,col="black",lwd=2,las=1 ,axes=FALSE ,family="serif") axis(1,labels=T,cex.axis=0.9) #axis(3,labels=TRUE,cex.axis=0.9) axis(2,labels=TRUE,las=2,cex.axis=0.9) box() lines(eta.matrix [,1],ilogit(eta.matrix [,2]),col=4) lines(eta.matrix[,1],ilogit(eta.matrix[,4]),col=2) polygon(xxx,yyy,col="grey",density=NULL,border="black") lines(eta.matrix[,1],ilogit(eta.matrix[,3]),col=1,lwd=2) abline(h=0.5,lty=2) text(sum(limx)/2,0.9,Spec.Text,cex=1) } #model plot code plot.fit(m4,c(min(species$Length),max(species$Length)),paste(unique(species$Species))) I looked at other code online from Daniel Hocking which is based on your code and your code from glmm.wikidot.com. There are differences between what I received and your code. Since you are fitting a binomial model, you may be looking for confidence intervals on the linear predictor (logit) scale, in which case they should always be symmetric around the estimate, or on the response (probability) scale, in which case they should always be asymmetric. You may want to send questions about mixed models to the [hidden email] mailing list. Thank you - I will send an email to the mixed model mailing list. Thanks again -- View this message in context: http://r.789695.n4.nabble.com/confidence-intervals-with-glmmPQL-tp4649637p4650972.html Sent from the R help mailing list archive at Nabble.com. ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.