0

我是 R 的新手。如果你能帮助我,那就太好了。我的问题如下:

假设我有 5 个组,Group1、Group2、Group3、Group4 和 Group5,每个组包含 100 个数据点。

现在我想使用 t-test 或 ks-test 将这些组相互比较,并希望生成一个 p 值矩阵。本质上,会有一个 5x5 的 p 值矩阵。我已经使用函数对相关性做了类似的工作corr.mat。在这里,5 个组仅用于说明目的,在一天结束时,我必须对近 250 个组进行此操作,因此我必须生成一个包含 p 值的 250x250 矩阵。

如果你们中的任何人可以帮助我实现这一目标,那将是非常好的你。

到目前为止我在 R 中所知道的事情:

通过加载 .csv 文件将数据加载到 R 中:

my.data = read.csv(file.choose())
attach(your.data)
4

1 回答 1

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
  } )
)
于 2013-12-07T15:07:09.157 回答