Я думаю, что ошибка, вероятно, потому, что levels(factorvar)[1:2]
возвращает только два значения «1» и «2», но t.test
ожидает длина векторов с обеих сторон от ~
должна быть одинаковой. Другими словами, речь не идет о том, чтобы на каждом уровне фактора было различное количество наблюдений. Скорее, если, например, у вас есть 40 значений var1
для factorvar
= 1 и 50 значений var1
для factorvar
= 2, вам понадобится вектор длины 90 по обе стороны от ~
.
Попробуйте вместо этого:
t.test(var1 ~ factorvar, data=mydf[mydf$factorvar %in% c(1,2),])
Вы также можете создать функцию, так что вам не придется набирать весь этот код для каждой комбинации факторов:
# Function to return p-values from t-test between two factor levels
my.t = function(fac1, fac2){
t.test(mydf$var1[mydf$factorvar==fac1],
mydf$var1[mydf$factorvar==fac2])$p.value
}
# Run the function on factor levels 1 and 2
my.t(1,2)
# Do all four at once
mapply(my.t, seq(1,7,2), seq(2,8,2))
Если вы хотите верните весь результат t-теста для каждой пары уровней факторов (а не только p-значения), затем удалите $p.value
из функции выше и запустите mapply
с добавлением SIMPLIFY=FALSE
.
Это сайт кодирования, а не сайт статистических консультаций, но также остерегайтесь multiple comparisons.