Использование purrr и функций для выполнения линейной регрессии для ряда переменных со случайными ошибками - PullRequest
0 голосов
/ 05 мая 2020

Вот как выглядят мои данные:

dataSet <- data.frame(study_id=c(1,1,1,1,2,2,2,2,3,3,3,3),
                      Timepoint=c(1,6,12,18,1,6,12,18,1,6,12,18),
                      Secretor=c(0,0,0,0,1,1,1,1,0,0,0,0),
                      Gene1=c(1,2,3,4,1,2,3,4,1,2,3,4),
                      Gene2=c(3,4,5,6,3,4,5,6,3,4,5,6),
                      Gene3=c(4,5,6,7,4,5,6,7,4,5,6,7),
                      Gene4=c(6,7,8,9,6,7,8,9,6,7,8,9))

Я успешно использовал purrr для создания множества исследовательских ggplots, используя следующую функцию:

library(tidyverse)

stat_sum_df_all <- function(fun, geom="pointrange", ...) {
  stat_summary(fun.data=fun, geom=geom, ...)
}

plot_fun = function(x, y) {
  ggplot(data = dataSet, aes(x = .data[[x]], y = .data[[y]], group = Secretor, colour = Secretor)) +
    stat_summary(geom = "line", fun.data = median_hilow) +
    stat_sum_df_all("median_hilow", fun.args=(conf.int = 0.5), linetype = "solid") +
    theme_bw()
} 

genelist = names(dataSet)[4:7]
Timepoint = names(dataSet)[2]

all_plots = map(genelist,
                ~map(Timepoint, plot_fun, y = .x) )

Теперь, что я хотел бы do помещает p-значения линейной регрессии в заголовок графиков. Формула моей регрессии такова:

library(lmerTest)
fit <- lmer(genelist ~ Timepoint*Secretor + (1|study_id), data=dataSet)

Однако я не могу понять, как аналогичным образом создать функцию, подобную той, которую я сделал для графиков, чтобы запустить эту регрессию для каждого гена. Заранее благодарим за любые предложения.

1 Ответ

0 голосов
/ 07 мая 2020

Мне помогли на Reddit, вот решение, спасибо всем за помощь.

my_fitting_function <- function(gene) {
  f <- paste0(gene, " ~ Timepoint*Secretor + (1|study_id)")
  fit <- lmer(f, data = dataSet)
  return(fit)
}
models <- purrr::map(genelist, my_fitting_function)
...