首页 > 解决方案 > 使用 dplyr 从多个回归模型中提取斜率

问题描述

我想使用 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)

标签: dplyrlmcoefficients

解决方案


我仍然不完全明白为什么需要以这种方式进行回归分析(一个一个,然后平均系数),下面的代码应该可以满足您的需求:

但是您的问题似乎喜欢一个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)

推荐阅读