Daniel,
As long as you can get the regression coefficients, covariance of the coefficients, and a suitable grid of linear functions, you can obtain an lsmobj object that can be summarized and further analyzed in the 'lsmeans' package. For your question, I think something like this will work (I'm assuming your fitted mcmcGLMM object is named 'mod'):
# Get coefs and covariance matrix
bhat <- apply(mod$Sol, 2, mean)
V <- cov(mod$Sol)
# Set up desired factor levels (you likely want to change this)
levels <- list(day = 1:4, treatment = c("control", "cold"), species = factor(1:10))
# Obtain a differece quotient of model matrices
lv1 <- lv2 <- levels
lv1$day = lv1$day - .0001
lv2$day = lv2$day + .0001
grid1 <- do.call(expand.grid, lv1)
grid2 <- do.call(expand.grid, lv2)
lf1 <- model.matrix(fixedForm, data = grid1)
lf2 <- model.matrix(fixedForm, data = grid2)
linfct <- (lf2 - lf1) / .0002
# Create the needed lsmobj
library(lsmeans)
mod.lsm <- lsmobj(bhat = bhat, V = V, levels = levels,
linfct = linfct, by = "species")
# Can now use summary, contrast, pairs, etc. on this result
I hope this helps
Russ
Russell V. Lenth - Professor Emeritus
Department of Statistics and Actuarial Science
The University of Iowa - Iowa City, IA 52242 USA
Voice (319)335-0712 (Dept. office) - FAX (319)335-3017
-----Original Message-----
Date: Thu, 09 Apr 2015 18:32:11 -0700
From: Daniel Fulop <dfulop.ucd at gmail.com>
To: R_MixedModels <r-sig-mixed-models at r-project.org>
Subject: [R-sig-ME] contrast of predicted slopes from MCMCglmm model
Message-ID: <5527281B.3080607 at gmail.com>
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Hi mixed modelers,
I would like to contrast average slopes using predictions from an LMM model fit with MCMCglmm. In essence I want to do something analogous to lsmeans' lstrends() function. The predicted slopes are growth rates ...more below.
I have 12 days of plant growth data for 10 closely related species at 2 temperatures. There are several individuals per species at each temperature, and they're fully randomized. I want to asses whether each species' growth rate differs between temperatures. What I mean by that is that I would like to contrast the average slopes for each species in control vs. cold temperature; these slopes are the growth rates.
I am modeling the data in MCMCglmm so I can account for phylogeny and also to be able to try multi-response models (to jointly model the stem, plastochrons, root, etc). I am starting out with the stem length data and after trying different time dependencies settled on this 3rd degree polynomial model:
stemLen ~ poly(day, 3, raw=TRUE) * treatment * species + (1 + day | indiv)
where day is a numeric time variable, treatment a 2 level factor (control and cold), and species a 10 level factor.
I have a slight idea of how I would go about contrasting the average slopes for each species and that I would use the predict.MCMCglmm() function, but I would really appreciate some guidance before I go down the wrong the wrong path.
Thanks for your help!
Dan.
--
Daniel Fulop, Ph.D.
Postdoctoral Scholar
Dept. Plant Biology, UC Davis
Maloof Lab, Rm. 2220
Life Sciences Addition, One Shields Ave.
Davis, CA 95616
contrast of predicted slopes from MCMCglmm model
4 messages · Daniel Fulop, Lenth, Russell V
Hi Russ, Thanks a ton! I did notice that lsmeans could be extended, but wasn't sure of how to get all the pieces from my MCMCglmm model object. I was going to start getting the slopes from predictions on a grid of 'day' values to then average and finally subtract averages to contrast, but you've spared me that trouble. Plus, I already have code to summarize and plot growth rate results from lsmeans, which I can now reuse. I have one question about your example code, though. Since I have posterior estimates, wouldn't it be better to get the bhat vector by using posterior.mode() instead of mean()? Thanks, Dan.
Lenth, Russell V wrote:
Daniel,
As long as you can get the regression coefficients, covariance of the coefficients, and a suitable grid of linear functions, you can obtain an lsmobj object that can be summarized and further analyzed in the 'lsmeans' package. For your question, I think something like this will work (I'm assuming your fitted mcmcGLMM object is named 'mod'):
# Get coefs and covariance matrix
bhat<- apply(mod$Sol, 2, mean)
V<- cov(mod$Sol)
# Set up desired factor levels (you likely want to change this)
levels<- list(day = 1:4, treatment = c("control", "cold"), species = factor(1:10))
# Obtain a differece quotient of model matrices
lv1<- lv2<- levels
lv1$day = lv1$day - .0001
lv2$day = lv2$day + .0001
grid1<- do.call(expand.grid, lv1)
grid2<- do.call(expand.grid, lv2)
lf1<- model.matrix(fixedForm, data = grid1)
lf2<- model.matrix(fixedForm, data = grid2)
linfct<- (lf2 - lf1) / .0002
# Create the needed lsmobj
library(lsmeans)
mod.lsm<- lsmobj(bhat = bhat, V = V, levels = levels,
linfct = linfct, by = "species")
# Can now use summary, contrast, pairs, etc. on this result
I hope this helps
Russ
Russell V. Lenth - Professor Emeritus
Department of Statistics and Actuarial Science
The University of Iowa - Iowa City, IA 52242 USA
Voice (319)335-0712 (Dept. office) - FAX (319)335-3017
-----Original Message-----
Date: Thu, 09 Apr 2015 18:32:11 -0700
From: Daniel Fulop<dfulop.ucd at gmail.com>
To: R_MixedModels<r-sig-mixed-models at r-project.org>
Subject: [R-sig-ME] contrast of predicted slopes from MCMCglmm model
Message-ID:<5527281B.3080607 at gmail.com>
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Hi mixed modelers,
I would like to contrast average slopes using predictions from an LMM model fit with MCMCglmm. In essence I want to do something analogous to lsmeans' lstrends() function. The predicted slopes are growth rates ...more below.
I have 12 days of plant growth data for 10 closely related species at 2 temperatures. There are several individuals per species at each temperature, and they're fully randomized. I want to asses whether each species' growth rate differs between temperatures. What I mean by that is that I would like to contrast the average slopes for each species in control vs. cold temperature; these slopes are the growth rates.
I am modeling the data in MCMCglmm so I can account for phylogeny and also to be able to try multi-response models (to jointly model the stem, plastochrons, root, etc). I am starting out with the stem length data and after trying different time dependencies settled on this 3rd degree polynomial model:
stemLen ~ poly(day, 3, raw=TRUE) * treatment * species + (1 + day | indiv)
where day is a numeric time variable, treatment a 2 level factor (control and cold), and species a 10 level factor.
I have a slight idea of how I would go about contrasting the average slopes for each species and that I would use the predict.MCMCglmm() function, but I would really appreciate some guidance before I go down the wrong the wrong path.
Thanks for your help!
Dan.
--
Daniel Fulop, Ph.D.
Postdoctoral Scholar
Dept. Plant Biology, UC Davis
Maloof Lab, Rm. 2220
Life Sciences Addition, One Shields Ave.
Davis, CA 95616
Daniel Fulop, Ph.D. Postdoctoral Scholar Dept. Plant Biology, UC Davis Maloof Lab, Rm. 2220 Life Sciences Addition, One Shields Ave. Davis, CA 95616 510-253-7462 dfulop at ucdavis.edu
On your question, maybe, but I'm not so sure the covariance matrix is right for that. Perhaps others can comment. It'd be good also to do some plots and perhaps other diagnostics to see if the sampler results are reasonably modeled as multivariate normal, as that is an underlying assumption of all the frequentist-style tests and CIs that you obtain. Russ Sent from my iPad
On Apr 10, 2015, at 5:39 PM, Daniel Fulop <dfulop.ucd at gmail.com> wrote: Hi Russ, Thanks a ton! I did notice that lsmeans could be extended, but wasn't sure of how to get all the pieces from my MCMCglmm model object. I was going to start getting the slopes from predictions on a grid of 'day' values to then average and finally subtract averages to contrast, but you've spared me that trouble. Plus, I already have code to summarize and plot growth rate results from lsmeans, which I can now reuse. I have one question about your example code, though. Since I have posterior estimates, wouldn't it be better to get the bhat vector by using posterior.mode() instead of mean()? Thanks, Dan. Lenth, Russell V wrote:
Daniel,
As long as you can get the regression coefficients, covariance of the coefficients, and a suitable grid of linear functions, you can obtain an lsmobj object that can be summarized and further analyzed in the 'lsmeans' package. For your question, I think something like this will work (I'm assuming your fitted mcmcGLMM object is named 'mod'):
# Get coefs and covariance matrix
bhat<- apply(mod$Sol, 2, mean)
V<- cov(mod$Sol)
# Set up desired factor levels (you likely want to change this)
levels<- list(day = 1:4, treatment = c("control", "cold"), species = factor(1:10))
# Obtain a differece quotient of model matrices
lv1<- lv2<- levels
lv1$day = lv1$day - .0001
lv2$day = lv2$day + .0001
grid1<- do.call(expand.grid, lv1)
grid2<- do.call(expand.grid, lv2)
lf1<- model.matrix(fixedForm, data = grid1)
lf2<- model.matrix(fixedForm, data = grid2)
linfct<- (lf2 - lf1) / .0002
# Create the needed lsmobj
library(lsmeans)
mod.lsm<- lsmobj(bhat = bhat, V = V, levels = levels,
linfct = linfct, by = "species")
# Can now use summary, contrast, pairs, etc. on this result
I hope this helps
Russ
Russell V. Lenth - Professor Emeritus
Department of Statistics and Actuarial Science
The University of Iowa - Iowa City, IA 52242 USA
Voice (319)335-0712 (Dept. office) - FAX (319)335-3017
-----Original Message-----
Date: Thu, 09 Apr 2015 18:32:11 -0700
From: Daniel Fulop<dfulop.ucd at gmail.com>
To: R_MixedModels<r-sig-mixed-models at r-project.org>
Subject: [R-sig-ME] contrast of predicted slopes from MCMCglmm model
Message-ID:<5527281B.3080607 at gmail.com>
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Hi mixed modelers,
I would like to contrast average slopes using predictions from an LMM model fit with MCMCglmm. In essence I want to do something analogous to lsmeans' lstrends() function. The predicted slopes are growth rates ...more below.
I have 12 days of plant growth data for 10 closely related species at 2 temperatures. There are several individuals per species at each temperature, and they're fully randomized. I want to asses whether each species' growth rate differs between temperatures. What I mean by that is that I would like to contrast the average slopes for each species in control vs. cold temperature; these slopes are the growth rates.
I am modeling the data in MCMCglmm so I can account for phylogeny and also to be able to try multi-response models (to jointly model the stem, plastochrons, root, etc). I am starting out with the stem length data and after trying different time dependencies settled on this 3rd degree polynomial model:
stemLen ~ poly(day, 3, raw=TRUE) * treatment * species + (1 + day | indiv)
where day is a numeric time variable, treatment a 2 level factor (control and cold), and species a 10 level factor.
I have a slight idea of how I would go about contrasting the average slopes for each species and that I would use the predict.MCMCglmm() function, but I would really appreciate some guidance before I go down the wrong the wrong path.
Thanks for your help!
Dan.
--
Daniel Fulop, Ph.D.
Postdoctoral Scholar
Dept. Plant Biology, UC Davis
Maloof Lab, Rm. 2220
Life Sciences Addition, One Shields Ave.
Davis, CA 95616
-- Daniel Fulop, Ph.D. Postdoctoral Scholar Dept. Plant Biology, UC Davis Maloof Lab, Rm. 2220 Life Sciences Addition, One Shields Ave. Davis, CA 95616 510-253-7462 dfulop at ucdavis.edu
Hi Russ, Thanks again for the feedback and quick response! My primary goal is simply to compare slopes within species and slope differences among species, the tests and CIs are a secondary concern. lstrends() provides an easy means of estimating average slopes andslope differences . I take your point about diagnostics and plotting, though, and will do some checking such as comparing the lstrends estimates to analogous estimates calculated using predict.MCMCglmm output. On the point about the covariance matrix, the MCMCglmm output includes VCV samples. So, I suppose I could calculate posterior modes of each cell in the vcv and use that instead? Otherwise using the means should be fine. From visual inspection of the posterior samples they're quite normal in appearance, so the means and modes should be quite close to each other. Cheers, Dan.
Lenth, Russell V wrote:
On your question, maybe, but I'm not so sure the covariance matrix is right for that. Perhaps others can comment. It'd be good also to do some plots and perhaps other diagnostics to see if the sampler results are reasonably modeled as multivariate normal, as that is an underlying assumption of all the frequentist-style tests and CIs that you obtain. Russ Sent from my iPad
On Apr 10, 2015, at 5:39 PM, Daniel Fulop<dfulop.ucd at gmail.com> wrote: Hi Russ, Thanks a ton! I did notice that lsmeans could be extended, but wasn't sure of how to get all the pieces from my MCMCglmm model object. I was going to start getting the slopes from predictions on a grid of 'day' values to then average and finally subtract averages to contrast, but you've spared me that trouble. Plus, I already have code to summarize and plot growth rate results from lsmeans, which I can now reuse. I have one question about your example code, though. Since I have posterior estimates, wouldn't it be better to get the bhat vector by using posterior.mode() instead of mean()? Thanks, Dan. Lenth, Russell V wrote:
Daniel,
As long as you can get the regression coefficients, covariance of the coefficients, and a suitable grid of linear functions, you can obtain an lsmobj object that can be summarized and further analyzed in the 'lsmeans' package. For your question, I think something like this will work (I'm assuming your fitted mcmcGLMM object is named 'mod'):
# Get coefs and covariance matrix
bhat<- apply(mod$Sol, 2, mean)
V<- cov(mod$Sol)
# Set up desired factor levels (you likely want to change this)
levels<- list(day = 1:4, treatment = c("control", "cold"), species = factor(1:10))
# Obtain a differece quotient of model matrices
lv1<- lv2<- levels
lv1$day = lv1$day - .0001
lv2$day = lv2$day + .0001
grid1<- do.call(expand.grid, lv1)
grid2<- do.call(expand.grid, lv2)
lf1<- model.matrix(fixedForm, data = grid1)
lf2<- model.matrix(fixedForm, data = grid2)
linfct<- (lf2 - lf1) / .0002
# Create the needed lsmobj
library(lsmeans)
mod.lsm<- lsmobj(bhat = bhat, V = V, levels = levels,
linfct = linfct, by = "species")
# Can now use summary, contrast, pairs, etc. on this result
I hope this helps
Russ
Russell V. Lenth - Professor Emeritus
Department of Statistics and Actuarial Science
The University of Iowa - Iowa City, IA 52242 USA
Voice (319)335-0712 (Dept. office) - FAX (319)335-3017
-----Original Message-----
Date: Thu, 09 Apr 2015 18:32:11 -0700
From: Daniel Fulop<dfulop.ucd at gmail.com>
To: R_MixedModels<r-sig-mixed-models at r-project.org>
Subject: [R-sig-ME] contrast of predicted slopes from MCMCglmm model
Message-ID:<5527281B.3080607 at gmail.com>
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Hi mixed modelers,
I would like to contrast average slopes using predictions from an LMM model fit with MCMCglmm. In essence I want to do something analogous to lsmeans' lstrends() function. The predicted slopes are growth rates ...more below.
I have 12 days of plant growth data for 10 closely related species at 2 temperatures. There are several individuals per species at each temperature, and they're fully randomized. I want to asses whether each species' growth rate differs between temperatures. What I mean by that is that I would like to contrast the average slopes for each species in control vs. cold temperature; these slopes are the growth rates.
I am modeling the data in MCMCglmm so I can account for phylogeny and also to be able to try multi-response models (to jointly model the stem, plastochrons, root, etc). I am starting out with the stem length data and after trying different time dependencies settled on this 3rd degree polynomial model:
stemLen ~ poly(day, 3, raw=TRUE) * treatment * species + (1 + day | indiv)
where day is a numeric time variable, treatment a 2 level factor (control and cold), and species a 10 level factor.
I have a slight idea of how I would go about contrasting the average slopes for each species and that I would use the predict.MCMCglmm() function, but I would really appreciate some guidance before I go down the wrong the wrong path.
Thanks for your help!
Dan.
--
Daniel Fulop, Ph.D.
Postdoctoral Scholar
Dept. Plant Biology, UC Davis
Maloof Lab, Rm. 2220
Life Sciences Addition, One Shields Ave.
Davis, CA 95616
-- Daniel Fulop, Ph.D. Postdoctoral Scholar Dept. Plant Biology, UC Davis Maloof Lab, Rm. 2220 Life Sciences Addition, One Shields Ave. Davis, CA 95616 510-253-7462 dfulop at ucdavis.edu
Daniel Fulop, Ph.D. Postdoctoral Scholar Dept. Plant Biology, UC Davis Maloof Lab, Rm. 2220 Life Sciences Addition, One Shields Ave. Davis, CA 95616 510-253-7462 dfulop at ucdavis.edu