使用一个预测变量设置逻辑回归的ggplot并循环遍历多个结果(或列)

时间:2015-03-02 02:23:56

标签: r plot ggplot2 logistic-regression

我是R的新手并且有一个与ggplot相关的问题。下面是一个虚拟数据框,其中一列包含预测变量(xvar)和多列二分结果(yvar1,yvar2,yvar3)。

df <- data.frame("xvar"=c(0,100,200,300,400,500,600,1000),"yvar1"= c(0,0,0,0,0,0,1,1),"yvar2"=c(0,0,1,1,1,1,1,1),"yvar3"=c(0,0,1,1,0,1,1,1))

我创建了 for 循环,针对预测变量 xvar 为每个 yvar 运行逻辑回归。我能够成功绘制每个 yvar 的回归图。请忽略回归警告(这是一个虚拟数据集)

for (i in 2:4) {

  logr.yvar <- glm(df[,names(df[i])] ~ xvar, data=df, family=binomial(link="logit"))
  print(logr.yvar)

  plot(df$xvar, df[,i])
  curve(predict(logr.yvar, data.frame(xvar=x), type="response"), add=TRUE) 

}

我想切换到ggplot2,而不是使用基本 plot 函数。我目前能够为个人回归生成ggplots:

ggplot(df, aes(x=xvar, y=yvar1)) + geom_point() + 
  stat_smooth(method="glm", family="binomial", se=TRUE)

如何使用ggplot2设置循环

1 个答案:

答案 0 :(得分:0)

如果您真的想要循环,可以使用lapply

p <- lapply(names(df)[-1], function(nm){
  ggplot(df, aes_string(x="xvar", y=nm)) + geom_point() + 
    stat_smooth(method="glm", family="binomial", se=TRUE)
})
print(p)

但是,我怀疑重塑数据并将所有图表一起显示可能会更好。

# reshaping data
require(reshape2)
df.melt <- melt(df, id.var='xvar')
# first variation, using facets 
ggplot(df.melt, aes(xvar, value)) + 
  geom_point() + 
  stat_smooth(method="glm", family="binomial", se=TRUE) +
  facet_grid(variable~.)
# second variation using colors
ggplot(df.melt, aes(xvar, value)) + 
  geom_point() + 
  stat_smooth(aes(color = variable, fill = variable), 
              method="glm", family="binomial", se=TRUE, size = 1.2)