在R

2013-07-12 59 views
6

中绘制多元回归的“回归线”我用多个连续的预测变量进行了多元回归,其中一些显着,我想创建一个散点图或散点图的我的DV对一个的预测变量,包括一个“回归线”。我怎样才能做到这一点?在R

我的情节是这样的

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

如果没有指定该图的所有其他预测变量的(静态)值,则无法对单个预测变量进行绘图。你能澄清你想要展示什么吗? –

+0

澄清补充说,谢谢。我想我会倾向于假定所有其他预测因子都假设它们的平均值。 – baixiwei

回答

4

您需要在图的域中创建一个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) 
+0

谢谢!除了我必须在“预测”中使用“newdata”而不是“data”之外,这种方法很有效。 – baixiwei

+0

有时它说:警告在termplot(mymodel): 'model'似乎涉及交互:请参阅帮助页面,它只绘制其中一行 – skan

2

看在TeachingDemos包一个选项Predict.Plot功能绘制一个预测值,与在其他预测的给定值的响应。

6

要绘制线性或广义线性模型中的单个项(即,适合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") 
+2

您好。我尝试过termplot,并将其绘制在不同的情节中。我怎样才能在同一张图片中获得所有? – skan