Одновыборочный критерий Уилкоксона со знаком для нескольких столбцов в R - PullRequest
1 голос
/ 16 апреля 2020

Я хотел бы использовать критерий со знаком Уилкоксона для одной выборки, чтобы проверить, действительно ли каждый столбец в R значительно больше 0. Я могу go пройти через каждый столбец отдельно, но в идеале я хотел бы использовать lapply для циклически проходить по каждому столбцу и записывать p-значения в отдельный фрейм данных. В каждой строке фрейма данных перечислены месячные значения для данного года:

df = data.frame("year"=c(1:20), "jan"=runif(20), "feb"=runif(20))

... с 13 полными столбцами для года и каждого месяца.

Код, который я использую сейчас, сравнивает каждый столбец в ноль, но я хотел бы включить функцию lapply, чтобы немного упростить вещи:

wilcox.test(df[,1], mu=0, alternative="greater")

Я пытался:

res = lapply(df, function(x){
      wilcox.test(df[,x[1]], mu=0, alternative="greater")
      })

Но я получаю ошибку, что мой входные данные для функции wilcox.test не являются цифрами c, что заставляет меня думать, что они не читают в отдельных столбцах. Я пытался использовать некоторые предложения в этом посте , но у меня возникают проблемы при изменении кода для работы тест с одним образцом. Я новичок в lapply и написание функций, поэтому любая помощь очень ценится!

1 Ответ

1 голос
/ 16 апреля 2020

Вы можете напрямую применить к столбцам в data.frame с lapply. Убедитесь, что вы пропускаете только те столбцы, которые содержат числовые значения c, устанавливая только эти столбцы.

lapply(df[,2:13],function(x){wilcox.test(x, mu=0, alternative="greater")})

Ваша версия не работает, поскольку вы пытаетесь установить подмножество df на весь столбец df (ie df[,df[,1]] вместо df[,1]).

Чтобы еще больше упростить процесс, вы можете использовать sapply и $p.value для доступа только к результатам p-значения.

sapply(df[,2:13],function(x){wilcox.test(x, mu=0, alternative="greater")$p.value})
#         jan          feb          mar          apr          may          jun          #jul          aug          sep          oct          nov 
#9.536743e-07 9.536743e-07 9.536743e-07 9.536743e-07 9.536743e-07 9.536743e-07 9.536743e-07 9.536743e-07 9.536743e-07 9.536743e-07 9.536743e-07 
#         dec 
#9.536743e-07 

Данные

df <- data.frame(year = 1:20, lapply(rep(20,12),runif))
names(df)[2:13] <- tolower(month.abb)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...