Как я могу выполнить тесты на равенство дисперсии точек данных в строке, когда у меня несколько (400k+) строк
У меня есть точки данных для двух групп, расположенных в одной строке, и несколько строк данных (400k+). Я хотел бы сравнить дисперсию двух групп для каждой из этих 400K+ строк. Данные будут примерно такими:
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
или же
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
Но очевидно, что это было бы непрактично для 400k + строк данных.
Я думал, что это будет что-то простое, как с помощью 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
Кто-нибудь знает как это сделать?
1 ответ
Поскольку мы используем анонимный вызов функции, 'y' для leveneTest
это "х" (то есть значения в каждой строке), а не полный набор данных.
apply(y, 1, function(x) leveneTest (y = x, group = group))
Или вместо использования анонимного вызова, следующее также должно работать
apply(y, 1, FUN = leveneTest, group=group)