如何解决循环ggplot2多元线性回归
我试图循环我的多个线性回归图和汇总,但是我一直遇到R中的错误,该错误指出Error: More than one expression parsed
。我不确定如何解决此问题,或者不确定是否有更好的方法来实现我想做的事情,主要是:
- 以
Group
作为颜色绘制多元线性回归图 - 获取基于
Group
的每条线性回归线的摘要 - 计算回归摘要
- 执行方差分析以确定差异
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,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)
}
任何人都对如何实现上述想法有什么看法?谢谢!
解决方法
尝试以下方法:
-
创建长度为
colNames
的列表以存储所有输出,以便我们不仅可以打印输出,还可以存储它们。 -
使用
for
遍历colNames
的索引而不是实际的列名,以便可以将其用作存储不同对象输出的索引。 -
aes_string
已过时,因此我们使用.data
代词将列名作为变量传递。 -
使用
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',Group == "B"))
summary_lm_B[[i]] <- summary(lm_B[[i]])
clz.lm[[i]] <- lm(sprintf('%s~Group + MachineLength + Group:MachineLength',data = df)
summary_clz.lm[[i]] <- summary(clz.lm[[i]])
ano.lm[[i]] <- Anova(lm(sprintf('%s~MachineLength*Group',data = df))
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。