我在如何从模型系数和模型矩阵中找出预测值时遇到了很多麻烦。我希望有人可以提供帮助。
我目前有一个线性模型,我正在设置两个自变量。 e.g。
data <- data.frame(d1,d2,d3)
lm.data <- lm(d1~d2*d3,data)
我现在可以得到系数向量
co.data <- coef(lm.data)
我现在也可以轻松获得模型矩阵
mm.data <- model.matrix(lm.data)
这是我可以丢失的地方!我正在努力教会自己如何在将predict(lm.data)
与系数一起使用时匹配我可以使用的值。换句话说,我知道从设计矩阵和系数的模型的预测值可以计算,但在过去48小时的工作,我真的不知道。
任何帮助都会很棒。
答案 0 :(得分:12)
您只需要了解线性模型的工作原理。
如果您的公式为d1 ~ d2 * d3
并且它们全部为数字,那么预测您只需执行(intercept) + (d2 coefficient)*x_d2 + (d3 coefficient)*x_d3 + (d2:d3 coefficient)*x_d2*x_d3
,这将为您提供预测的d1
。
这是一个可重复的例子:
data(iris)
m <- lm(Sepal.Length ~ Petal.Length * Sepal.Width, iris)
co.data <- coef(m)
# we'll predict the sepal length for these petal lengths and sepal widths:
x.pl <- runif(5, min=1, max=2)
x.sw <- runif(5, min=2, max=5)
y.predicted <- predict(m, data.frame(Petal.Length=x.pl, Sepal.Width=x.sw))
# 1 2 3 4 5
# 5.379006 5.495907 5.296913 4.382487 5.131850
现在手动完成,让我们看一下系数:
co.data
# Intercept) Petal.Length Sepal.Width Petal.Length:Sepal.Width
# 1.40438275 0.71845958 0.84995691 -0.07701327
根据上面的公式:
y <- co.data[1] + co.data[2]*x.pl + co.data[3] * x.sw + co.data[4]*x.pl*x.sw
# [1] 5.379006 5.495907 5.296913 4.382487 5.131850
不是手动编写,而是可以执行以下操作:
# x is a matrix with columns 1, petal length, sepal width, pl*sw
# (matches order of co.data)
x <- cbind(1, matrix(c(x.pl, x.sw, x.pl*x.sw), ncol=3))
x %*% co.data
# [,1]
# [1,] 5.379006
# [2,] 5.495907
# [3,] 5.296913
# [4,] 4.382487
# [5,] 5.131850