Contexte
Je mène une méta-analyse qui inclut des données publiées précédemment. Souvent, les différences entre les traitements sont signalées avec les valeurs P, les différences les moins significatives (LSD) et d'autres statistiques, mais ne fournissent aucune estimation directe de la variance.
Dans le contexte du modèle que j'utilise, une surestimation de la variance est acceptable.
Problème
Voici une liste de transformations vers où S E = √ (Saville 2003)que je considère,rétroaction appréciée; ci-dessous, je suppose queα=0,05donc1- α / 2=0,975 et les variables sont normalement distribuées sauf indication contraire:
Des questions:
Une fonction R pour encapsuler ces équations:
Exemples de données:
data <- data.frame(Y=rep(1,5), stat=rep(1,5), n=rep(4,5), statname=c('SD', 'MSE', 'LSD', 'HSD', 'MSD')
Exemple d'utilisation:
transformstats(data)
La
transformstats
fonction: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) }
Les références