Как я могу выполнить тесты на равенство дисперсии точек данных в строке, когда у меня есть несколько (400 тыс. +) строк [дубликаты]

У меня есть точки данных для двух групп, расположенных в одной строке, и несколько строк данных (400 тыс.+). Я хотел бы сравнить дисперсию двух групп для каждой из этих 400 тыс.+ строк. Данные будут примерно такими:

y<-rbind(c(1,2,20,50,100,1,2,3,1,2),c(20,2,80,50,100,1,2,3,1,2))
group<-structure(c(1L,1L,1L,1L,1L,2L,2L,2L,2L,2L), .Label = c("T","C"), class="factor")

Я могу запустить leveneTest из пакета car для одной строки данных, например:

leveneTest(y = y[1,], group = group) # first row of data

Levene's Test for Homogeneity of Variance (center = median)
  Df F value  Pr(>F)  
group  1   4.527 0.06603 .
   8 

or

leveneTest (y = y[2,], group = group) # second row of data

Levene's Test for Homogeneity of Variance (center = median)
  Df F value   Pr(>F)   
group  1   11.92 0.008662 **
   8 

Но, очевидно, это было бы нецелесообразно для 400 000 строк данных.

Я думал, что это будет что-то простое, например, использовать apply так же, как для t.test, например -

apply(y, 1, function (x) t.test(x[1:5],x[6:10])$p.value)
[1] 0.15260837 0.05551746

Но когда я пробую это для leveneTest

apply(y, 1, function(x) leveneTest (y = y, group = group))

Я получаю следующую ошибку

Error in complete.cases(y, group) : 
not all arguments have the same length

Кто-нибудь знает как это сделать?


person Eric Smith    schedule 29.05.2016    source источник
comment
function(x) leveneTest (y = y, group = group)? Вы не используете x в функции?????   -  person IRTFM    schedule 02.06.2016


Ответы (1)


Поскольку мы используем вызов анонимной функции, «y» для leveneTest — это «x» (т. е. значения в каждой строке), а не полный набор данных.

apply(y, 1, function(x) leveneTest (y = x, group = group))

Или вместо использования анонимного вызова также должно работать следующее

apply(y, 1, FUN = leveneTest, group=group)
person akrun    schedule 29.05.2016