[R-sig-ME] MCMCglmm for recip. transplant: 1. Trouble with convergence 2. Error in multivar. model
Steven Brady
steven.brady at yale.edu
Fri Aug 5 20:31:47 CEST 2011
Dear List:
I am analyzing results from a reciprocal transplant experiment
conducted between two types of environments (r and w). Transplants
were made in a pairwise fashion: each of five "r" sites (r1:r5) was
paired with each of five "w" sites (w1:w5). Eggs from each of five
different clutches were selected from each site and grown out both
locally and in the transplant environment. A single clutch comprises
the experimental unit; two clutches (one home; one away) comprise each
block.
The goal of the experiment is to evaluate the influence of origin
type, environment type, and their interaction (aka "G X E
interaction") on the response variables, with the local adaptation
hypothesis in mind. Thus, the goal of this analysis is to test the
significance of these two fixed effects and their interaction. I
would like to use MCMCglmm to do so in order to evaluate a suite of
response variables using a mixed-MANOVA approach. For this example,
two response variables are included (1. survival [which is binomial],
2. growth). Analogous data are pasted below. I am running R 2.11.1
GUI 1.34 Leopard build 32-bit (5589) with MCMCglmm v. 2.13.
#begin load data
data <-
structure(list(origin = structure(c(1L, 1L, 1L, 1L, 1L, 6L, 6L,
6L, 6L, 6L, 1L, 1L, 1L, 1L, 1L, 6L, 6L, 6L, 6L, 6L, 2L, 2L, 2L,
2L, 2L, 7L, 7L, 7L, 7L, 7L, 2L, 2L, 2L, 2L, 2L, 7L, 7L, 7L, 7L,
7L, 3L, 3L, 3L, 3L, 3L, 8L, 8L, 8L, 8L, 8L, 3L, 3L, 3L, 3L, 3L,
8L, 8L, 8L, 8L, 8L, 4L, 4L, 4L, 4L, 4L, 9L, 9L, 9L, 9L, 9L, 4L,
4L, 4L, 4L, 4L, 9L, 9L, 9L, 9L, 9L, 5L, 5L, 5L, 5L, 5L, 10L,
10L, 10L, 10L, 10L, 5L, 5L, 5L, 5L, 5L, 10L, 10L, 10L, 10L, 10L
), .Label = c("r1", "r2", "r3", "r4", "r5", "w1", "w2", "w3",
"w4", "w5"), class = "factor"), env = structure(c(1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L,
6L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 7L, 7L, 7L, 7L, 7L,
7L, 7L, 7L, 7L, 7L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 8L,
8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 4L, 4L, 4L, 4L, 4L, 4L, 4L,
4L, 4L, 4L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 5L, 5L, 5L,
5L, 5L, 5L, 5L, 5L, 5L, 5L, 10L, 10L, 10L, 10L, 10L, 10L, 10L,
10L, 10L, 10L), .Label = c("r1", "r2", "r3", "r4", "r5", "w1",
"w2", "w3", "w4", "w5"), class = "factor"), pair = structure(c(1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L,
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L,
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 5L,
5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L,
5L, 5L, 5L), .Label = c("a", "b", "c", "d", "e"), class = "factor"),
origin_type = structure(c(1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L,
2L, 2L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L,
1L, 1L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L,
2L, 2L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L,
1L, 1L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L,
2L, 2L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L,
1L, 1L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L,
2L, 2L), .Label = c("r", "w"), class = "factor"), env_type =
structure(c(1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("r", "w"), class
= "factor"),
clutch = structure(c(1L, 2L, 3L, 4L, 5L, 26L, 27L, 28L, 29L,
30L, 1L, 2L, 3L, 4L, 5L, 26L, 27L, 28L, 29L, 30L, 6L, 7L,
8L, 9L, 10L, 31L, 32L, 33L, 34L, 35L, 6L, 7L, 8L, 9L, 10L,
31L, 32L, 33L, 34L, 35L, 11L, 12L, 13L, 14L, 15L, 36L, 37L,
38L, 38L, 39L, 11L, 12L, 13L, 14L, 15L, 36L, 37L, 38L, 38L,
39L, 16L, 17L, 18L, 19L, 20L, 40L, 41L, 42L, 43L, 44L, 16L,
17L, 18L, 19L, 20L, 40L, 41L, 42L, 43L, 44L, 21L, 22L, 23L,
24L, 25L, 45L, 46L, 47L, 48L, 49L, 21L, 22L, 23L, 24L, 25L,
45L, 46L, 47L, 48L, 49L), .Label = c("r1_1", "r1_2", "r1_3",
"r1_4", "r1_5", "r2_1", "r2_2", "r2_3", "r2_4", "r2_5", "r3_1",
"r3_2", "r3_3", "r3_4", "r3_5", "r4_1", "r4_2", "r4_3", "r4_4",
"r4_5", "r5_1", "r5_2", "r5_3", "r5_4", "r5_5", "w1_1", "w1_2",
"w1_3", "w1_4", "w1_5", "w2_1", "w2_2", "w2_3", "w2_4", "w2_5",
"w3_1", "w3_2", "w3_3", "w3_4", "w4_1", "w4_2", "w4_3", "w4_4",
"w4_5", "w5_1", "w5_2", "w5_3", "w5_4", "w5_5"), class = "factor"),
block = structure(c(1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L,
26L, 27L, 28L, 29L, 30L, 26L, 27L, 28L, 29L, 30L, 6L, 7L,
8L, 9L, 10L, 6L, 7L, 8L, 9L, 10L, 31L, 32L, 33L, 34L, 35L,
31L, 32L, 33L, 34L, 35L, 11L, 12L, 13L, 14L, 15L, 11L, 12L,
13L, 14L, 15L, 36L, 37L, 38L, 39L, 40L, 36L, 37L, 38L, 39L,
40L, 16L, 17L, 18L, 19L, 20L, 16L, 17L, 18L, 19L, 20L, 41L,
42L, 43L, 44L, 45L, 41L, 42L, 43L, 44L, 45L, 21L, 22L, 23L,
24L, 25L, 21L, 22L, 23L, 24L, 25L, 46L, 47L, 48L, 49L, 50L,
46L, 47L, 48L, 49L, 50L), .Label = c("r1_a", "r1_b", "r1_c",
"r1_d", "r1_e", "r2_a", "r2_b", "r2_c", "r2_d", "r2_e", "r3_a",
"r3_b", "r3_c", "r3_d", "r3_e", "r4_a", "r4_b", "r4_c", "r4_d",
"r4_e", "r5_a", "r5_b", "r5_c", "r5_d", "r5_e", "w1_a", "w1_b",
"w1_c", "w1_d", "w1_e", "w2_a", "w2_b", "w2_c", "w2_d", "w2_e",
"w3_a", "w3_b", "w3_c", "w3_d", "w3_e", "w4_a", "w4_b", "w4_c",
"w4_d", "w4_e", "w5_a", "w5_b", "w5_c", "w5_d", "w5_e"), class =
"factor"),
surv = c(18L, 19L, 19L, 20L, 19L, 20L, 14L, 10L, 18L, 18L,
16L, 19L, 18L, 20L, 18L, 18L, 14L, 19L, 19L, 18L, 12L, 17L,
19L, 20L, 17L, 3L, 11L, 12L, 8L, 7L, 14L, 20L, 20L, 20L,
16L, 18L, 19L, 17L, 9L, 9L, 3L, 2L, 13L, 3L, 0L, 0L, 0L,
0L, 0L, 7L, 14L, 19L, 17L, 10L, 11L, 10L, 7L, 9L, 18L, 9L,
9L, 10L, 0L, 2L, 1L, 2L, 1L, 0L, 2L, 12L, 7L, 20L, 19L, 19L,
19L, 18L, 17L, 19L, 17L, 20L, 17L, 19L, 18L, 17L, 20L, 17L,
17L, 18L, 13L, 19L, 17L, 20L, 19L, 17L, 17L, 18L, 17L, 17L,
19L, 17L), stocked = c(20, 20, 20, 20, 20, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
20, 20, 20, 20, 10, 10, 20, 20, 20, 20, 20, 20, 20, 20, 10,
10, 20, 20, 20, 20, 20, 10, 10, 10, 20, 10, 20, 20, 20, 20,
20, 10, 10, 10, 20, 10, 22, 20, 20, 20, 20, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
20)), .Names = c("origin", "env", "pair", "origin_type",
"env_type", "clutch", "block", "surv", "stocked"), class =
"data.frame", row.names = c(NA,
-100L))
data$growth=runif(100,0.5,0.9) #add growth data; end load data
#Ideally, I would like to test the multivariate response of a suite of
traits across the GxE interaction (see "issue 2" below). But for my
first foray in MCMCglmm, I began simply with a univariate model of
survival containing uninformed priors:
prior1<-list(R=list(V=1e-16,nu=-2),G=list(G1=list(V=1e-16,nu=-2)))
model1<-MCMCglmm(cbind(surv,(stocked-surv))~origin_type*env_type,
random = ~pair + clutch + block, family = "multinomial2", data = data,
thin = 2500, prior = cbind(prior1,prior1), burnin = 30000, nitt=130000)
#response variable is dichotomous: number survived, number died
plot(model1$VCV)
plot(model1$Sol)
Issue 1: As you can see, the posterior distributions are not terribly
convincing. When I attempt to improve this by increasing nitt and
burnin (each by an order of magnitude), the intercept and coefficient
posterior distributions improve, but the residual variance posterior
distributions remain uninspiring. Would the use of informed priors
improve convergence? If so, are there any general rules for
determining said priors with these types of data?
Issue 2: When I attempt to fit a multivariate model (the overarching
goal of this analysis), I receive an error. e.g. given the following
model with both survival and growth as response data:
model2<-MCMCglmm(cbind(cbind(surv,(stocked-surv)),
growth)~origin_type*env_type, random = ~pair + clutch + block, family
= c("multinomial2", "gaussian"), data = data, thin = 2500, prior =
cbind(prior1,prior1), burnin = 30000, nitt=130000)
I receive this error:
Error in MCMCglmm(cbind(cbind(surv, (stocked - surv)), growth) ~
origin_type * :
R-structure does not define unique residual for each data point
I have no idea how to begin to resolve this error. Any comments would
be greatly appreciated.
Many thanks in advance,
Steve Brady
Steven P. Brady, Ph.D. Candidate
School of Forestry & Environmental Studies, Yale University
More information about the R-sig-mixed-models
mailing list