如何计算R中多个图上不同线性回归线的斜率

时间:2016-10-27 12:38:57

标签: r plot ggplot2 lm facet

我现在使用 facet 按不同的i值绘制多个分布图,并在相应的图上找到每条回归线的斜率

我的数据集格式如下,这里是整个文件的链接(https://drive.google.com/file/d/0B_biBFUMCaA2SGlFc2I0OTd3djA/view?usp=sharing

enter image description here

我使用以下R代码绘制多个图:

bound = read.csv("strength_distribution")
sp <- ggplot(bound, aes(x,y)) + geom_point(shape=1)+ 
scale_y_log10()+ scale_x_log10()+ggtitle("Node Strength Distribution")+
      theme(plot.title= element_text(size =16, face ="bold", 
              lineheight = 8, vjust=1), aspect.ratio=1)+
      stat_smooth(method="lm", se = FALSE) + scale_shape_identity()
sp + facet_wrap( ~ i, ncol=3, scales = "free_x" )
ggplotly()

然后我得到以下情节:

enter image description here

我发现有多种方法可以计算一个图的回归线的斜率,但是没有关于编写函数的线索来计算多个图中多个回归线的斜率。有谁知道如何处理这种情况?感谢。

1 个答案:

答案 0 :(得分:1)

rawr在评论中为您提供了完美答案,但如果您有兴趣......

如果您对数据的子集做了相当复杂的事情,那么值得查看R中的group_by() %>% nest() %>% map()工作流程。我将用一个简单的示例演示:

library(dplyr)
library(tidyr)
library(purrr)
data(iris)

这些是您想要应用于子集的一些功能。

doModel <- function(dat) lm(Sepal.Length ~ Sepal.Width, dat)
getSlope <- function(mod) coef(mod)[2]

您可以按如下方式应用它们。

models <- iris %>% 
  group_by(Species) %>%
  nest %>%
  mutate(model = map(data, doModel)) %>% 
  mutate(slope = map(model, getCoef))

models$slope

发生的事情是您在带有nest()的data.frame中创建了一些data.frame。然后,您使用map()将函数应用于每个子data.frame。如果您对每个子集都要做很多细微的事情,那么这种工作流程会非常有用。

我强烈建议您观看hadleys talk on this。如果你愿意,很乐意提供更多帮助...