var.comp.one.way.model <- function(fmla, dat) { ## Purpose: Variance Component Analysis for One-Way Random Model. ## Application: Repeatability and Reproducibility Analysis (R&R for Precision Study). ## Use Method of Moment estimation. ## Arguments: ## fmla: a formula with one response and one factor (One-way Random Model). ## dat: a data frame ## Return: Variance Component Analysis such as ## DF: Degrees of Freedom ## VC: Variance Component (with proportion of total in percentage) ## SD: Standard Deviation (from the squared root of Variance Component) ## CV%: Coefficient of Variation as Percentage ## Author: Feiming Chen ## ________________________________________________ a <- aov(fmla, dat) b <- summary(a) cat("Analysis of Variance:\n") print(b) # Analysis of Variance MEAN <- mean(a$model[[1]]) # Mean N <- nrow(a$model) # Number of observations cat("\nMean: ", round(MEAN, 3), " (N =", N, ")\n", sep="") d <- b[[1]] VC.error <- d$"Mean Sq"[2] # Mean Sum of Squares for Error = Variance Component for Error (Repeatability) Q2 <- d$"Sum Sq"[1] # Sum of Squares for Treatment DF.treatment <- d$Df[1] # DF for Treatment N.i <- table(a$model[[2]]) # Number of Replicates in Each Treatment Choice VC.treatment <- (Q2 - DF.treatment * VC.error) / (N - sum(N.i^2) / N) VC <- c(VC.treatment, VC.error, VC.treatment + VC.error) VC.pct.total <- VC / VC[3] * 100 SD <- sqrt(VC) CV.pct <- SD / MEAN * 100 ans <- data.frame(Name = c(attr(a$terms, "term.labels"), "Error", "Total"), VC = round(VC, 3), VC.Pct.Total = round(VC.pct.total, 3), SD = round(SD, 3), CV.Pct = round(CV.pct, 3)) cat("\nVariance Component Analysis:\n") ans } if (F) { # Unit Test dat <- data.frame(Yield=c(3.9, 4.05, 4.25, 3.60, 4.2, 4.05, 3.85, 4.15, 4.6, 4.15, 4.4, 3.35, 3.8), Variety=factor(c(1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4))) fmla <- Yield ~ Variety var.comp.one.way.model(fmla, dat) ## Validation library(VCA) anovaVCA(fmla, dat) }
Friday, November 30, 2018
Variance Component Analysis for One-Way Random Model
Subscribe to:
Posts (Atom)