首页 > 解决方案 > 循环ggplot2多元线性回归

问题描述

我正在尝试循环我的多元线性回归图和摘要,但我一直在 R 中遇到一个错误,即Error: More than one expression parsed. 我不确定如何解决这个问题,或者是否有更好的方法来实现我想要做的主要是:

  1. 绘制多元线性回归图,Group颜色为
  2. 获取基于每个线性回归线的摘要Group
  3. 计算回归摘要
  4. 执行方差分析以确定差异
colNames <- names(df)[c(35:39)]
for(i in colNames){
  plt <- ggplot(df, 
aes_string(x=df$MachineLength, y=i, fill=df$Group, color=be_nlyl$Group)) + 
geom_smooth(method=lm) + 
geom_point(size = 2, alpha=0.7) + 
labs(title="Machine", subtitle = "Machine Type") + 
theme_bw() + 
theme(plot.title = element_text(hjust=0.5, face="bold"), 
plot.subtitle = element_text(hjust=0.5))
  print(plt)
  lm_A <- lm(formula = i ~ MachineLength, data = subset(be_nlyl, Group == "A"))
  summary(lm_A) %>% print()
lm_B <- lm(formula = i ~ MachineLength, data = subset(be_nlyl, Group == "B"))
  summary(lm_B) %>% print()
  clz.lm <- lm(formula = i ~ Group + MachineLength + Group:MachineLength, data = df)
summary(clz.lm) %>% print()
  ano.lm <- Anova(lm(i ~ MachineLength*Group, data = df))
  print(ano.lm)
}

任何人都知道如何在上面实施?谢谢!

标签: rloopsfor-loopggplot2regression

解决方案


尝试以下操作:

  1. 创建长度列表colNames来存储所有输出,这样我们不仅可以打印输出,还可以存储它们。

  2. 使用for循环索引colNames而不是实际的列名,以便您可以将其用作索引来存储不同对象的输出。

  3. aes_string已被弃用,因此我们使用.data代词将列名作为变量传递。

  4. 用于创建在函数sprintf中传递的公式字符串。lm

library(ggplot2)

colNames <- names(df)[c(35:39)]
plt <- vector('list', length(colNames))
lm_A <- vector('list', length(colNames))
summary_lm_A <- vector('list', length(colNames))
summary_lm_B <- vector('list', length(colNames))
lm_B <- vector('list', length(colNames))
clz.lm <- vector('list', length(colNames))
summary_clz.lm <- vector('list', length(colNames))
ano.lm <- vector('list', length(colNames))

for(i in seq_along(colNames)) {
  var <- colNames[i]
  plt[[i]] <- ggplot(df, aes(MachineLength, .data[[var]], fill= Group, color= Group)) + 
               geom_smooth(method=lm) + 
               geom_point(size = 2, alpha=0.7) + 
               labs(title="Machine", subtitle = "Machine Type") + 
               theme_bw() + 
               theme(plot.title = element_text(hjust=0.5, face="bold"), 
                     plot.subtitle = element_text(hjust=0.5))
  lm_A[[i]] <- lm(sprintf('%s~MachineLength', var), data = subset(df, Group == "A"))
  summary_lm_A[[i]] <- summary(lm_A[[i]])
  lm_B[[i]] <- lm(sprintf('%s~MachineLength', var), data = subset(df, Group == "B"))
  summary_lm_B[[i]] <- summary(lm_B[[i]])
  clz.lm[[i]] <- lm(sprintf('%s~Group + MachineLength + Group:MachineLength', var), data = df)
  summary_clz.lm[[i]] <- summary(clz.lm[[i]])
  ano.lm[[i]] <- Anova(lm(sprintf('%s~MachineLength*Group', var), data = df))
}

推荐阅读