R中的部分回归图

时间:2017-03-27 04:07:54

标签: r plot ggplot2 regression

我对R很陌生,我很乐意为研究项目创建一个局部回归图得到一些帮助。

这是我的完整模特:

model2 <- lm(scenarios_anger ~ 1 + scenarios + age + female + politics + relg + spirit, data=data)

我的目标是创建一个散点图,只显示scenariosscenarios_anger之间的关系,同时保持所有其他预测变量不变。

经过一番询问后,我发现我需要1)创建另一个模型来预测除scenarios_anger之外的所有其他预测变量scenarios,然后从该模型中获取残差。 2)创建第三个模型,从完整模型中的所有其他预测变量预测scenarios,然后从该模型中获取残差。

我已经计算了残差:

model1 <- lm(scenarios_anger ~ 1 + age + female + politics + rely + spirit, data=data)

resid.model1 <- residuals(model1)

model2b <- lm(scenarios ~ 1 + age + female + politics + relg + spirit, data=data)

resid.model2b <- residuals(model2b)

问题在于我似乎无法将剩余值插入ggplot函数来创建散点图。我试过这个命令:

ggplot(data, aes(x = resid.model2b, y = resid.model1)) + geom_point(na.rm=T)

但我收到此错误消息Error: Aesthetics must be either length 1 or the same as the data (786): x, y

我想知道是不是因为我的残差不在ggplot函数的正确类中?我该如何解决这个问题?或者是否有另一种方法来创建我的偏回归图?

1 个答案:

答案 0 :(得分:0)

这里的问题是,要在绘图中使用的残差是不在数据帧data中的新创建的对象。因此,当您输入ggplot命令时,它会查找不存在的残差变量。您应该将残差变量重新添加到数据框data中,或出于绘图目的使用这些残差创建一个新的数据框。对于后一种方法,您将执行以下操作:

#Create the residuals (same as in your question)
model1 <- lm(scenarios_anger ~ 1 + age + female + politics + rely + spirit, data=data);
resid.model1 <- residuals(model1);
model2b <- lm(scenarios ~ 1 + age + female + politics + relg + spirit, data=data);
resid.model2b <- residuals(model2b);

#Create new data frame containing those residuals
NEWDF <- data.frame(RES1 = resid.model1, RES2b = resid.model2b);

#Now generate your plot using this NEWDF as your data
library(ggplot2);
ggplot(data = NEWDF, aes(x = resid.model2b, y = resid.model1)) + geom_point(na.rm=T);

这应该确保aes中引用的变量位于ggplot所调用的数据对象中,因此应该可以解决您的问题。如果您仍然遇到错误,请告诉我。