как выполнить ранговый тест с подписью Уилкоксона с отсутствующими данными из одного набора данных

#r #statistics

Вопрос:

У меня возникли проблемы с анализом парных данных, но для одного набора данных имеется 500 наблюдений, а для другого-541. Ошибка функции говорит о том, что наблюдения не совпадают, как бы мы это исправили?

Комментарии:

1. Но в таком случае, как они могут быть соединены ?? Это не имеет смысла. Вам нужны два вектора, в которых каждое наблюдение в v1 сопоставляется в одной и той же позиции в v2. Как могут v1 и v2 иметь разную длину??

2. В будущем, пожалуйста, поделитесь примером вашего кода с помощью dput

Ответ №1:

Если две группы, которые вы хотите сравнить, непарные, то тест Уилкоксона работает даже для несбалансированных наборов данных.

 wilcox.test(df$group1,df$group2)
 

Если две группы объединены, то вы можете создать уточненный набор данных вверх по течению без значений NA

 dfRefined=df[which(!is.na(df$group1) amp; !is.na(df$group2)),]
wilcox.test(dfRefined$group1,dfRefined$group2,paired=TRUE)
 

Как предложил Дарио, вы можете использовать complete.cases (если вы предпочитаете более короткий код и не создаете уточненный набор данных).

 wilcox.test(df$group1[complete.cases(df[,c("group1","group2")])],df$group2[complete.cases(df[,c("group1","group2")])],paired=TRUE)
 

Комментарии:

1. Зачем использовать which ? is.na уже возвращает логическое значение. Также почему бы не использовать complete.cases

2. Оба варианта работают, но я согласен, что complete.cases имеет дополнительную ценность, потому что вам не нужно создавать набор данных перед парным тестом Уилкоксона