R 回归线

R 回归线,r,R,我需要为两个定性变量的每个不同组合添加回归线。 这些是我制作的模型和情节,但我不知道该把这些线放在哪里,怎么做 colors调用ggplot2的geom_smooth可以为您执行以下操作: library(tidyverse) white_men <- 3 * seq(20:40) + rnorm(n = 21, mean = 0, sd = 5) white_women <- 2 * seq(20:40) + rnorm(n = 21, mean = 0, sd = 5) non

我需要为两个定性变量的每个不同组合添加回归线。 这些是我制作的模型和情节,但我不知道该把这些线放在哪里,怎么做


colors调用
ggplot2
geom_smooth
可以为您执行以下操作:

library(tidyverse)

white_men <- 3 * seq(20:40) + rnorm(n = 21, mean = 0, sd = 5)
white_women <- 2 * seq(20:40) + rnorm(n = 21, mean = 0, sd = 5)
nonwhite_men <- 2.5 * seq(20:40) + rnorm(n = 21, mean = 0, sd = 5)
nonwhite_women <- 1.5 * seq(20:40) + rnorm(n = 21, mean = 0, sd = 5)

df <- 
  white_men %>% enframe(name = NULL) %>% mutate(age = 20:40, sex = "Male", race = "White") %>% 
  bind_rows(
    white_women %>% enframe(name = NULL) %>% mutate(age = 20:40, sex = "Female", race = "White")
  ) %>% 
  bind_rows(
    nonwhite_men %>% enframe(name = NULL) %>% mutate(age = 20:40, sex = "Male", race = "Non-White")
  ) %>% 
  bind_rows(
    nonwhite_women %>% enframe(name = NULL) %>% mutate(age = 20:40, sex = "Female", race = "Non-White")
  ) %>% 
  mutate(sex_race = str_c(race, sex, sep = " "))

df %>% 
  ggplot(aes(x = age, y = value, color = sex_race)) +
  geom_point() +
  geom_smooth(method = "lm")
库(tidyverse)
白人男性%变异(年龄=20:40,性别=“女性”,种族=“白人”)
) %>% 
绑定行(
非白人男性%>%enframe(name=NULL)%%>%突变(年龄=20:40,性别=“男性”,种族=“非白人”)
) %>% 
绑定行(
非白人女性%>%enframe(name=NULL)%%>%突变(年龄=20:40,性别=“女性”,种族=“非白人”)
) %>% 
突变(性别种族=str_c(种族,性别,sep=”“)
df%>%
ggplot(aes(x=年龄,y=价值,颜色=性别和种族))+
几何点()+
几何光滑(方法=“lm”)

尽管对于此类示例而言,
ggplot2
要简洁得多,但如果您确实想使用它,我在这里提供了使用
R base plot
的替代方法

我使用了与@cardinal40相同的
df

>头部(df)
价值年龄性别种族性别
1-1.8812801 20男白色男
2-0.4755058 21男白人男
313.3137759 22男白人男
4 11.3594325 23男白人男
513.3529303 24男白人男
624.8443766 25男白人男白人
对于打印,您可以使用
For
循环遍历所有不同的组,使用
abline
添加模型的回归线

df=as.data.frame(df)
级别=唯一(df$sex_种族)
颜色=c(“蓝色”、“红色”、“绿色”、“黑色”)
适用于(i/1:长度(水平))
{
如果(i==1)
{
图(x=df[df$sex_race==level[i],“age”],
y=df[df$sex_race==level[i],“value”],
xlim=c(最小值(df$age),最大值(df$age)),
ylim=c(最小值(df$值),最大值(df$值)),
col=颜色[i],
pch=16,
xlab=“年龄”,
ylab=“值”)
abline(lm(值~年龄,数据=子集(df,df$性别_种族==水平[i])),
col=颜色[i])
}
其他的
{
分数(x=df[df$sex_race==level[i],“age”],
y=df[df$sex_race==level[i],“value”],
col=颜色[i],pch=16)
abline(lm(值~年龄,数据=子集(df,df$性别_种族==水平[i])),
col=颜色[i])
}
}
图例(“左上角”,title=“图例”,图例=c(“白人男性”、“白人女性”、“非白人男性”、“非白人女性”),
col=c(“蓝色”、“红色”、“绿色”、“黑色”),pch=16,cex=0.54)

编辑:代码编写的备选方案

根据@StupidWolf的评论,您可以通过以下操作获得相同的情节:

df=as.data.frame(df)
级别=唯一(df$sex_种族)
颜色=c(“蓝色”、“红色”、“绿色”、“黑色”)
绘图(空,
xlim=c(最小值(df$age),最大值(df$age)),
ylim=c(最小值(df$值),最大值(df$值)),
xlab=“年龄”,ylab=“价值”)
适用于(i/1:长度(水平))
{
分数(x=df[df$sex_race==level[i],“age”],
y=df[df$sex_race==level[i],“value”],
col=颜色[i],pch=16)
abline(lm(值~年龄,数据=子集(df,df$性别_种族==水平[i])),
col=颜色[i])
}
图例(“左上角”,title=“图例”,图例=c(“白人男性”、“白人女性”、“非白人男性”、“非白人女性”),
col=c(“蓝色”、“红色”、“绿色”、“黑色”),pch=16,cex=0.54)
在这里,感谢@rawr,这是一种编写代码以获得相同绘图的更简洁的方法:


sp只是一条注释(您可能已经知道这一点),您可以进行绘图(NULL,xlim=…,ylim=…),然后遍历不同的组。保存if和else
split
将节省大量工作
sp@StupidWolf和@rawr非常感谢您的评论!我不知道这些提示(我主要使用的是
ggplot2
);)