Wilcox.test для измерений до и после лечения - PullRequest
0 голосов
/ 06 сентября 2018

Я очень новичок в R и, вероятно, не имею опыта исключать, если этот вопрос тесно связан с предыдущими постами. Если да, примите мои извинения.

У меня есть меры до и после (X0variablename и X1variablename соответственно). Переменные - это столбцы в моем импортированном наборе данных .CSV. У меня есть 11 наблюдений для каждой переменной, и я хочу проверить, есть ли реальная разница или нет (meadian была рассчитана с использованием description fct (psych pack)).

Некоторые столбцы в моем наборе данных не подходят для этого теста, поэтому я все вручную написал:

changeipss <- wilcox.test(mydata$X0ipss, mydata$X1ipss)
changeipss

changeqol <- wilcox.test(mydata$X0qol, mydata$X1qol)
changeqol

changeiief <- wilcox.test(mydata$X0iief, mydata$X1oiief)
changeiief

changepsa <- wilcox.test(mydata$X0psa, mydata$X1psa)
changepsa

changeqmax <- wilcox.test(mydata$X0qmax, mydata$X1qmax)
changeqmax

changepvr <- wilcox.test(mydata$X0pvr, mydata$X1pvr)
changepvr

changepv <- wilcox.test(mydata$X0pv, mydata$X1pv)
changepv

changeflow <- wilcox.test(mydata$X0ct_perfusion_flow, mydata$X1ct_perfusion_flow)
changeflow

changectpv <- wilcox.test(mydata$X0pvct, mydata$X1pvct)
changectpv

Это был бы правильный способ сделать это? Для некоторых переменных я получаю это

Предупреждающее сообщение: в wilcox.test.default (mydata $ X0ipss, mydata $ X1ipss) : невозможно вычислить точное значение p для связей

Ответы [ 2 ]

0 голосов
/ 06 сентября 2018

Рассмотрите возможность разделения вашего фрейма данных на все X0 и X1 переменных и затем запустите mapply (или его оболочку, Map). Это позволяет вам хранить похожие объекты в контейнерах (списки, матрицы, кадры данных и т. Д.), А не отдельные переменные, которые заполняют вашу глобальную среду и требуют утомительного индивидуального назначения.

Кроме того, как вы видите, некоторые переменные некорректно проходят через wilcox.test, для этого рассмотрим обращение к обертке в tryCatch для вывода NA для этих неудачных экземпляров:

# SUBSET ONLY X0 VARIABLES
mydata_X0 <- mydata[grep("X0", names(mydata))]
# ORDER COLUMNS
mydata_X0 <- mydata_X0[order(names(mydata_X0))]

# SUBSET ONLY X0 VARIABLES
mydata_X1 <- mydata[grep("X1", names(mydata))]
# ORDER COLUMNS
mydata_X1 <- mydata_X1[order(names(mydata_X1))]

# TRY/CATCH WRAPPER TO wilcox.test
wilcox_test_proc <- function(x, y) {
  tryCatch(wilcox.test(x, y),
           error = function(e) NA)
}

# SIMPLIFIED VERSION
wilcox_test_matrix <- mapply(wilcox_test_proc, mydata_X0, mydata_X1)

# LIST VERSION
wilcox_test_list <- Map(wilcox_test_proc, mydata_X0, mydata_X1)

Данные

set.seed(962018)
mydata <- setNames(data.frame(replicate(18, runif(50))),
                   c("X0ipss", "X0quo", "X0oiief", "X0psa", "X0qmax", 
                     "X0pvr", "X0pv", "X0ct_perfusion_flow", "X0pvct",
                     "X1ipss", "X1quo", "X1oiief", "X1psa", "X1qmax", 
                     "X1pvr", "X1pv", "X1ct_perfusion_flow", "X1pvct"))

выход

wilcox_test_matrix

#             X0ct_perfusion_flow                                
# statistic   1198                                               
# parameter   NULL                                               
# p.value     0.7225658                                          
# null.value  0                                                  
# alternative "two.sided"                                        
# method      "Wilcoxon rank sum test with continuity correction"
#             X0ipss                                             
# statistic   1339                                               
# parameter   NULL                                               
# p.value     0.5417935                                          
# null.value  0                                                  
# alternative "two.sided"                                        
# method      "Wilcoxon rank sum test with continuity correction"
#             X0oiief                                            
# statistic   1206                                               
# parameter   NULL                                               
# p.value     0.7642678                                          
# null.value  0                                                  
# alternative "two.sided"                                        
# method      "Wilcoxon rank sum test with continuity correction"
# ...
0 голосов
/ 06 сентября 2018

Если в ваших данных есть два одинаковых значения, они называются связями. Имея связи, ранги больше не являются уникальными, и, следовательно, вы не можете вычислить точные p-значения.

Также помните, что тест Уилкоксона также предполагает нескошенное распределение. это означает, что он применяется только к парному случаю с двумя выборками («знаковый ранг») или к случаю с одной выборкой.

Обычно, если вы проводите тест на симметрию, если есть только несколько связей, вам не нужно беспокоиться, а перепроверить, как выглядят ваши данные. Это предупреждение, а не сообщение об ошибке. (вы получаете ответ, предупреждение только для того, чтобы показать вам, что вы можете использовать неправильный тест для вашего типа данных, и ответ может не соответствовать тому, что вы ищете)

Также Если вы хотите, вы можете проверить пакет coin в R, который имеет функцию wilcox_test, которая может вычислять точные p-значения при наличии связей

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...