Как выполнить l oop для теста Крускала Уоллиса, сравнивая 3 группы по нескольким столбцам без изменения значения? - PullRequest
0 голосов
/ 14 апреля 2020

Я довольно новичок в R и пытаюсь запустить тест kruskal wallis, чтобы увидеть, есть ли разница между тремя группами при взгляде на разные гены. У меня 3 группы и 127 белков. Я смог создать код, который будет делать это,

sample_data "

    groups <- c("control","control","control","control","control","group1","group1","group1","group1","group1","group1","group1","group1","group1","group1","group1","group1","group1","group2","group2","group2","group2","group2","group2","group2","group2")
gene1 <- c(8,7,4,5,0,2,8,5,6,4,4,6,5,4,6,4,7,4,8,1,6,3,5,6,3,1)
gene2 <- c(8,10,10,9,7,5,8,10,8,9,10,9,6,9,8,7,8,7,8,9,9,7,7,6,9,8)
gene3 <- c(10,11,10,11,5,6,9,11,10,11,12,8,4,7,7,10,10,3,2,11,9,10,9,3,10,10)
gene4 <- c(4,4,3,2,0,2,4,4,3,3,4,1,1,1,4,4,3,2,3,4,4,1,4,3,2,2)
gene5 <- c(8,10,11,10,7,6,8,8,8,12,11,8,7,8,8,10,10,9,10,8,10,7,8,7,10,7)
mydata <- data.frame(groups,gene1,gene2,gene3,gene4,gene5)

    i <- 2  #ignore 1st column as this is not a "protein"
pval <-NULL
repeat{
    K <- kruskal.test(df[,i], df[,1], data = df, paired=FALSE, p.adjust.methods="none")
    pval <- c(as.matrix(sapply(K[3],as.numeric)),pval)
    i <- i+1
    if(i>ncol(df)){break}
}

к сожалению, полученное значение отличается от того, которое я получаю, выполняя тест kruskal wallis только на одном гене в время: например:

Для Gene1 значение p, полученное из l oop, равнялось 0,0389, но когда я запускаю kruskal.test (Gene1, group, data = df), я получаю значение 0,84.

Я сталкивался с этим, потому что после выполнения теста крускальских валлистов я продолжил парный тест Манна Уитни и заметил, что «значимые» значения для Крускала Уоллиса не коррелируют со «значительными» значениями для Манна Уитни.

Кроме того, я пошел на VassarStats и minitab и получил p-значение 0,84 (поправка на связи). Я хотел бы знать, как я могу выполнить этот тест Крускала Уоллиса в al oop без р-значений Я не вижу, что я делаю неправильно?

Кроме того, я использовал getAnywhere (kruskal.test.default), который я видел в предыдущем посте, но я не могу найти, что может вызвать это при выполнении теста снова и снова.

1 Ответ

0 голосов
/ 15 апреля 2020

Я не получаю ваши результаты, когда изолирую тестовую линию Kruskal.

df <- mydata
i <- 2
kruskal.test(df[,i], df[,1], data = df, paired=FALSE, p.adjust.methods="none")
# 
#   Kruskal-Wallis rank sum test
# 
# data:  df[, i] and df[, 1]
# Kruskal-Wallis chi-squared = 0.66988, df = 2, p-value = 0.7154

Я думаю, что ваша строка назначения pval вызывает проблему. Но вы не в полной мере используете R. Прежде всего, всегда читайте страницу руководства для функции. Функция kruskal.test не принимает аргумент data=, если вы не задаете формулу, и не принимает аргумент paired= (относится только к тестам между двумя группами), а также не принимает аргумент p.adjust.methods=. Вы просто угадываете и тратите свое время. Получить учебник R и провести день или около того, изучая основы. Весь ваш код может быть выражен следующим образом:

pval <- sapply(2:6, function(x) kruskal.test(mydata[,x], mydata[,1])$p.value)
pval
# [1] 0.7153797 0.4424115 0.5360940 0.9816007 0.6118471
...