R工作中未配对但未配对的ttest循环

时间:2017-07-07 15:33:16

标签: r for-loop t-test

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

以下是' mydata'是运行ttests的数据帧。 ' 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

这是我对未配对(配对= FALSE)ttest的mydf输出:

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

然而,当我将paired = FALSE更改为paired = TRUE(运行配对的ttest)时,这里是mydf:

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

我使用我的数据框的第一列单独检查了我的循环的这一行,&#39; 1&#39;在双括号中,(对于配对= 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)

我不知道为什么要更改配对的&#39;参数为TRUE会导致这种情况发生。任何帮助/建议将不胜感激。谢谢 - 保罗

1 个答案:

答案 0 :(得分:0)

您使用值1:4

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

基本上循环不执行任何操作,因为t.test在执行PAIRED=TRUE时抛出错误,因为您的两组值不是相同的长度(并且它们需要在执行配对t时你有22个值,其中Pre == 1和13个值,其中Pre == 2.你不能用这样的不平衡进行配对测试。