[R-sig-ME] Error in phylogenetic ordinal model with MCMCglmm()

Pierre de Villemereuil pierre@de@villemereuil @ending from m@iloo@org
Thu Aug 2 15:46:10 CEST 2018


Hi,

Contrary to "categorical", the "ordinal" family is not multivariate on the latent scale, so you need to drop everything related to "trait" in the ordinal model and modify the prior to be univariate as well.

I think MCMCglmm is complaining here because "trait" does not have more than one level due to this.

Hope this helps,
Pierre.

Le jeudi 2 août 2018, 15:24:55 CEST roee maor a écrit :
> Dear list,
> 
> I'm using MCMCglmm to run a phylogenetic model where the response is a
> 3-level ordinal factor (i.e. level 2 is an intermediate phenotype
> between 1 and 3), and the predictors include one factorial (foraging
> habitat), one ordinal (trophic level), and several continuous
> variables.
> 
> As far as I know MCMCglmm is the only package that can handle logistic
> models for phylogenetically structured multi-level discrete data, but
> please correct me if that's not the case.
> 
> My problem right now is that I can't get MCMCglmm() to work with the
> 'family' argument set to "ordinal", although it does work with
> "categorical".
> Here's the code I'm using:
> 
> > packageVersion("MCMCglmm")
> [1] ‘2.25’
> > R.version.string
> [1] "R version 3.4.3 (2017-11-30)"
> 
> ## model specifications:
> > INphylo <- inverseA(mammaltree, nodes="ALL", scale=TRUE)  ## phylogeny with 1399 tips, setting nodes="TIPS" is extremely slow
> > k <- length(levels(valid$Response))
> > I <- diag(k-1)
> > J <- matrix(rep(1, (k-1)^2), c(k-1, k-1))
> 
> ## categorical model (unordered response) - runs to completion
> > m1 <- MCMCglmm(Response ~ -1 + trait + ForagingHab + Troph_Lev + Mass + Mean.Diur.Range + Max.Temp.Warmest.M + Temp.Annual.Range + Precip.Driest.Month + PET,
> +                random = ~ us(trait):Binomial,
> +                rcov = ~ us(trait):units,
> +                prior = list(R = list(fix=1, V=(1/k) * (I + J), n = k-1),
> +                             G = list(G1 = list(V = diag(k-1), n = k-1))),
> +                ginverse = list(Binomial=INphylo$Ainv),
> +                burnin = 300000,
> +                nitt = 3000000,
> +                thin = 2000,
> +                family = "categorical",
> +                data = valid,
> +                pl = TRUE)
> 
> ## ordinal model and error message
> > m2 <- MCMCglmm(Response ~ -1 + trait + ForagingHab + Troph_Lev + Mass + Mean.Diur.Range + Max.Temp.Warmest.M + Temp.Annual.Range + Precip.Driest.Month + PET,
> +                random = ~ us(trait):Binomial,
> +                rcov = ~ us(trait):units,
> +                prior = list(R = list(fix=1, V=1, n = k-1),
> +                             G = list(G1 = list(V = diag(k-1), n = k-1))),
> +                ginverse = list(Binomial=INphylo$Ainv),
> +                burnin = 300000,
> +                nitt = 3000000,
> +                thin = 2000,
> +                family = "ordinal",
> +                data = valid,
> +                pl = TRUE)
> Error in `contrasts<-`(`*tmp*`, value = contr.funs[1 + isOF[nn]]) :
>   contrasts can be applied only to factors with 2 or more levels
> 
> ## the shape of the data
> > str(valid)
> 'data.frame': 1399 obs. of  16 variables:
>  $ Binomial           : chr  "Abrocoma_bennettii" "Abrothrix_andinus"
> "Abrothrix_jelskii" "Abrothrix_longipilis" ...
>  $ Response           : Factor w/ 3 levels "1","2","3": 1 3 2 2 2 3 2 3 1 3 ...
>  $ ForagingHab        : Factor w/ 7 levels "1","3","4","5",..: 2 2 2 2
> 2 2 2 2 2 2 ...
>  $ Troph_Lev          : Factor w/ 3 levels "1","2","3": 1 2 2 2 2 3 2 1 1 1 ...
>  $ Mass               : num  250.5 24.9 34.5 38.9 24.5 ...
>  $ Annual.Mean.Temp   : num  12.42 7.26 9.18 9.9 8.62 ...
>  $ Mean.Diur.Range    : num  10.46 13.82 16.16 9.15 7.78 ...
>  $ Max.Temp.Warmest.M : num  22 16.6 19.1 19.8 17.2 ...
>  $ Min.Temp.Coldest.M : num  3.77 -3.98 -3.24 2.21 1.46 ...
>  $ Temp.Annual.Range  : num  18.3 20.6 22.4 17.6 15.7 ...
>  $ Mean.Temp.Warm.Q   : num  16 9.2 11.1 13.8 12.2 ...
>  $ Mean.Temp.Cold.Q   : num  8.87 4.49 6.39 5.98 4.87 ...
>  $ Annual.Precip      : num  166 645 558 903 1665 ...
>  $ Precip.Driest.Month: num  1.74 5.99 6.31 31.31 104.7 ...
>  $ AET                : num  213 482 704 455 361 ...
>  $ PET                : num  1074 1242 1305 677 638 ...
> 
> 
> I don't understand what factors the error refers to, because there
> sufficient levels in the response even if one is absorbed in the
> intercept.
> 
> The R-constraint in the prior is specified as suggested in the
> MCMCglmm tutorial (fix=1, V=1), but the error message is the same
> whether I use this specification or the categorical model
> specification (fix=1, V=(1/k)*(I + J)) .
> 
> On a side note - what parameters affect the acceptance rates? The
> categorical models maintain a rate of around 0.3 so I think the mixing
> could be improved.
> 
> Any input would be very much appreciated.
> 
> Many thanks,
> Roi Maor
> 
> _______________________________________________
> R-sig-mixed-models using r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-sig-mixed-models



More information about the R-sig-mixed-models mailing list