Just to clean up this thread..... Yes, nested.npmanova can accept class "dist" unifrac distance matrices. Therefore, Steve's solution appears to work perfectly for me. Here is the link: https://mailman.stat.ethz.ch/pipermail/r-sig-ecology/2013-February/003595.html
Thanks for the help! Erin On Mar 10, 2013, at 4:09 PM, Erin Nuccio wrote: > Hi again, > > OK, figuring out if it's possible to use Unifrac with nested.npmanova may be > necessary.... > > I just realized my test comparing nested.npmanova and adonis on the same > model had no strata for adonis. When I add the strata GrasslandPlot to > adonis, my p values are equal to 1. So adonis with no strata gives me > similar values to nested.npmanova for the following model: community_data ~ > Grassland + GrasslandPlot. > > So, (community_data ~ Grassland + GrasslandPlot) approximates the correct > statistics, but since this ignores all strata, I'm not sure if it's > justified. Thoughts? > > Thanks, > Erin > > > > > On Mar 10, 2013, at 3:42 PM, Erin Nuccio wrote: > >> Thanks Steve, that is helpful. >> >> However, I've run into a small problem with nested.npmanova. It appears >> that I cannot supply my own distance matrix, and need to supply the raw >> species data. I am using Unifrac distances, which is not an option for >> vegdist. Anyone know if there is a workaround here? >> >> I did compare nested.npmanova to adonis with bray distance using the same >> model (community_data ~ Grassland + GrasslandPlot), and it looks like the F >> values are similar for Grassland (F values: 3.6 vs. 3.3), and the same for >> GrasslandPlot. The R2 values seem to stay the same no matter what I do in >> adonis, and the p values are all ~ 0.001. >> >> So, in case there is no way to use Unifrac distances with nested.npmanova, >> my backup plan would be to perform two adonis functions, and use the second >> function to get the approximate F value for Grassland and correct F value >> for GrasslandPlot: >> adonis(community_data ~ Treatment*Grassland + GrasslandPlot, >> strata=GrasslandPlot) >> adonis(community_data ~ Grassland + GrasslandPlot, strata=GrasslandPlot) >> >> Does this seem reasonable? Of course, the best thing would be to use the >> Unifrac distances with nested.npmanova if it's possible. >> >> Thank you, >> Erin >> >> >> >> >> >> On Mar 10, 2013, at 8:17 AM, JOHN S BREWER wrote: >> >>> Erin, >>> >>> Please check the February 25 post I made called "Permanova with nested >>> data." It explains how to test whole plot and split plot effects correctly >>> in adonis. But to answer your question, even if you treat Grassland as a >>> fixed-plot effect (which seems perfectly reasonable), Grassland is a >>> whole-plot effect. Using the model formula given and strata, adonis uses >>> the split-plot error term (i.e., the residual error term) to test all >>> effects. That's wrong because Grassland needs to be tested with the >>> whole-plot error term. In the post I referred to, I describe how you can do >>> a separate test for the whole plot using the BiodiversityR package and the >>> nested.npmanova function. In this case, you would only include Grassland >>> and GrasslandPlot as terms in the model. It's just doing a two-way nested >>> manova. The whole-plot effect of Grassland will be tested correctly using >>> the GrasslandPlot term. GrasslandPlot will be tested with the residual >>> error term, which will be wrong, but you ca! n ignore that. I've tried it with my own data and it works. One cautionary note. See the posts by Jari Oksanen and others about the versions of BiodiversityR and R used. >>> >>> Hope this helps >>> >>> Steve >>> ________________________________________ >>> From: Erin Nuccio [enuc...@gmail.com] >>> Sent: Saturday, March 09, 2013 9:09 PM >>> To: JOHN S BREWER >>> Cc: r-sig-ecology@r-project.org >>> Subject: Re: [R-sig-eco] Adonis and Random Effects >>> >>> Hi Steve and R list, >>> >>> I was hoping you could clarify something you mentioned in previous post. >>> >>> A quick recap... I have a split-plot design where I determined the >>> microbial communities at 3 grasslands (see post script for design). I am >>> trying quantify the how much of my community can be explained by Treatment >>> or Grassland effect. After talking with a statistician, it seems like >>> treating Grassland as a Fixed effect would be reasonable (because I have >>> such a small number of grasslands). >>> >>> You mentioned that if I treat Grassland as a Fixed effect, and use the >>> following formula, the Grassland effect would not be tested correctly: >>> >>> adonis(formula = community_distance_matrix ~ Treatment*Grassland + >>> GrasslandPlot, strata = GrasslandPlot) >>> >>> Why is this? Is there any way to remedy this? >>> >>> Thanks for your feedback, >>> Erin >>> >>> >>> Experimental design: >>> 4 split plots * 2 Treatments * 3 Grasslands = 24 observations >>> Treatment: 2 levels (each within 1 split plot) >>> Grassland: 3 levels >>> GrasslandPlot: 12 levels (4 split plots nested in 3 Grasslands) >>> >>> >>> >>> >>> >>> On Feb 4, 2013, at 6:22 AM, Steve Brewer wrote: >>> >>>> Erin, >>>> >>>> There have been a lot of similar queries (e.g., repeated measures, nested >>>> permanova). Jari can correct me if I am wrong, but as far as I know, no >>>> one has developed a way to define multiple error terms in adonis. >>>> >>>> >>>> You can use adonis, however, to get the split-plot effects. If you want to >>>> make a grassland a random effect, use the following statement >>>> >>>> adonis(formula = community_distance_matrix ~ Treatment + Grassland + >>>> GrasslandPlot, strata = GrasslandPlot) >>>> >>>> >>>> The treatment effect will be correct because the residual error term >>>> (which is equivalent to treatment x GrasslandPlot interaction nested >>>> within Grassland) is the correct error term. The Grassland effect, >>>> however, will not be tested correctly because it is using the residual >>>> error term when it should be using GrasslandPLot as the error term. You >>>> can determine what the F stat for Grassland should be, however, using the >>>> Ms Grassland and MS GrasslandPlot from the anova table to construct the F >>>> test. You just won't get a p-value for the test. >>>> >>>> If you want to treat Grassland as a fixed effect, the model is similar but >>>> defines the interaction >>>> >>>> adonis(formula = community_distance_matrix ~ Treatment*Grassland + >>>> GrasslandPlot, strata = GrasslandPlot) >>>> >>>> >>>> In this case, the treatment x grassland interaction will be tested >>>> correctly, as will the treatment effect, but not the Grassland effect. >>>> >>>> Unfortunately, you cannot just take averages of abundances across the >>>> treatment and control in each plot and then do a separate analysis of >>>> Grassland and GrasslandPLot (unless you're using Euclidean distances). I >>>> suspect you're not using Euclidean distances. >>>> >>>> Hope this helps some. >>>> >>>> Good luck, >>>> Steve >>>> >>>> >>>> J. Stephen Brewer >>>> Professor >>>> Department of Biology >>>> PO Box 1848 >>>> University of Mississippi >>>> University, Mississippi 38677-1848 >>>> Brewer web page - http://home.olemiss.edu/~jbrewer/ >>>> FAX - 662-915-5144 >>>> Phone - 662-915-1077 >>>> >>>> >>>> >>>> >>>> On 2/4/13 1:14 AM, "Erin Nuccio" <enuc...@gmail.com> wrote: >>>> >>>>> Hello List, >>>>> >>>>> Is adonis capable of modeling random effects? I'm analyzing the impact >>>>> of a treatment on the microbial community in a split-plot design (2 >>>>> treatments per plot, 4 plots per grassland, 3 grasslands total). I would >>>>> like to quantify how much of the variance is due to the Treatment versus >>>>> the Grassland. It seems like Grassland should be a random effect, since >>>>> there are thousands of grasslands, and I'm only looking at 3. >>>>> >>>>> Thanks for your help, >>>>> Erin >>>>> >>>>> >>>>> Here are my factors: >>>>> 'data.frame': 24 obs. of 4 variables: >>>>> $ Treatment : Factor w/ 2 levels "T1","T2": 1 1 1 1 1 2 2 2 1 1 ... >>>>> $ Grassland : Factor w/ 3 levels "G1","G2","G3": 3 3 1 1 1 2 2 1 2 2 >>>>> ... >>>>> $ Plot : Factor w/ 4 levels "P1","P2","P3","P4": 1 2 2 3 4 1 3 2 >>>>> 1 2 ... >>>>> $ GrasslandPlot: Factor w/ 12 levels "G1:P1","G1:P2","G1:P3"..: 9 10 2 3 >>>>> 4 5 7 2 5 6 ... >>>>> >>>>> And here's the error message: >>>>> Error in `contrasts<-`(`*tmp*`, value = contr.funs[1 + isOF[nn]]) : >>>>> contrasts can be applied only to factors with 2 or more levels >>>>> In addition: Warning messages: >>>>> 1: In Ops.factor(1, Grassland) : | not meaningful for factors >>>>> 2: In Ops.factor(1, GrasslandPlot) : | not meaningful for factors >>>>> >>>>> _______________________________________________ >>>>> R-sig-ecology mailing list >>>>> R-sig-ecology@r-project.org >>>>> https://stat.ethz.ch/mailman/listinfo/r-sig-ecology >>>> >>>> >>> >> > _______________________________________________ R-sig-ecology mailing list R-sig-ecology@r-project.org https://stat.ethz.ch/mailman/listinfo/r-sig-ecology