Re: [R-sig-eco] How do I interpret linear mixed model contrast estimates from multcomp::glht()?
Dear Matthew, The part before == 0 are the rownames of the matrix passed to linfct. When the rownames are missing, the rownumbers are used. Best regards, ir. Thierry Onkelinx Instituut voor natuur- en bosonderzoek / Research Institute for Nature and Forest team Biometrie Kwaliteitszorg / team Biometrics Quality Assurance Kliniekstraat 25 1070 Anderlecht Belgium + 32 2 525 02 51 + 32 54 43 61 85 thierry.onkel...@inbo.be www.inbo.be To call in the statistician after the experiment is done may be no more than asking him to perform a post-mortem examination: he may be able to say what the experiment died of. ~ Sir Ronald Aylmer Fisher The plural of anecdote is not data. ~ Roger Brinner The combination of some data and an aching desire for an answer does not ensure that a reasonable answer can be extracted from a given body of data. ~ John Tukey -Oorspronkelijk bericht- Van: R-sig-ecology [mailto:r-sig-ecology-boun...@r-project.org] Namens Matthew Van Scoyoc Verzonden: vrijdag 12 december 2014 0:08 Aan: r-sig-ecology@r-project.org Onderwerp: [R-sig-eco] How do I interpret linear mixed model contrast estimates from multcomp::glht()? So, what do the rows correspond to in the summary (e.g. 1 == 0)? I was thinking the answer was buried *cc*, but I can't figure it out. Consider this modified example I stole from here https://stat.ethz.ch/pipermail/r-sig-mixed-models/2009q4/003061.html... options(contrasts = c(factor = contr.SAS, ordered = contr.poly)) library(mlmRev) library(lme4) library(lmerTest) library(contrast) library(multcomp) data(egsingle) # Linear mixed model math.lmm - lmer(math ~ year * size + female + (1|childid) + (1|schoolid), egsingle) # Linear model math.lm - lm(math ~ year * size + female, data = egsingle) # Calculate contrast matrix cc-contrast(math.lm, a = list(year = c(.5, 1.5, 2.5), size = 380, female = levels(egsingle$female)), + b = list(year = c(.5, 1.5, 2.5), size = 800, female = levels(egsingle$female))) # Calculate estimates summary(glht(math.lmm, linfct = cc$X)) Simultaneous Tests for General Linear Hypotheses Fit: lme4::lmer(formula = math ~ year * size + female + (1 | childid) + (1 | schoolid), data = egsingle) Linear Hypotheses: Estimate Std. Error z value Pr(|z|) 1 == 0 0.127740.08020 1.593 0.1272 2 == 0 0.153220.08066 1.9000.0669 . 3 == 0 0.178700.08178 2.1850.0341 * 4 == 0 0.127740.08020 1.5930.1273 5 == 0 0.153220.08066 1.9000.0669 . 6 == 0 0.178700.08178 2.1850.0342 * --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- single-step method) Ultimately I would like to create a dataframe so I can plot the contrasts, something like this... x = summary(glht(math.lmm, linfct = cc$X)) # Contrast data frame math.contr = data.frame(Effect.Interaction = ..., Estimate = x[[test]]$coefficients, Std.Error = x[[test]]$sigma) Thanks for the help! Cheers, MVS = Matthew Van Scoyoc https://mail.google.com/mail/?view=cmfs=1tf=1to=mvansco...@aggiemail.usu.edu https://sites.google.com/site/scoyoc/ = Think SNOW! [[alternative HTML version deleted]] ___ R-sig-ecology mailing list R-sig-ecology@r-project.org https://stat.ethz.ch/mailman/listinfo/r-sig-ecology Disclaimer Bezoek onze website / Visit our websitehttps://drupal.inbo.be/nl/disclaimer-mailberichten-van-het-inbo ___ R-sig-ecology mailing list R-sig-ecology@r-project.org https://stat.ethz.ch/mailman/listinfo/r-sig-ecology
Re: [R-sig-eco] How do I interpret linear mixed model contrast estimates from multcomp::glht()?
As I was suspecting, the answer is in contrast::contrast(). I'm going to take this over to r-sig-mixed-models since that mailing list might be more appropriate than ecology. Thanks Thierry, I appreciate the help. Cheers MVS = Matthew Van Scoyoc mvansco...@aggiemail.usu.eduhttps://sites.google.com/site/scoyoc/ = Think SNOW! On Fri, Dec 12, 2014 at 1:44 AM, ONKELINX, Thierry thierry.onkel...@inbo.be wrote: Dear Matthew, The part before == 0 are the rownames of the matrix passed to linfct. When the rownames are missing, the rownumbers are used. Best regards, ir. Thierry Onkelinx Instituut voor natuur- en bosonderzoek / Research Institute for Nature and Forest team Biometrie Kwaliteitszorg / team Biometrics Quality Assurance Kliniekstraat 25 1070 Anderlecht Belgium + 32 2 525 02 51 + 32 54 43 61 85 thierry.onkel...@inbo.be www.inbo.be To call in the statistician after the experiment is done may be no more than asking him to perform a post-mortem examination: he may be able to say what the experiment died of. ~ Sir Ronald Aylmer Fisher The plural of anecdote is not data. ~ Roger Brinner The combination of some data and an aching desire for an answer does not ensure that a reasonable answer can be extracted from a given body of data. ~ John Tukey -Oorspronkelijk bericht- Van: R-sig-ecology [mailto:r-sig-ecology-boun...@r-project.org] Namens Matthew Van Scoyoc Verzonden: vrijdag 12 december 2014 0:08 Aan: r-sig-ecology@r-project.org Onderwerp: [R-sig-eco] How do I interpret linear mixed model contrast estimates from multcomp::glht()? So, what do the rows correspond to in the summary (e.g. 1 == 0)? I was thinking the answer was buried *cc*, but I can't figure it out. Consider this modified example I stole from here https://stat.ethz.ch/pipermail/r-sig-mixed-models/2009q4/003061.html... options(contrasts = c(factor = contr.SAS, ordered = contr.poly)) library(mlmRev) library(lme4) library(lmerTest) library(contrast) library(multcomp) data(egsingle) # Linear mixed model math.lmm - lmer(math ~ year * size + female + (1|childid) + (1|schoolid), egsingle) # Linear model math.lm - lm(math ~ year * size + female, data = egsingle) # Calculate contrast matrix cc-contrast(math.lm, a = list(year = c(.5, 1.5, 2.5), size = 380, female = levels(egsingle$female)), + b = list(year = c(.5, 1.5, 2.5), size = 800, female = levels(egsingle$female))) # Calculate estimates summary(glht(math.lmm, linfct = cc$X)) Simultaneous Tests for General Linear Hypotheses Fit: lme4::lmer(formula = math ~ year * size + female + (1 | childid) + (1 | schoolid), data = egsingle) Linear Hypotheses: Estimate Std. Error z value Pr(|z|) 1 == 0 0.127740.08020 1.593 0.1272 2 == 0 0.153220.08066 1.9000.0669 . 3 == 0 0.178700.08178 2.1850.0341 * 4 == 0 0.127740.08020 1.5930.1273 5 == 0 0.153220.08066 1.9000.0669 . 6 == 0 0.178700.08178 2.1850.0342 * --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- single-step method) Ultimately I would like to create a dataframe so I can plot the contrasts, something like this... x = summary(glht(math.lmm, linfct = cc$X)) # Contrast data frame math.contr = data.frame(Effect.Interaction = ..., Estimate = x[[test]]$coefficients, Std.Error = x[[test]]$sigma) Thanks for the help! Cheers, MVS = Matthew Van Scoyoc https://mail.google.com/mail/?view=cmfs=1tf=1to=mvansco...@aggiemail.usu.edu https://sites.google.com/site/scoyoc/ = Think SNOW! [[alternative HTML version deleted]] ___ R-sig-ecology mailing list R-sig-ecology@r-project.org https://stat.ethz.ch/mailman/listinfo/r-sig-ecology Disclaimer Bezoek onze website / Visit our website https://drupal.inbo.be/nl/disclaimer-mailberichten-van-het-inbo [[alternative HTML version deleted]] ___ R-sig-ecology mailing list R-sig-ecology@r-project.org https://stat.ethz.ch/mailman/listinfo/r-sig-ecology
[R-sig-eco] Community distance matrix deconstruction
Hi all. I have a community analysis data manipulation puzzle for you... hopefully someone can help. Please let me know if this question needs clarification, has previously been answered, or would be better sent to a different list. Details follow. Thank you, Kate --- Here is a simplified version of my problem: I ran a community manipulation experiment with 7 reps of 2 treatments, for a total of 14 communities. Communities 1-7 are in Treatment 1 and 8-14 are in Treatment 2. I identified 5 taxa in the 14 communities and calculated a community dissimilarity matrix (14*14). Now I would like to decompose the distance matrix into a dataframe with the following column headings: community1s, community2s, withinORbetweenTRT, and distance. “Within or between treatment” indicates if the distance is between two communities within the same treatment or between the two treatments (values of 0 or 1). I did it by hand below to demonstrate, but my actual dataset has 100 communities so I need to figure out how to automate it... df-data.frame(cbind(1:14, 18:5, 3:16, 14:1, 16:3)) #random values dist-dist(df) distance-as.vector(dist) community1s-c(1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3, 4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7, 8,8,8,8,8,8,9,9,9,9,9,10,10,10,10,11,11,11,12,12,13) community2s-c(2,3,4,5,6,7,8,9,10,11,12,13,14,3,4,5,6,7,8,9,10,11,12,13,14, 4,5,6,7,8,9,10,11,12,13,14,5,6,7,8,9,10,11,12,13,14, 6,7,8,9,10,11,12,13,14,7,8,9,10,11,12,13,14, 8,9,10,11,12,13,14,9,10,11,12,13,14,10,11,12,13,14, 11,12,13,14,12,13,14,13,14,14) #now I need a column for whether or not the comparison is within treatment or #between treatments. I ordered the sites by treatment so sites 1-7 are in treatment1 #and 8-14 are in treatment2. 0 is within and 1 is between. withinORbetweenTRT-c(0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0, 1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,0, 1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0) #now I can assemble the dataframe: final.df-cbind(community1s, community2s, withinORbetweenTRT, distance) final.df I would appreciate any ideas! -- Kate Boersma, PhD Department of Biology University of San Diego 5998 Alcala Park San Diego CA 92110 kateboer...@gmail.com http://www.oregonstate.edu/~boersmak/ Kate S. Boersma, Ph.D. kateboer...@gmail.com http://people.oregonstate.edu/~boersmak/ Department of Biology University of San Diego 5998 Alcala Park San Diego, CA 92110 [[alternative HTML version deleted]] ___ R-sig-ecology mailing list R-sig-ecology@r-project.org https://stat.ethz.ch/mailman/listinfo/r-sig-ecology
Re: [R-sig-eco] Community distance matrix deconstruction
Kate, Your question really may need some clarification, but at the moment it looks to me that you want to have row indices and column indices for your dissimilarities, and information about within/between dissimilarities. If this is what you want to have, it is an easy task. In the following I use a real data set from vegan to make this task a bit more general: library(vegan) data(mite, mite.env) ## dissimilarities d - dist(mite) ## row and column indices row - as.dist(row(as.matrix(d))) col - as.dist(col(as.matrix(d))) ## within same class: 1 = within, 0 = between within - with(mite.env, as.dist(outer(Shrub, Shrub, ==))) ## data frame -- the pedestrian way: snappier alternatives possible df = data.frame(row=as.vector(row), col=as.vector(col), within=as.vector(within), dist=as.vector(d)) ## see it tail(df) tail(df) # row col within dist #2410 68 67 1 691.69502 #2411 69 67 0 716.93863 #2412 70 67 0 700.60973 #2413 69 68 0 78.08329 #2414 70 68 0 24.24871 #2415 70 69 1 67.86015 I don't think you really want to have this: you only believe that you want to have this (mauvaise foi, like they used to say). If you only want to get summaries, check function meandist in vegan. Cheers, Jari Oksanen On 13/12/2014, at 02:17 AM, Kate Boersma wrote: Hi all. I have a community analysis data manipulation puzzle for you... hopefully someone can help. Please let me know if this question needs clarification, has previously been answered, or would be better sent to a different list. Details follow. Thank you, Kate --- Here is a simplified version of my problem: I ran a community manipulation experiment with 7 reps of 2 treatments, for a total of 14 communities. Communities 1-7 are in Treatment 1 and 8-14 are in Treatment 2. I identified 5 taxa in the 14 communities and calculated a community dissimilarity matrix (14*14). Now I would like to decompose the distance matrix into a dataframe with the following column headings: community1s, community2s, withinORbetweenTRT, and distance. “Within or between treatment” indicates if the distance is between two communities within the same treatment or between the two treatments (values of 0 or 1). I did it by hand below to demonstrate, but my actual dataset has 100 communities so I need to figure out how to automate it... df-data.frame(cbind(1:14, 18:5, 3:16, 14:1, 16:3)) #random values dist-dist(df) distance-as.vector(dist) community1s-c(1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3, 4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7, 8,8,8,8,8,8,9,9,9,9,9,10,10,10,10,11,11,11,12,12,13) community2s-c(2,3,4,5,6,7,8,9,10,11,12,13,14,3,4,5,6,7,8,9,10,11,12,13,14, 4,5,6,7,8,9,10,11,12,13,14,5,6,7,8,9,10,11,12,13,14, 6,7,8,9,10,11,12,13,14,7,8,9,10,11,12,13,14, 8,9,10,11,12,13,14,9,10,11,12,13,14,10,11,12,13,14, 11,12,13,14,12,13,14,13,14,14) #now I need a column for whether or not the comparison is within treatment or #between treatments. I ordered the sites by treatment so sites 1-7 are in treatment1 #and 8-14 are in treatment2. 0 is within and 1 is between. withinORbetweenTRT-c(0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0, 1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,0, 1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0) #now I can assemble the dataframe: final.df-cbind(community1s, community2s, withinORbetweenTRT, distance) final.df I would appreciate any ideas! -- Kate Boersma, PhD Department of Biology University of San Diego 5998 Alcala Park San Diego CA 92110 kateboer...@gmail.com http://www.oregonstate.edu/~boersmak/ Kate S. Boersma, Ph.D. kateboer...@gmail.com http://people.oregonstate.edu/~boersmak/ Department of Biology University of San Diego 5998 Alcala Park San Diego, CA 92110 [[alternative HTML version deleted]] ___ 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