2015-05-19 1 views
0

Мои данные и код, как это:Как выполнить т-тестов для каждого уровня фактора с tapply

my_vector <- rnorm(150) 
my_factor1 <- gl(3,50) 
my_factor2 <- gl(2,75) 

tapply(my_vector, my_factor1, function(x) 
    t.test(my_vector~my_factor2, paired=T)) 

Я хочу сделать отдельную Стьюдента для каждого уровня my_factor1, чтобы проверить my_vector для обоих уровней my_factor2.

Однако, с моим кодом t-критерий не разбивает уровни my_factor1, а результаты равны для каждого уровня, потому что my_vector полностью включен в каждый t.test.

Это выход моего кода:

$`1` 

Paired t-test 

data: my_vector by my_factor2 
t = 0.2448, df = 74, p-value = 0.8073 
alternative hypothesis: true difference in means is not equal to 0 
95 percent confidence interval: 
-0.2866512 0.3669667 
sample estimates: 
mean of the differences 
     0.04015775 


$`2` 

Paired t-test 

data: my_vector by my_factor2 
t = 0.2448, df = 74, p-value = 0.8073 
alternative hypothesis: true difference in means is not equal to 0 
95 percent confidence interval: 
-0.2866512 0.3669667 
sample estimates: 
mean of the differences 
     0.04015775 


$`3` 

Paired t-test 

data: my_vector by my_factor2 
t = 0.2448, df = 74, p-value = 0.8073 
alternative hypothesis: true difference in means is not equal to 0 
95 percent confidence interval: 
-0.2866512 0.3669667 
sample estimates: 
mean of the differences 
     0.04015775 

Что я упускаю или делаю неправильно?

+1

вы сказали 'функция (х)', но где х в формуле? а также что '' 'в функции? – user227710

+0

'lapply (X = split (my_vector, my_factor1), FUN = function (z) {lapply (X = split (my_vector, my_factor2), FUN = function (y, z, ...) t.test (y, z), z, парный = T)}) Это делает то, что вы хотите в общем виде, и можете иметь дело с факторами «1: n» в векторе факторов, но не использует 'tapply' – Vlo

ответ

1

Ваш пример немного проблематично, так как если вы установили:

df <- data.frame(my_vector = rnorm(150), 
       my_factor1 = gl(3,50), 
       my_factor2 = gl(2,75) 
       ) 

Вы будете иметь только один уникальное значение для my_factor2 при my_factor1 = 1 или 3 из-за того, как ваши повторы перекрываются. См. ?gl. Так делают:

df <- data.frame(my_vector = rnorm(150), 
       my_factor1 = gl(3,1,150), 
       my_factor2 = gl(2,1,150) 
       ) 
with(df, 
     by(df, my_factor1, 
      function(x) t.test(my_vector ~ my_factor2, data=x) 
     ) 
    ) 

Который, как представляется, производит желаемый результат.

В стороне note-- считают коррекцию для множественных сравнений: https://stats.stackexchange.com/questions/16779/when-is-multiple-comparison-correction-necessary

+0

Hi C8H10N4O2, отличный ответ, как могу ли я сделать это с несколькими столбцами? –

Смежные вопросы