TL; DR版
我有矢量X1,X2,X3,... Xn.我想测试以查看任何一个矢量的平均值是否大于任何其它载体的平均值显著不同,对于载体的每一种可能组合.我正在寻找一种更好的方法在R中执行此操作而不是运行n ^ 2个别t.tests.
全文
我的数据框中充满了特定CSA的人口普查数据.每行包含特定人口普查区域的每个变量(列)的观察结果.
我需要做的是比较不同MSA中人口普查区域内同一变量的均值.换句话说,我想根据MSA指定变量(其中一列)对我的data.frame进行因子分析,然后在每个新分解的MSA上成对地比较另一个感兴趣变量的均值差异.这基本上是在每个随后的向量中进行成对t.tests,但我希望以比在一次又一次地编写t.test(MSAx,MSAy)更优雅的方式做到这一点.我怎样才能做到这一点?
我的方法下面对@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. ")
Run Code Online (Sandbox Code Playgroud)
只是用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
Run Code Online (Sandbox Code Playgroud)