Непарный, но не парный цикл ttest в R работает

У меня есть цикл, который проходит через фрейм данных, запускает ttest и сохраняет полученное p-значение каждого ttest в другом фрейме данных.

Вот цикл, где mydata - это фрейм данных, на котором выполняются тесты ttest. 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 для непарного (paired = FALSE) ttest:

          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

Я проверил эту строку своего цикла изолированно, используя первый столбец моего фрейма данных, «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)

Я понятия не имею, почему изменение параметра «парный» на ИСТИНА может вызвать это. Любая помощь / совет будут очень благодарны. Спасибо - Пол


person user8271479    schedule 07.07.2017    source источник
comment
Это кажется очень необычным. вы должны предоставить воспроизводимый пример с образцами входных данных, которые мы можно запустить для проверки (это не обязательно должны быть ваши фактические данные). Похоже, где-то еще может быть опечатка.   -  person MrFlick    schedule 07.07.2017
comment
@MrFlick - хорошо, спасибо, я постараюсь предоставить этот пример   -  person user8271479    schedule 07.07.2017
comment
Согласно t.test документация, когда paired=TRUE x и y должны иметь одинаковую длину. Кажется, что ваш изолированный тест не удался, и ttest просто показывал старое значение.   -  person Marcelo    schedule 08.07.2017


Ответы (1)


Здесь вы инициализируете mydf data.frame значениями 1: 4

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

в основном цикл ничего не делает, потому что t.test выдает ошибку, когда вы делаете PAIRED=TRUE, потому что ваши два набора значений не одинаковой длины (и они должны быть при выполнении парного t-теста. У вас есть 22 значения, где Pre == 1 и 13 значений, где Pre == 2. Вы не можете провести парный тест с таким дисбалансом.

person MrFlick    schedule 08.07.2017
comment
Я знаю о статистике даже меньше, чем о кодировании - спасибо! - person user8271479; 08.07.2017