从 R 中的多元回归中绘制“回归线”
Posted
技术标签:
【中文标题】从 R 中的多元回归中绘制“回归线”【英文标题】:Plot "regression line" from multiple regression in R 【发布时间】:2013-07-11 01:09:02 【问题描述】:我对多个连续预测变量进行了多元回归,其中一些结果显着,我想针对 一个 预测变量创建我的 DV 的散点图或类似散点图,包括一条“回归线”。我该怎么做?
我的剧情是这样的
D = my.data; plot( D$probCategorySame, D$posttestScore )
如果是简单回归,我可以添加这样的回归线:
lmSimple <- lm( posttestScore ~ probCategorySame, data=D )
abline( lmSimple )
但我的实际模型是这样的:
lmMultiple <- lm( posttestScore ~ pretestScore + probCategorySame + probDataRelated + practiceAccuracy + practiceNumTrials, data=D )
我想添加一条回归线来反映实际模型的系数和截距,而不是简化模型。为了做到这一点,我想我很乐意假设所有其他预测变量的平均值,尽管我愿意听取相反的建议。
这可能没有什么区别,但我会提一下,以防万一,由于我可能不想绘制原始数据,情况会稍微复杂一些。相反,我想为预测变量的分箱值绘制 DV 的平均值,如下所示:
D[,'probCSBinned'] = cut( my.data$probCategorySame, as.numeric( seq( 0,1,0.04 ) ), include.lowest=TRUE, right=FALSE, labels=FALSE )
D = aggregate( posttestScore~probCSBinned, data=D, FUN=mean )
plot( D$probCSBinned, D$posttestScore )
只是因为当我这样做时,我的数据看起来更干净。
【问题讨论】:
如果不为该图指定所有其他预测变量的(静态)值,您将无法针对单个预测变量进行绘图。你能澄清一下你想展示什么吗? 已添加说明,谢谢。我想我倾向于假设所有其他预测变量都假设它们的平均值。 【参考方案1】:您需要在绘图的域中创建一个 x 值向量,并从您的模型中预测它们对应的 y 值。为此,您需要将此向量注入到由与模型中的变量匹配的变量组成的数据框中。您说您可以将其他变量固定在它们的平均值,所以我在我的解决方案中使用了这种方法。考虑到绘图中的其他值,您预测的 x 值是否真正合法应该是您在设置时考虑的因素。
如果没有示例数据,我无法确定这是否适合您,因此如果下面有任何错误,我深表歉意,但这至少应该说明该方法。
# Setup
xmin = 0; xmax=10 # domain of your plot
D = my.data
plot( D$probCategorySame, D$posttestScore, xlim=c(xmin,xmax) )
lmMultiple <- lm( posttestScore ~ pretestScore + probCategorySame + probDataRelated + practiceAccuracy + practiceNumTrials, data=D )
# create a dummy dataframe where all variables = their mean value for each record
# except the variable we want to plot, which will vary incrementally over the
# domain of the plot. We need this object to get the predicted values we
# want to plot.
N=1e4
means = colMeans(D)
dummyDF = t(as.data.frame(means))
for(i in 2:N)dummyDF=rbind(dummyDF,means) # There's probably a more elegant way to do this.
xv=seq(xmin,xmax, length.out=N)
dummyDF$probCSBinned = xv
# if this gives you a warning about "Coercing LHS to list," use bracket syntax:
#dummyDF[,k] = xv # where k is the column index of the variable `posttestScore`
# Getting and plotting predictions over our dummy data.
yv=predict(lmMultiple, newdata=subset(dummyDF, select=c(-posttestScore)))
lines(xv, yv)
【讨论】:
谢谢!该方法有效,但我必须在“预测”中使用“新数据”而不是“数据”。 有时它会说:termplot(mymodel) 中的警告:“模型”似乎涉及交互:请参阅帮助页面,它只绘制其中一条线【参考方案2】:查看 TeachingDemos 包中的 Predict.Plot
函数,以获取一个选项来绘制一个预测变量与其他预测变量在给定值下的响应。
【讨论】:
【参考方案3】:要绘制线性或广义线性模型中的各个项(即,与lm
或glm
拟合),请使用termplot
。无需分箱或其他操作。
# plot everything on one page
par(mfrow=c(2,3))
termplot(lmMultiple)
# plot individual term
par(mfrow=c(1,1))
termplot(lmMultiple, terms="preTestScore")
【讨论】:
你好。我试过 termplot ,它把每一个都绘制在不同的情节中。我如何才能在同一个图形中得到所有信息?以上是关于从 R 中的多元回归中绘制“回归线”的主要内容,如果未能解决你的问题,请参考以下文章