r - 循环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, 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)
}
任何人都知道如何在上面实施?谢谢!
解决方案
尝试以下操作:
创建长度列表
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', 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))
}
推荐阅读
- java - 如何在 Processing 中创建 Java 类的实例?
- reactjs - REACT useEffect() 称为不需要的
- postgresql - 营业时间内的时差
- discord - Discord py 练级系统无冷却时间
- windows - 使用 powershell 在 Windows 10 本地计算机(不是 Windows 服务器)上的 IE 中启用和禁用 TLS 和 SSL
- java - 如何修复 MavenWrapperDownloader.java 中的绝对路径遍历
- exist-db - 如何执行恢复 - 基于 docker 的存在 dB
- openoffice.org - OpenOffice Calc 数字总和小于一个值
- javascript - swagger-editor:找到有效的代码 GET 参数 url
- jdbc - 使用 jdbc 将表保存到配置单元:编译语句时出错:FAILED:ParseException line 1:40 cannot identify input near '"Name"' 'TEXT'