Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何计算R中多个样地上不同线性回归线的斜率_R_Plot_Ggplot2_Lm_Facet - Fatal编程技术网

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

如何计算R中多个样地上不同线性回归线的斜率,r,plot,ggplot2,lm,facet,R,Plot,Ggplot2,Lm,Facet,我现在使用刻面通过不同的I值绘制多个分布图,并在相应的图上找到每条回归线的斜率 我的数据集的格式如下,这里是指向整个文件()的链接 我使用以下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

我现在使用刻面通过不同的I值绘制多个分布图,并在相应的图上找到每条回归线的斜率

我的数据集的格式如下,这里是指向整个文件()的链接

我使用以下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()
bound=read.csv(“强度分布”)
sp在评论中为您提供了一个完美的答案,但如果您感兴趣

如果您正在对数据子集执行相当复杂的操作,那么很值得查看R中的
groupby()%%>%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]
doModel%
突变(模型=映射(数据,多模型))%>%
变异(斜率=映射(模型,getCoef))
型号$slope
发生的情况是,您创建了一些data.frame,它位于带有
nest()
的data.frame中。然后使用
map()
将函数应用于每个子data.frame。如果您对每个子集都有非常细微的事情要做,这种工作流会非常有用


我强烈推荐你看。如果您需要……

sapply(分割(df,df$i),函数(数据)coef(lm(y~x,data))[1])
无需ggplot。我快速浏览了整个情节构建,没有看到任何有用的东西,但对我来说,这样做会更容易separately@roman是的,我的mistake@rawr:谢谢你的回答,我应该把coef(lm(y~x,data))[1]改为coef(lm(y~x,data))[2]是的应该是[2]你是对的,[1]会给你y截距
coef(lm(log10(y)~log10(x),数据)
应该可以,请看第二个答案,非常感谢,收获很多。只需再问一个问题,现在我有三个数据集a、B和C,每个数据集的格式都与问题中列出的文件相同。虽然这些数据集有一个公共变量I,但对应的x和y的数量彼此不同。因此,如果我想绘制这些数据集e三个数据集,例如一个绘图上的三行,具体值为i,因此,如果i从0到1,增量为0.1,则应该有11个绘图,每个绘图有三行。这可能吗?您的意思是不同子集中的行数不同吗?带有刻面的ggplot将能够处理这一问题。
models <- iris %>% 
  group_by(Species) %>%
  nest %>%
  mutate(model = map(data, doModel)) %>% 
  mutate(slope = map(model, getCoef))

models$slope