从R中的多元回归绘制"回归线"

bai*_*wei 8 plot regression r

我使用了几个连续的预测变量进行了多元回归,其中一些预测变得非常重要,我想创建一个散点图或散点图,我的DV对照其中一个预测变量,包括一个"回归线".我怎样才能做到这一点?

我的情节看起来像这样

D = my.data; plot( D$probCategorySame, D$posttestScore )
Run Code Online (Sandbox Code Playgroud)

如果是简单回归,我可以添加如下的回归线:

lmSimple <- lm( posttestScore ~ probCategorySame, data=D )
abline( lmSimple ) 
Run Code Online (Sandbox Code Playgroud)

但我的实际模型是这样的:

lmMultiple <- lm( posttestScore ~ pretestScore + probCategorySame + probDataRelated + practiceAccuracy + practiceNumTrials, data=D )
Run Code Online (Sandbox Code Playgroud)

我想添加一个回归线,它反映了实际模型中的系数和截距,而不是简化模型.我想我很乐意为所有其他预测因子假设平均值,尽管我已经准备好听到相反的建议.

这可能没什么区别,但我会提到以防万一,由于我可能不想绘制原始数据这一事实,情况稍有复杂.相反,我想将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 )
Run Code Online (Sandbox Code Playgroud)

仅仅因为当我这样做时,我的数据看起来更加清晰.

Hon*_*Ooi 8

要在线性或广义线性模型中绘制单个项(即,适合lmglm),请使用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")
Run Code Online (Sandbox Code Playgroud)

  • 你好.我尝试过termplot,并在不同的情节中绘制每一个.我是如何在同一个图形中完成的? (2认同)

Dav*_*arx 6

您需要在绘图域中创建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)
Run Code Online (Sandbox Code Playgroud)