【问题标题】:Using purrr and functions to perform linear regressions on a number of variables with random errors使用 purrr 和函数对具有随机误差的多个变量执行线性回归
【发布时间】:2020-08-19 13:29:27
【问题描述】:

这是我的数据的样子:

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) )

现在我想做的是将线性回归的 p 值放在图的标题中。我的回归公式是这样的:

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

但是,我无法弄清楚如何类似地创建一个函数,就像我为绘图所做的那样,为每个基因运行此回归。提前感谢您的任何建议。

【问题讨论】:

  • all_plots 代码不适合我。它返回错误Error in map(Timepoint, plot_fun, y = .x) : object 'Timepoint' not found。同样适用于lmer 代码Error in model.frame.default(data = dataSet, drop.unused.levels = TRUE, : variable lengths differ (found for 'Timepoint')
  • 您的脚本不起作用。如果您想收到问题的答案,请确保您的脚本是完整的。
  • @RonakShah 我很抱歉,已编辑 - 现在应该可以运行了。
  • lmer(genelist ~ Timepoint*Secretor + (1|study_id), data=dataSet)这仍然不起作用返回Error in model.frame.default(data = dataSet, drop.unused.levels = TRUE, : variable lengths differ (found for 'Timepoint')

标签: r function regression purrr


【解决方案1】:

我在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)

【讨论】:

    猜你喜欢
    • 2020-08-30
    • 2018-01-04
    • 1970-01-01
    • 2020-05-20
    • 1970-01-01
    • 2021-09-27
    • 2016-11-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多