-2

我有这个代码

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 演示(请参阅快照)。

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

4

1 回答 1

1

尽管我的评论中的要点是,这是从 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)

哪个生产

在此处输入图像描述

于 2013-04-13T16:07:37.050 回答