TL; DR版
我有矢量X1,X2,X3,... Xn。我想测试一下,对于每个可能的向量组合,任何一个向量的平均值是否与任何其他向量的平均值显着不同。我正在寻找一种更好的方法在R中执行此操作,而不是运行n ^ 2个人t.tests。
全文
我的数据框中充满了特定CSA的人口普查数据。每行包含特定人口普查区域的每个变量(列)的观察结果。
我需要做的是比较不同MSA中人口普查区域内相同变量的均值。换句话说,我想根据MSA指定变量(其中一列)对我的data.frame进行因子分析,然后在每个新分解的MSA上成对地比较另一个感兴趣变量的均值差异。这基本上是在每个随后的向量上进行成对t.tests,但我希望以比一次又一次写t.test(MSAx,MSAy)更优雅的方式做到这一点。我怎么能这样做?
答案 0 :(得分:6)
只需使用pairwise.t.test
,这是一个例子:
x1 <- rnorm(50)
x2 <- rnorm(30, mean=0.2)
x3 <- rnorm(100,mean=0.1)
x4 <- rnorm(100,mean=0.4)
x <- data.frame(data=c(x1,x2,x3,x4),
key=c(
rep("x1", length(x1)),
rep("x2", length(x2)),
rep("x3", length(x3)),
rep("x4", length(x4))) )
pairwise.t.test(x$data,
x$key,
pool.sd=FALSE)
# Pairwise comparisons using t tests with non-pooled SD
#
# data: x$data and x$key
#
# x1 x2 x3
# x2 0.7395 - -
# x3 0.9633 0.9633 -
# x4 0.0067 0.9633 0.0121
#
# P value adjustment method: holm
答案 1 :(得分:5)
我的方法下面对@ashkan提出的方法的优点是我的删除重复项。 (即X1与X2或X2对比X1将出现在结果中,而不是两者)
# Generate dummy data
df <- data.frame(matrix(rnorm(100), ncol = 10))
colnames(df) <- paste0("X", 1:10)
# Create combinations of the variables
combinations <- combn(colnames(df),2, simplify = FALSE)
# Do the t.test
results <- lapply(seq_along(combinations), function (n) {
df <- df[,colnames(df) %in% unlist(combinations[n])]
result <- t.test(df[,1], df[,2])
return(result)})
# Rename list for legibility
names(results) <- paste(matrix(unlist(combinations), ncol = 2, byrow = TRUE)[,1], matrix(unlist(combinations), ncol = 2, byrow = TRUE)[,2], sep = " vs. ")
答案 2 :(得分:3)
如果您有data.frame并且希望在data.frame的每一列之间独立执行T检验,则可以使用双应用循环:
apply(MSA, 2, function(x1) {
apply(MSA, 2, function(x2) {
t.test(x1, x2)
})
})
伴随这种蛮力方法的良好可视化将是森林情节:
cis <- apply(MSA, 2, function(x) mean(x) + c(-1, 1) * sd(x) * 1.96)
plot.new()
plot.window(xlim=c(1, ncol(cis)), ylim=range(cis))
segments(1:ncol(cis), cis[1, ], 1:ncol(cis), cis[2, ])
axis(1, at=1:ncol(cis), labels=colnames(MSA))
axis(2)
box()
abline(h=mean(MSA), lty='dashed')
title('Forest plot of 95% confidence intervals of MSA')
答案 3 :(得分:0)
除了来自 quarzgar 的响应之外,还有另一种方法可以在 R 中对多个因子执行成对 ttest。基本上是通过创建因子水平组合使用的两个(或多个)因子的技巧。
2x2 经典设计示例:
df <- data.frame(Id=c(rep(1:100,2),rep(101:200,2)),
dv=c(rnorm(100,10,5),rnorm(100,20,7),rnorm(100,11,5),rnorm(100,12,6)),
Group=c(rep("Experimental",200),rep("Control",200)),
Condition=rep(c(rep("Pre",100),rep("Post",100)),2))
#ANOVA
summary(aov(dv~Group*Condition+Error(Id/Condition),data = df))
#post-hoc across all factors
df$posthoclevels <- paste(df$Group,df$Condition) #factor combination
pairwise.t.test(df$dv,df$posthoclevels)
# Pairwise comparisons using t tests with pooled SD
#
# data: df$dv and df$posthoclevels
#
# Control Post Control Pre Experimental Post
# Control Pre 0.60 - -
# Experimental Post <2e-16 <2e-16 -
# Experimental Pre 0.26 0.47 <2e-16
#
# P value adjustment method: holm