[R-sig-ME] MCMCglmm bivariate model
Jarrod Hadfield
j.hadfield at ed.ac.uk
Sun Sep 27 11:28:14 CEST 2015
Hi,
1) It is hard to offer advice on this. It seems from the widths of the
credible intervals that the genetic term and the ID term are hard to
separate. What is the structure of the pedigree like? The scaled
F-distribution with large scale has a long tail. My guess is that this
results in a long tail for the animal term which then forces the ID
term to zero, resulting in a bimodal posterior distribution. Although
a scale of 1000 makes sense for trait 1, it is less reasonable for the
threshold trait. Pierre de Villemereuil makes this point in his
Methods in Ecology and Evolution paper (4 3 260275 2013). He suggests
a prior that approaches the chi-square distribution (V=1, nu=1000,
alpha.mu=0, alpha.V=1) but you can't use this in a bivariate setting
because both traits have to have a common nu. You could try reducing
the scale of the threshold trait to something more reasonable. For
example,
P3 = list(R = list(V = diag(2), nu = 1.002, fix = 2), G = list(G1 =
list(V=diag(2), nu=2, alpha.mu=c(0,0), alpha.V=diag(c(1000,100))),G2 =
list(V=diag(2), nu=2, alpha.mu=c(0,0), alpha.V=diag(c(1000,100)))))
or perhaps even less (e.g. 10). Why bimodality increases under the
bivariate specification I'm not sure. I have not seen any papers
exploring the bivariate scaled-F prior theoretically. It would be nice
if some one did! The new version of MCMCglmm (now on-line) can fit
antedependence structures. Here, priors can be placed directly on
regression coefficients (e.g. the breeding value for y2 on y1) which
may turn out to have nicer properties - not sure.
2) There is nothing to worry about, M3 is the correct model and it is
just a reparameterisation of M1. From the bivariate model location 3
trait 1 is the intercept (457), location 1 trait 1 is (457+11 = 468)
and location 2 trait 1 is (457+38 = 495). From the univariate model
location 1 is the intercept (469) location 2 is (469+23 = 491) and
location 3 is (469-14 = 455). They differ slightly of course, but
there is Monte Carlo error, and the model is slightly different (e.g.
there are correlations between traits).
Cheers,
Jarrod
2015 15:47:36 +0000:
> Hi all,
> I'm using MCMCglmm to estimate the heritability of 2 traits and
> their genetic correlation in a repeated measures animal model. My
> data consists of 500 individuals each measured twice for each trait
> with a few missing values. y1 is Gaussian, y2 is ordered discrete
> categories 0-5. Separate models for each trait run ok but I have 2
> issues with a bivariate model.
>
>
> 1) the bivariate model gives a bimodal posterior distribution
> for the trait y2:ID term with one peak at ~4 (similar to the
> univariate model) and a second peak at zero. I'm using parameter
> expanded priors and both mixing and convergence look ok according to
> trace plots, Geweke plots and Heidelberg tests. Autocorrelation is
> <0.13. The ID term does have some support at zero in a univariate
> model of y2 but has a clear mode at 4, whereas in the bivariate
> model there is equal support for 0 and 4.
>
>
>
> 2) The fixed effect, location (a 3 level factor), is only
> relevant for trait y1. In the univariate model for y1 the 3 levels
> are estimated ok with no error but in the bivariate model using
> trait-1 + at.level(trait, 1):location gives the error "In
> MCMCglmm(cbind(y1, y2) ~ trait - 1 + at.level(trait, : some fixed
> effects are not estimable and have been removed. Use
> singular.ok=TRUE to sample these effects, but use an informative
> prior!" and gives estimates in the summary table for locations 1 and
> 2, suggesting location 3 could not be estimated? Using
> trait-1+trait:location does not give an error and gives estimates
> for locations 2 and 3 in the summary table for both traits, which
> presumably are contrasts from the "trait y1" that corresponds to
> location 1.
>
>
> Can anyone advise on these 2 issues? Am I using at.level(trait, 1)
> correctly? I've copied my code and output below:
> Thanks in advance,
> Rebecca
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> univariate models:
> P1<- list(G = list(G1 = list(V = 1, n = 0.002), G2 = list(V = 1,n =
> 0.002)), R = list(V = 1, n = 0.002))
> M1<-MCMCglmm(y1~age+location+size,
> random=~animal+ID,
> pedigree=ped,
> data=pheno2,prior=P1,nitt=1010000,thin=1000,burnin=10000,verbose=FALSE)
>
>> summary(M1)
> Iterations = 10001:1009001
> Thinning interval = 1000
> Sample size = 1000
>
> DIC: 10909.28
>
> G-structure: ~animal
>
> post.mean l-95% CI u-95% CI eff.samp
> animal 1144 444.3 1885 1162
>
> ~ID
>
> post.mean l-95% CI u-95% CI eff.samp
> ID 1750 1184 2462 1000
>
> R-structure: ~units
>
> post.mean l-95% CI u-95% CI eff.samp
> units 793.1 700.6 896.2 1000
>
> Location effects: y1 ~ age + location + size
>
> post.mean l-95% CI u-95% CI eff.samp pMCMC
> (Intercept) 469.474 434.740 502.941 1000 <0.001 ***
> age -3.409 -3.950 -2.958 1000 <0.001 ***
> location2 23.355 10.235 37.260 1000 0.002 **
> location3 -14.113 -29.935 3.468 1000 0.114
> size 4.782 2.300 7.316 1000 <0.001 ***
> ---
>
>> posterior.heritability<-M1$VCV[,"animal"]/(M1$VCV[,"animal"]+M1$VCV[,"ID"]+M1$VCV[,"units"])
>> mean(posterior.heritability)
> [1] 0.31
>
> ~~~~~~~~~~~~~~~~~~~~~~~~~~
> P2 <- list(R=list(V = 1 , fix=1), G = list(G1=list(V=1,
> nu=1,alpha.mu=0, alpha.V=1000),G2=list(V=1, nu=1, alpha.mu=0,
> alpha.V=1000)))
> M2<-MCMCglmm(y2~age,random=~animal+ID,pedigree=ped,family="threshold",data=pheno2,prior=P2,verbose=FALSE,
> nitt=10500000,thin=2000,burnin=500000)
>> summary(M2)
>
> Iterations = 500001:10498001
> Thinning interval = 2000
> Sample size = 5000
>
> DIC: 1270.806
>
> G-structure: ~animal
>
> post.mean l-95% CI u-95% CI eff.samp
> animal 10.38 4.473 16.46 4162
>
> ~ID
>
> post.mean l-95% CI u-95% CI eff.samp
> ID 4.291 2.09e-05 8.01 3910
>
> R-structure: ~units
>
> post.mean l-95% CI u-95% CI eff.samp
> units 1 1 1 0
>
> Location effects: y2 ~ age
>
> post.mean l-95% CI u-95% CI eff.samp pMCMC
> (Intercept) -11.6004 -14.5259 -8.9838 5000 <2e-04 ***
> age 0.1794 0.1404 0.2218 5000 <2e-04 ***
> ---
> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
>
> Cutpoints:
> post.mean l-95% CI u-95% CI eff.samp
> cutpoint.traity2.1 2.895 2.461 3.314 5351
> cutpoint.trait y2.2 4.610 4.069 5.268 4793
> cutpoint.trait y2.3 7.398 6.527 8.348 5000
> cutpoint.trait y2.4 11.917 10.013 13.981 5141
>
>> posterior.heritability<-M2$VCV[,"animal"]/(M2$VCV[,"animal"]+M2$VCV[,"ID"]+M2$VCV[,"units"])
>> mean(posterior.heritability)
> [1] 0.66
>
>
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> Bivariate model:
> P3 = list(R = list(V = diag(2), nu = 1.002, fix = 2), G = list(G1 =
> list(V=diag(2), nu=2, alpha.mu=c(0,0), alpha.V=diag(2)*1000),G2 =
> list(V=diag(2), nu=2, alpha.mu=c(0,0), alpha.V=diag(2)*1000)))
> M3<-MCMCglmm(cbind(y1, y2) ~ trait - 1 + at.level(trait, 1):location
> + trait:age + at.level(trait, 1):size,
> pedigree=ped, data=pheno2,
> random = ~us(trait):animal+us(trait):ID,
> rcov = ~us(trait):units, family = c("gaussian", "threshold"),
> prior = P3, verbose = FALSE, nitt=10500000,thin=2000,burnin=500000)
>
>> summary(M3)
>
> Iterations = 500001:10498001
> Thinning interval = 2000
> Sample size = 5000
>
> DIC: 12151.2
>
> G-structure: ~us(trait):animal
>
> post.mean l-95% CI u-95% CI eff.samp
> y1:y1.animal 1156.88 435.518 1870.316 5000
> y2:y1.animal -39.70 -83.129 5.598 4666
> y1:y2.animal -39.70 -83.129 5.598 4666
> y2:y2.animal 11.04 4.659 17.753 3657
>
> ~us(trait):ID
>
> post.mean l-95% CI u-95% CI eff.samp
> y1:y1.ID 1743.758 1.124e+03 2351.973 5000
> y2:y1.ID -12.174 -4.464e+01 20.891 5000
> y1:y2.ID -12.174 -4.464e+01 20.891 5000
> y2:y2.ID 3.876 3.188e-06 7.734 3514
>
> R-structure: ~us(trait):units
>
> post.mean l-95% CI u-95% CI eff.samp
> y1:y1.units 791.876 696.035 882.1 4568
> y2:y1.units 2.582 -1.169 6.1 5000
> y1:y2.units 2.582 -1.169 6.1 5000
> y2:y2.units 1.000 1.000 1.0 0
>
> Location effects: cbind(y1, y2) ~ trait - 1 + at.level(trait, 1):loca
>
> post.mean l-95% CI u-95% CI eff.samp pMCMC
> traity1 456.6321 419.7208 494.7115 5239 <2e-04 ***
> traity2 -11.5170 -14.4037 -8.8785 4137 <2e-04 ***
> at.level(trait, 1):location1 11.6986 -4.0319 28.8620 5000 0.1676
> at.level(trait, 1):location2 37.8950 22.5601 53.8510 5000 <2e-04 ***
> traity1:age -3.4116 -3.9302 -2.9405 5209 <2e-04 ***
> traity2:age 0.1779 0.1383 0.2184 4670 <2e-04 ***
> at.level(trait, 1):size 4.4378 1.9564 6.9510 5421 0.0004 ***
> ---
> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
>
> Cutpoints:
> post.mean l-95% CI u-95% CI eff.samp
> cutpoint.traity2.1 2.890 2.473 3.308 4696
> cutpoint.trait y2.2 4.600 4.074 5.186 4474
> cutpoint.trait y2.3 7.451 6.565 8.327 4071
> cutpoint.trait y2.4 12.053 10.131 14.039 4045
>
>
> herit_y1<- M3$VCV[,'y1:y1.animal']/( M3$VCV[,'y1:y1.animal']+
> M3$VCV[,'y1:y1.ID']+ M3$VCV[,'y1:y1.units'])
> mean(herit_y1)
> =0.31 (0.13-0.48)
>
> herit_y2<- M3$VCV[,'y2:y2.animal']/( M3$VCV[,'y2:y2.animal']+
> M3$VCV[,'y2:y2.ID']+ M3$VCV[,'y2:y2.units'])
> mean(herit_y2)
> =0.68 (0.42-0.95)
>
> corr.gen<- M3$VCV[,'y1:y2.animal']/sqrt(M3$VCV[,'y1:y1.animal']*
> M3$VCV[,y2:y2.animal'])
> mean(corr.gen)
> =-0.36 (-0.70-0.004)
>
>
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> summary table for bivariate model with trait:location instead of
> at.level(trait, 1):location
>
> Location effects: cbind(y1, y2) ~ trait - 1 + trait:location +
> trait:age + at.level(trait, 1):size
>
> post.mean l-95% CI u-95% CI eff.samp pMCMC
> traity1 468.8456 433.1704 499.3057 761.34 <0.001 ***
> traity2 -11.6934 -14.6120 -9.0283 88.10 <0.001 ***
> traity1:location2 23.5282 10.8358 36.8648 1000.00 <0.001 ***
> traity2:location2 0.9043 -0.2198 2.1732 341.51 0.128
> traity1:location3 -14.6928 -30.8528 1.0206 887.36 0.074 .
> traity2:location3 0.8966 -0.4732 2.3384 453.18 0.218
> traity1:age -3.3947 -3.9142 -2.9634 839.89 <0.001 ***
> traity2:age 0.1718 0.1356 0.2125 92.35 <0.001 ***
> at.level(trait, 1):size 4.4933 2.2326 7.3976 1000.00 0.002 **
>
>
>
> [[alternative HTML version deleted]]
>
> _______________________________________________
> R-sig-mixed-models at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-sig-mixed-models
>
>
--
The University of Edinburgh is a charitable body, registered in
Scotland, with registration number SC005336.
More information about the R-sig-mixed-models
mailing list