Background
I am conducting a meta-analysis that includes previously published data. Often, differences between treatments are reported with P-values, least significant differences (LSD), and other statistics but provide no direct estimate of the variance.
In the context of the model that I am using, an overestimate of variance is okay.
Problem
Here is a list of transformations to $SE$ where $SE=\sqrt{MSE/n}$ (Saville 2003) that I am considering, feedback appreciated; below, I assume that $\alpha=0.05$ so $1-^{\alpha}/_2=0.975$ and variables are normally distributed unless otherwise stated:
Questions:
given $P$, $n$, and treatment means $\bar X_1$ and $\bar X_2$ $$SE=\frac{\bar X_1-\bar X_2}{t_{(1-\frac{P}{2},2n-2)}\sqrt{2/n}}$$
given LSD (Rosenberg 2004), $\alpha$, $n$, $b$ where $b$ is number of blocks, and $n=b$ by default for RCBD $$SE = \frac{LSD}{t_{(0.975,n)}\sqrt{2bn}}$$
given MSD (minimum significant difference) (Wang 2000), $n$, $\alpha$, df = $2n-2$ $$SE = \frac{MSD}{t_{(0.975, 2n-2)}\sqrt{2}}$$
given a 95% Confidence Interval (Saville 2003) (measured from mean to upper or lower confidence limit), $\alpha$, and $n$ $$SE = \frac{CI}{t_{(\alpha/2,n)}}$$
given Tukey's HSD, $n$, where $q$ is the 'studentized range statistic', $$SE = \frac{HSD}{q_{(0.975,n)}}$$
An R function to encapsulate these equations:
Example Data:
data <- data.frame(Y=rep(1,5), stat=rep(1,5), n=rep(4,5), statname=c('SD', 'MSE', 'LSD', 'HSD', 'MSD')
Example Use:
transformstats(data)
The
transformstats
function:transformstats <- function(data) { ## Transformation of stats to SE ## transform SD to SE if ("SD" %in% data$statname) { sdi <- which(data$statname == "SD") data$stat[sdi] <- data$stat[sdi] / sqrt(data$n[sdi]) data$statname[sdi] <- "SE" } ## transform MSE to SE if ("MSE" %in% data$statname) { msei <- which(data$statname == "MSE") data$stat[msei] <- sqrt (data$stat[msei]/data$n[msei]) data$statname[msei] <- "SE" } ## 95%CI measured from mean to upper or lower CI ## SE = CI/t if ("95%CI" %in% data$statname) { cii <- which(data$statname == '95%CI') data$stat[cii] <- data$stat[cii]/qt(0.975,data$n[cii]) data$statname[cii] <- "SE" } ## Fisher's Least Significant Difference (LSD) ## conservatively assume no within block replication if ("LSD" %in% data$statname) { lsdi <- which(data$statname == "LSD") data$stat[lsdi] <- data$stat[lsdi] / (qt(0.975,data$n[lsdi]) * sqrt( (2 * data$n[lsdi]))) data$statname[lsdi] <- "SE" } ## Tukey's Honestly Significant Difference (HSD), ## conservatively assuming 3 groups being tested so df =2 if ("HSD" %in% data$statname) { hsdi <- which(data$statname == "HSD" & data$n > 1) data$stat[hsdi] <- data$stat[hsdi] / (qtukey(0.975, data$n[lsdi], df = 2)) data$statname[hsdi] <- "SE" } ## MSD Minimum Squared Difference ## MSD = t_{\alpha/2, 2n-2}*SD*sqrt(2/n) ## SE = MSD*n/(t*sqrt(2)) if ("MSD" %in% data$statname) { msdi <- which(data$statname == "MSD") data$stat[msdi] <- data$stat[msdi] * data$n[msdi] / (qt(0.975,2*data$n[lsdi]-2)*sqrt(2)) data$statname[msdi] <- "SE" } if (FALSE %in% c('SE','none') %in% data$statname) { print(paste(trait, ': ERROR!!! data contains untransformed statistics')) } return(data) }
References