为具有一个预测变量的逻辑回归设置 ggplot 并循环遍历多个结果(或列)
Setting up ggplot for a logistic regression with one predictor and looping through multiple outcomes (or columns)
我是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 循环 运行 每个 yvar 对预测变量 的逻辑回归]xvar。我能够成功绘制每个 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)
}
我不想使用基本的 plot 函数,而是想切换到 ggplot2。我目前能够为单个回归生成 ggplots:
ggplot(df, aes(x=xvar, y=yvar1)) + geom_point() +
stat_smooth(method="glm", family="binomial", se=TRUE)
如何使用 ggplot2 设置循环?
如果你真的想循环,你可以使用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)
我是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 循环 运行 每个 yvar 对预测变量 的逻辑回归]xvar。我能够成功绘制每个 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)
}
我不想使用基本的 plot 函数,而是想切换到 ggplot2。我目前能够为单个回归生成 ggplots:
ggplot(df, aes(x=xvar, y=yvar1)) + geom_point() +
stat_smooth(method="glm", family="binomial", se=TRUE)
如何使用 ggplot2 设置循环?
如果你真的想循环,你可以使用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)