r i = {{i}}
r traits[i]
# Check design lc <- ck.rcbd(traits[i], geno, rep, dfr) # Fit a model for assumptions plots model <- aov(dfr[, traits[i]] ~ dfr[, geno] + dfr[, rep]) # Estimate missing values trait.est <- paste0(traits[i], ".est") if (lc$nmis > 0) { dfr[, trait.est] <- mve.rcbd(traits[i], geno, rep, dfr, maxp)[, trait.est] } else { dfr[, trait.est] <- dfr[, traits[i]] } # Get anova table with estimated missing values at <- suppressWarnings(aov.rcbd(traits[i], geno, rep, dfr, maxp)) # CV cv <- (at[3, 3])^0.5 / mean(dfr[, trait.est]) * 100
You have fitted a linear model for a RCBD. The ANOVA table for your model is:
at
r if(lc$nmis > 0) paste0("You have some missing values (", format(lc$pmis * 100, digits = 3), "%) and they have been estimated before running ANOVA.")
The coefficient of variation for this experiment is r format(cv, digits = 4)
%.
The p-value for genotypes is r format(at[1, 5], digits = 4)
r if(at[1, 5] < 0.05) {"which is significant at the 5% level."} else {"which is not significant at the 5% level."}
Don't forget the assumptions of the model. It is supposed that the errors are independent with a normal distribution and with the same variance for all the genotypes. The following plots must help you evaluate this:
par(mfrow = c(1, 2)) plot(model, which = 1) plot(model, which = 2)
Any trend in the residuals in the left plot would violate the assumption of independence while a trend in the variability of the residuals --for instance a funnel shape-- suggests heterogeneity of variances. Departures from the theoretical normal line on the right plot are symptoms of lack of normality.
r if(at[1, 5] < 0.05) {"Below are the sorted means for each genotype with letters indicating if there are significant differences using the least significance difference method and the multiple comparisons method of Tukey, both at the 5% level."} else {"Because the effect of genotypes was not significant in the ANOVA, multiple comparison tests are not presented. The means of your genotypes are:"}
r if (at[1, 5] < 0.05) {paste0("### ", {{i+1}}, ".3.1. LSD test")}
if (at[1, 5] < 0.05) agricolae::LSD.test(dfr[, trait.est], dfr[, geno], at[3, 1], at[3, 3])$groups
r if (at[1, 5] < 0.05) {paste0("### ", {{i+1}}, ".3.2. Tukey test")}
if (at[1, 5] < 0.05) agricolae::HSD.test(dfr[, trait.est], dfr[, geno], at[3, 1], at[3, 3])$groups
if (at[1, 5] > 0.05) tapply(dfr[, trait.est], dfr[, geno], mean)
r if (lc$ng < 10 & at[1, 5] < 0.05) {paste0("### ", {{i+1}}, ".3.3. Plot of means")}
r if(lc$ng < 10) {"It is always good to have some visualization of the data. Because the number of genotypes in your experiment is not so big, we can plot the data for each genotype:"}
if (lc$ng < 10) msdplot(traits[i], geno, dfr, conf = 1, pch = 4)
Below are the variance components for this model, under the assumption that genotypes and blocks are random. Here the model is fitted using REML and missing values are not estimated.
y <- dfr[, traits[i]] fg <- dfr[, geno] fr <- dfr[, rep] ff <- as.formula(y ~ (1|fg) + (1|fr)) model <- lme4::lmer(ff) vc <- data.frame(lme4::VarCorr(model)) vc[vc[, 1] == "fg", 1] <- geno vc[vc[, 1] == "fr", 1] <- rep rownames(vc) <- vc[, 1] vc <- vc[, c(4, 5)] colnames(vc) <- c("Variance", "Std.Dev.") vc
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.