1

我们有两个数据集(X1,Y1)和(X2,Y2)。如果它们似乎有不同的截距和不同的斜率,我如何使用单个线性模型来绘制两条拟合线?同时,使用同一个模型拟合两条不同的线和使用两个不同的线性模型有什么区别?

4

1 回答 1

0

您只需添加一个区分两个数据集的“虚拟”变量。虚拟变量是 1 或 0。带有预测变量的多元回归是分类的,通常使用虚拟变量——model.matrix下次你做一个时,你会看到。无论如何,这应该做你想要的:

x1 <- rnorm(100)
y1 <- x1*0.5 + 2 + rnorm(100, sd=0.001)

x2 <- rnorm(100)
y2 <- x2*0.25 + 2.5 + rnorm(100, sd=0.001)

x3 <- c(rep(0, length(x1)), rep(1, length(x2))) # dummy variable indicating origin of data
data <- data.frame(dummy=x3, x=c(x1,x2), y=c(y1,y2))

(model.out1 <- lm(y1~x1))
(model.out2 <- lm(y2~x2))
(model.out3 <- lm(y~x*dummy, data=data))

pred.model3.1 <- predict(model.out3, newdata=data[x3==0,]) # using the "combined" model, but providing "newdata" for the regression line corresponding to x1 an y1
pred.model3.2 <- predict(model.out3, newdata=data[x3==1,]) # same as above, but for x2 and y2

plot(data[,c("x","y")])
lines(data[x3==0,"x"], pred.model3.1, col="red")
lines(data[x3==1,"x"], pred.model3.2, col="blue")
legend("topleft", title="All from combined model", legend=c("x1 y1", "x2 y2"), col=c("red","blue"), lty=1)

在此处输入图像描述

编辑:我忘了回答统计问题。如果您想要这方面的更详细的答案,我建议检查交叉验证。但是为了完整性,做两个单独的回归和用一个虚拟变量做组合回归的主要区别在于,在第二种情况下,只有 1 个误差项(因此只有 1 个残差方差),并且还有参数描述关系之间的差异。因此它们因交互而不同,并且只有 1 个错误。但是,关于斜率和截距,它们几乎相同。

于 2015-04-30T01:56:56.203 回答