R 具有多个虚拟编码预测器的线性回归模型的箱线图

R 具有多个虚拟编码预测器的线性回归模型的箱线图,r,ggplot2,linear-regression,R,Ggplot2,Linear Regression,我有以下线性模型: model <- lm(var01 ~ a0 + a1 + a2 + a3 + a4 + a5,NT) 我想创建一个方框图,其中a0-a5彼此相邻显示,但仅在a0==1、a1==1等情况下显示 所以我试着: ggplot(NT, aes(factor(a0), var01)) + geom_boxplot() + geom_smooth(method = "lm", se=FALSE, color="black", aes(group=1)) 但这显示了a0

我有以下线性模型:

model <- lm(var01 ~ a0 + a1 + a2 + a3 + a4 + a5,NT)
我想创建一个方框图,其中a0-a5彼此相邻显示,但仅在a0==1、a1==1等情况下显示

所以我试着:

ggplot(NT, aes(factor(a0), var01)) +
  geom_boxplot() +
  geom_smooth(method = "lm", se=FALSE, color="black", aes(group=1))
但这显示了a0==0和a0==1的箱线图相邻。所以有两个问题:如何让R只显示a0==1?此外,在同一张图中,a0旁边的所有四个其他预测值a1-a5(但也限于a1-a4==1)

非常感谢你的帮助。谢谢:)

更新:样本数据

id  category_a  var01   a0  a1  a2  a3  a4  a5
3   1;5          100    0   1   0   0   0   1
4   1;5            0    0   1   0   0   0   1
5   0             21    1   0   0   0   0   0
6   1;2;4        100    0   1   1   0   1   0
9   1;2           68    0   1   1   0   0   0

因此a0-a5是多类别变量“category_a”的虚拟编码。

这是一个数据重塑的问题。如果您感兴趣的每个数据点是数据帧(长格式)中的一行,则ggplot工作得最好

库(ggplot2)
图书馆(E2)
#生成数据
种子(1)
n=1000

NT是a0-a5不同的变量,或者它们是同一个分类变量的假人?如果你提供一些数据会有所帮助……我添加了一些样本数据。希望这更清楚:)效果很好!非常感谢你!我试了几个小时,这让我发疯。还有一个小问题:有没有一种快速的方法来重新命名箱线图的标签?(a0-a5)您可以添加一个新的比例x离散或更改因子的标签
id  category_a  var01   a0  a1  a2  a3  a4  a5
3   1;5          100    0   1   0   0   0   1
4   1;5            0    0   1   0   0   0   1
5   0             21    1   0   0   0   0   0
6   1;2;4        100    0   1   1   0   1   0
9   1;2           68    0   1   1   0   0   0
library(ggplot2)
library(reshape2)
#generate data
set.seed(1)
n=1000
NT <- data.frame(id=1:n,
                   var01=rnorm(n),
                   a0=rbinom(n,1,0.2),
                   a1=rbinom(n,1,0.2),
                   a2=rbinom(n,1,0.2),
                   a3=rbinom(n,1,0.2),
                   a4=rbinom(n,1,0.2),
                   a5=rbinom(n,1,0.2))

#do some data-reshaping before plotting
#ggplot needs each data-point on one line
#so transform to long
plotdata <- melt(NT,id.vars=c("id","var01"),variable.name="a")
#plot everything using interaction
p1 <- ggplot(plotdata, aes(x=interaction(a,value), y=var01)) +
  geom_boxplot()
p1
p2 <- ggplot(plotdata[plotdata$value==1,], 
             aes(x=a, y=var01)) +
  geom_boxplot()

p2