0

我有一个循环,它遍历一个数据帧,运行 ttests 并将每个 ttest 的结果 p 值存储在另一个数据帧中。

这是循环,其中“mydata”是运行测试的数据帧。'mydata' 是一个有 4 列的数据框:

df <- mydata
mydf <- data.frame(c(1:4))

# this is the new dataframe being initialized to store my p-values

row.names(mydf) <- names(df)
for(i in names(df)){
  if(sd(df[[i]]) == 0) {

  # this prevents the loop from terminating and returning an error when ttests 
  # are run on columns with binary values 

  } else {
    ttest <- t.test(df[df$Pre==1,][[i]], df[df$Pre==2,][[i]], paired=FALSE)

    # 'Pre' is the column that groups my data into 
    # distinct cohorts. I am comparing the Pre cohort versus the Post cohort 
    # in these ttests.  

    mydf[i,1] <- ttest$p.value
  }
}
mydf

这是我对未配对(配对=假)测试的 mydf 输出:

          c.1.4.                             
density 0.3569670
clust   0.9715987
Pre     3.0000000
HC      4.0000000

但是,当我将paired=FALSE 更改为paired=TRUE(运行配对测试)时,这里是mydf:

           c.1.4.
density      1
clust        2
Pre          3
HC           4

我使用我的数据框的第一列,双括号中的“1”(对于paired = TRUE)单独检查了循环的这一行,它似乎正在输出一个p值:

ttest <- t.test(df[df$Pre==1,][[1]], df[df$Pre==2,][[1]], paired=TRUE)
ttest$p.value
[1] 0.356967

以下是可用于重现错误的示例数据集:

            density      clust      Pre HC
RDHC008A_13 0.47991     0.676825    1   1
RDHC009A_13 0.49955     0.696441    1   1
RDHC010A_16 0.491454    0.706507    1   1
RDHC013A_13 0.442879    0.689118    1   1
RDHC014A_13 0.453823    0.691603    1   1
RDHC016A_16 0.481259    0.706978    1   1
RDHC019A_06 0.515442    0.699514    1   1
RDHC021A_15 0.449925    0.685202    1   1
RDHC022A_12 0.461319    0.705446    1   1
RDHC023A_11 0.468816    0.667698    1   1
RDHC024A_12 0.515142    0.719474    1   1
RDHC025A_13 0.496702    0.710877    1   1
RDHC026A_12 0.477061    0.695061    1   1
RDHC027A_12 0.515442    0.722269    1   1
RDHC029A_12 0.406747    0.669998    1   1
RDHC030A_12 0.476162    0.69219     1   1
RDHC032B_13 0.50075     0.685474    1   1
RDHC034B_07 0.525487    0.725558    1   1
RDHC036B_07 0.468816    0.698904    1   1
RDHC038B_07 0.470015    0.706668    1   1
RDHC039B_07 0.511544    0.712818    1   1
RDHC041A_14 0.551574    0.732983    1   1
RDHC004C_12 0.486207    0.695121    2   1
RDHC005C_12 0.505997    0.695598    2   1
RDHC006C_13 0.487406    0.697044    2   1
RDHC013C_12 0.41979     0.685518    2   1
RDHC015C_13 0.297751    0.69632     2   1
RDHC016C_16 0.463718    0.700011    2   1
RDHC019C_14 0.508096    0.690071    2   1
RDHC021C_12 0.448426    0.688265    2   1
RDHC022C_12 0.468816    0.700968    2   1
RDHC024C_12 0.515292    0.70664     2   1
RDHC025C_13 0.473163    0.704231    2   1
RDHC027C_12 0.518741    0.732939    2   1
RDHC030C_11 0.489205    0.708174    2   1

您可以通过执行以下操作来导入它:

复制数据并将其粘贴到以下代码的引号中到 R 中:

zz <- ""

现在,将数据分配给 data.frame:

mydata <- read.table(text=zz, header=TRUE)

我不知道为什么将“paired”参数更改为 TRUE 会导致这种情况发生。任何帮助/建议将不胜感激。谢谢 - 保罗

4

1 回答 1

0

您在mydf此处使用值 1:4 初始化 data.frame

mydf <- data.frame(c(1:4))

基本上循环什么都不做,因为t.test当你这样做时会抛出错误,PAIRED=TRUE因为你的两组值的长度不同(并且在进行配对 t 检验时它们需要如此。你有 22 个值,其中 Pre==1 和 13 Pre==2 的值。你不能对这样的不平衡进行配对测试。

于 2017-07-08T02:02:45.047 回答