Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/76.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中为ggplot的每个方面添加R2?_R_Ggplot2_Linear Regression_Scatter Plot_Facet Grid - Fatal编程技术网

如何在R中为ggplot的每个方面添加R2?

如何在R中为ggplot的每个方面添加R2?,r,ggplot2,linear-regression,scatter-plot,facet-grid,R,Ggplot2,Linear Regression,Scatter Plot,Facet Grid,有没有办法先将刻面标签从1:3更改为c(好、坏、丑)。另外,我想向每个方面添加R2值。下面是我的代码-我尝试了一些事情,但没有成功 DF = data.frame(SUB = rep(1:3, each = 100), Ob = runif(300, 50,100), S1 = runif(300, 75,95), S2 = runif(300, 40,90), S3 = runif(300, 35,80),S4 = runif(300, 55,100)) Fak

有没有办法先将刻面标签从
1:3
更改为
c(好、坏、丑)
。另外,我想向每个方面添加
R2
值。下面是我的代码-我尝试了一些事情,但没有成功

DF = data.frame(SUB = rep(1:3, each = 100), Ob = runif(300, 50,100), S1 = runif(300, 75,95), S2 = runif(300, 40,90),
                S3 = runif(300, 35,80),S4 = runif(300, 55,100))
FakeData = gather(DF, key = "Variable", value = "Value", -c(SUB,Ob))

ggplot(FakeData, aes(x = Ob, y = Value))+
  geom_point()+ geom_smooth(method="lm") + facet_grid(Variable ~ SUB,  scales = "free_y")+
  theme_bw()
下面是我使用上述代码得到的数字。 我尝试在下面的代码中更改facet_标签,但没有成功

ggplot(FakeData, SUB = factor(SUB, levels = c("Good", "Bad","Ugly")), aes(x = Ob, y = Value))+
  geom_point()+ geom_smooth(method="lm") + facet_grid(Variable ~ SUB,  scales = "free_y")+
  theme_bw()

我不知道如何将
R2
添加到
facets
。是否有任何有效的方法计算和
R2
facets

您可以使用
ggpubr::stat_cor()
轻松地将相关系数添加到绘图中

library(dplyr)
library(ggplot2)
library(ggpubr)

FakeData %>%
  mutate(SUB = factor(SUB, labels = c("good", "bad", "ugly"))) %>%
  ggplot(aes(x = Ob, y = Value)) +
  geom_point() +
  geom_smooth(method = "lm") +
  facet_grid(Variable ~ SUB,  scales = "free_y") +
  theme_bw() +
  stat_cor(aes(label = ..rr.label..), color = "red", geom = "label")

如果您不想使用其他软件包中的函数,而只想使用
ggplot2
,则需要计算每个
变量组合的
R2
,然后使用
geom\u text
geom\u标签添加到绘图中。这里有一种方法

library(tidyverse)

set.seed(1)

DF = data.frame(SUB = rep(1:3, each = 100), Ob = runif(300, 50,100), S1 = runif(300, 75,95), S2 = runif(300, 40,90),
                S3 = runif(300, 35,80),S4 = runif(300, 55,100))
FakeData = gather(DF, key = "Variable", value = "Value", -c(SUB,Ob))

FakeData_lm <- FakeData %>%
  group_by(SUB, Variable) %>%
  nest() %>%
  # Fit linear model
  mutate(Mod = map(data, ~lm(Value ~ Ob, data = .x))) %>%
  # Get the R2
  mutate(R2 = map_dbl(Mod, ~round(summary(.x)$r.squared, 3))) 

ggplot(FakeData, aes(x = Ob, y = Value))+
  geom_point()+ 
  geom_smooth(method="lm") + 
  # Add label
  geom_label(data = FakeData_lm, 
             aes(x = Inf, y = Inf, 
                 label = paste("R2 = ", R2, sep = " ")),
             hjust = 1, vjust = 1) +
  facet_grid(Variable ~ SUB,  scales = "free_y") +
  theme_bw()
库(tidyverse)
种子(1)
DF=数据帧(SUB=rep(1:3,每个=100),Ob=runif(30050100),S1=runif(30075,95),S2=runif(30040,90),
S3=runif(300,35,80),S4=runif(30055100))
FakeData=gather(DF,key=“Variable”,value=“value”,-c(SUB,Ob))
伪造数据(单位:lm%)
分组依据(子,变量)%>%
嵌套()%>%
#拟合线性模型
变异(Mod=map(数据,~lm(值~Ob,数据=.x)))%>%
#去拿R2
变异(R2=map_dbl(Mod,~round(summary(.x)$r.squared,3)))
ggplot(假数据,aes(x=Ob,y=Value))+
几何点()
几何平滑(method=“lm”)+
#添加标签
geom_标签(数据=假数据),
aes(x=Inf,y=Inf,
标签=粘贴(“R2=”,R2,sep=”),
hjust=1,vjust=1)+
小平面网格(变量~SUB,scales=“free_y”)+
主题_bw()

要将子级别更改为“好”、“坏”和“丑”,您可以使用
fct\u recode()
case\u when()
,例如:
DF%>%变异(SUB=fct\u recode(as.character(SUB),good=“1”,bad=“2”,ught=“3”)”
DF%>%变异(SUB=case\u时(SUB==1~“好”,SUB==2~“坏”,SUB==3“丑”))
要获得R2,您可能需要在需要R2的数据子集上迭代线性模型。最直接、最简单的方法是使用嵌套数据帧(请参阅:)。试着阅读链接并找出一种自己动手的方法-学习如何正确迭代我的工作流程对我来说是一项宝贵的技能。如果遇到问题,请在此处发表评论或创建一篇新帖子。是否要在图上同时显示“R^2”和“p-value”?使用
stat\u cor(aes(label=粘贴(…rr.label.,…p.label.,,sep=“~”),color=“red”,geom=“label”)
Wow,这真是太棒了。深夜,在嘎吱嘎吱嘎吱的模式下,没有打嗝。几乎好得难以置信!