【问题标题】:Extracting slopes from several regression models using dplyr使用 dplyr 从多个回归模型中提取斜率
【发布时间】:2019-12-26 21:20:31
【问题描述】:

我想使用 dplyr 为每个人和每种药物(两者都是因子变量)拟合多个模型,但我遇到了一个错误,我不太确定出了什么问题。我想提取每个模型的斜率来计算个体之间拟合模型的成对关系的平均斜率。

df.dr <- data.frame(
drug = factor(rep(rep(LETTERS[1:4], each = 5), 4)), 
individual = factor(rep(letters[1:4], each = 20)),
dose = rep(c(10,5,1,0.5,0.1), times = 16),
viability = runif(80, min = 50, max = 200))

dfDrugInd = df.dr %>% group_by(drug, individual) %>%
  do(fitAll = lm(viability ~ ., data = .))

dfDrugIndSlope = tidy(dfDrugInd, fitAll)$estimate[2,1]

mean(dfDrugIndSlope)

【问题讨论】:

  • 你的代码有几个问题,比如第4行有一个摘录)。先把代码放在一边,如果我理解你的问题,你实际上是在问一个@ 987654323@实现你想要的,对吗?使用group_by 和管道逻辑在这里不起作用。
  • 感谢您的评论。我解决了这个问题。我有几个变量,我想在单独的 lm 模型中计算这些变量的所有成对组合。然后我想提取每个变量的斜率并计算每个变量的斜率平均值。这里的变量是个体。我想对所有药物分别执行此任务。

标签: dplyr lm coefficients


【解决方案1】:

我还是不太明白你为什么需要这样进行回归分析(一个一个,然后平均系数),下面的代码应该可以满足你的需求:

但您的问题似乎喜欢mixed-effect 模型,您可能希望使用lm4 包来实现您的结果。

df.dr <- data.frame(
  drug = factor(rep(rep(LETTERS[1:4], each = 5), 4)), 
  individual = factor(rep(letters[1:4], each = 20)),
  dose = rep(c(10,5,1,0.5,0.1), times = 16),
  viability = runif(80, min = 50, max = 200))

# split the dataset by group
df.sp <- split(df.dr, df.dr$drug)

# run separate `lm` on each group and store the results in a list
r <- lapply(df.sp, function(x) do.call("lm", list(viability ~ individual + dose, x)))

# extract the coefficient of target variable, say `individualc`
indi.cof <- sapply(r, function(x)x$coefficients[["individualc"]])

# get the mean
mean(indi.cof)

【讨论】:

  • 非常感谢您提供的代码。我认为这是解决方案,但我也会检查 lm4。
  • @MohieddinJafari 如果您认为答案符合您的需求,请点击左侧的绿色复选标记接受。谢谢!
猜你喜欢
  • 2019-05-29
  • 2014-05-07
  • 2021-03-10
  • 1970-01-01
  • 2023-03-28
  • 2015-03-25
  • 1970-01-01
  • 2021-01-11
  • 1970-01-01
相关资源
最近更新 更多