将线性回归超平面投影到2d图(类似于abline)

时间:2013-04-13 14:11:15

标签: r lm projection-plane

我有这段代码

factors<-read.csv("India_Factors.csv",header=TRUE)  
marketfactor<-factors[,4]  
sizefactor<-factors[,5]  
valuefactor<-factors[,6]  
dati<-get.hist.quote("SI", quote = "AdjClose", compression = "m")  
returns<-diff(dati)  
regression<-lm(returns ~ marketfactor + sizefactor + valuefactor,na.action=na.omit)

进行多线性回归。 我想在2D平面上绘制针对因子的回报(当然这是微不足道的),并且叠加了针对特定因子的线性回归超平面的投影。为了更清楚,结果应该是这样的:wolfram demonstrations(参见快照)。

任何帮助将不胜感激。 感谢您抽出宝贵的时间,祝您周末愉快。 乔治。

1 个答案:

答案 0 :(得分:0)

我评论中的观点表示,这里是从R中的拟合模型生成预测变量组合的输出的规范方法。目前还不清楚你想要的情节是什么,但对我来说有意义的情节是局部阴谋;其中一个变量在其范围内变化,而其他变量保持某个共同值。这里我在保持变量常量时使用样本均值。

首先是一些虚拟数据,只有协变量,但这会扩展到任何数字

set.seed(1)
dat <- data.frame(y = rnorm(100))
dat <- transform(dat,
                 x1 = 0.2 + (0.4 * y) + rnorm(100),
                 x2 = 2.4 + (2.3 * y) + rnorm(100))

适合回归模型

mod <- lm(y ~ x1 + x2, data = dat)

接下来使用模型预测一些数据值。您可以在单个预测中执行所有变量,然后对结果对象进行子集以仅绘制相关行。或者,更清楚(尽管更详细),您可以单独处理每个变量。下面我创建两个数据框,模型中每个协变量一个。在数据帧中,我在变化的协变量范围内生成100个值,并重复其他协变量的平均值。

pdatx1 <- with(dat, data.frame(x1 = seq(min(x1), max(x1), length = 100),
                               x2 = rep(mean(x2), 100)))
pdatx2 <- with(dat, data.frame(x1 = rep(mean(x1), 100),
                               x2 = seq(min(x2), max(x2), length = 100)))

在使用直线的线性回归中,您实际上不需要100个值 - 协变量范围的两个端点就可以了。但是,对于拟合函数线性的模型,您需要在更多位置进行预测。

接下来,使用模型预测这些数据点

pdatx1 <- transform(pdatx1, yhat = predict(mod, pdatx1))
pdatx2 <- transform(pdatx2, yhat = predict(mod, pdatx2))

现在我们准备绘制局部图了。首先计算y轴的范围 - 这里也是多余的,但是如果要添加置信区间,则需要在下面包含它们的值,

ylim <- range(pdatx1$y, pdatx2$y, dat$y)

要绘制(这里将两个数字放在同一个绘图设备上),我们可以使用以下代码

layout(matrix(1:2, ncol = 2))
plot(y ~ x1, data = dat)
lines(yhat ~ x1, data = pdatx1, col = "red", lwd = 2)
plot(y ~ x2, data = dat)
lines(yhat ~ x2, data = pdatx2, col = "red", lwd = 2)
layout(1)

哪个产生

enter image description here