我是R的新人。如果你能帮助我,那就太好了。我的问题如下:
假设我有5个组,Group1,Group2,Group3,Group4和Group5,每个组包含100个数据点。
现在我想使用t-test或ks-test将这些组相互比较,并希望生成p值矩阵。基本上,存在5x5的p值矩阵。我使用corr.mat
函数完成了类似的相关工作。
在这里,5组只是为了说明的目的,在一天结束时,我几乎要在250组上进行,因此我必须生成一个250x250的包含p值的矩阵。
如果你们中的任何一个人能够帮助我实现这一目标,那就更好了。
到目前为止,我在R中知道的事情:
通过加载.csv文件将数据加载到R中:
my.data = read.csv(file.choose())
attach(your.data)
答案 0 :(得分:1)
如果您知道如何计算单个p值, 你可以把这些代码放在一个循环中。
# Sample data
d <- data.frame(
group = paste( "group", rep(1:5, each=100) ),
value = rnorm( 5*100 )
)
# Matrix to store the result
groups <- unique( d$group )
result <- matrix(NA, nc=length(groups), nr=length(groups))
colnames(result) <- rownames(result) <- groups
# Loop
for( g1 in groups ) {
for( g2 in groups ) {
result[ g1, g2 ] <- t.test(
d$value[ d$group == g1 ],
d$value[ d$group == g2 ]
)$p.value
}
}
result
# group 1 group 2 group 3 group 4 group 5
# group 1 1.0000000 0.6533393 0.7531349 0.6239723 0.6194475
# group 2 0.6533393 1.0000000 0.9047020 0.9985489 0.3316215
# group 3 0.7531349 0.9047020 1.0000000 0.8957871 0.4190027
# group 4 0.6239723 0.9985489 0.8957871 1.0000000 0.2833226
# group 5 0.6194475 0.3316215 0.4190027 0.2833226 1.0000000
您也可以使用outer
:
groups <- unique( d$group )
outer(
groups, groups,
Vectorize( function(g1,g2) {
t.test(
d$value[ d$group == g1 ],
d$value[ d$group == g2 ]
)$p.value
} )
)