ggplot2:为多列添加p值、Rsq和斜率

3
假设我有这个数据框:
library(ggplot2)
Y <- rnorm(100)
df <- data.frame(A = rnorm(100), B = runif(100), C = rlnorm(100),
                 Y = Y)
colNames <- names(df)[1:3]
for(i in colNames){
  plt <- ggplot(df, aes_string(x=i, y = Y)) +
    geom_point(color="#B20000", size=4, alpha=0.5) +
    geom_hline(yintercept=0, size=0.06, color="black") + 
    geom_smooth(method=lm, alpha=0.25, color="black", fill="black")
  print(plt)
  Sys.sleep(2)
}

我希望做一个lm模型,并为每个列显示调整后的Rsq,截距,斜率和p值。我找到了以下示例。
data(iris)
ggplotRegression <- function (fit) {

require(ggplot2)

ggplot(fit$model, aes_string(x = names(fit$model)[2], y = names(fit$model)[1])) + 
  geom_point() +
  stat_smooth(method = "lm", col = "red") +
  labs(title = paste("Adj R2 = ",signif(summary(fit)$adj.r.squared, 5),
                     "Intercept =",signif(fit$coef[[1]],5 ),
                     " Slope =",signif(fit$coef[[2]], 5),
                     " P =",signif(summary(fit)$coef[2,4], 5)))
}

fit1 <- lm(Sepal.Length ~ Petal.Width, data = iris)
ggplotRegression(fit1)

但是它只适用于一列。 (我从这个问题以及这里的例子中选取了这些示例。) 谢谢!

2
你看过这个问题的答案吗?那些可能会有所帮助。否则,按照你目前的方法,你可以循环遍历你的变量来拟合模型,然后在每个变量上使用你的ggplotRegression函数。 - aosmith
1个回答

0

结合上述的评论,您可以将fit放在函数内部,然后使用lapply循环遍历。

library(ggplot2)

Y <- rnorm(100)
df <- data.frame(A = rnorm(100), B = runif(100), C = rlnorm(100),
                 Y = Y)
colNames <- names(df)[1:3]


plot_ls <- lapply(colNames, function(x){


  fit <- lm(Y ~ df[[x]], data = df)
  ggplot(fit$model, aes_string(x = names(fit$model)[2], y = names(fit$model)[1])) + 
    geom_point() +
    scale_x_continuous(x)+
    stat_smooth(method = "lm", col = "red") +
    ggtitle(paste("Adj R2 = ",signif(summary(fit)$adj.r.squared, 5),
                       "Intercept =",signif(fit$coef[[1]],5 ),
                       " Slope =",signif(fit$coef[[2]], 5),
                       " P =",signif(summary(fit)$coef[2,4], 5))
            )
})

gridExtra::grid.arrange(plot_ls[[1]],plot_ls[[2]],plot_ls[[3]])

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接