从自然样条拟合中获取预测标准误差

机器算法验证 r 多重回归 样条
2022-03-09 05:24:11

我正在拟合一些数据点的自然样条拟合。我想估计预测值的预测误差。在线性回归中(我同意自然样条也是具有特定类型设计矩阵的线性回归),我们知道:

β^=(XTX)1XTY assuming var(Y) = σ2I then : var(β^)=(XTX)1σ2

现在考虑Y^=XiTβ^+ϵi. 然后我们可以写:

Var(Y^)=XiT((XTX)1σ2)(Xi)+σ2

这对于线性回归很容易计算。我应该如何使用自然样条?我可以得到自然样条的设计矩阵。我可以得到 (XTX)1σ2但我怎样才能得到它的其余部分:

这是R中的一个例子:

set.seed(12345)
x <- c(1:100)
y <- sin(pi*x/50)
epsilon <- rnorm(100, 0, 3)
knots <- c(10, 20, 30, 40, 50, 60, 70, 80, 90)
myFit <- lm(y ~ ns(x, knots = knots))

现在考虑 x = 32.5 。我怎样才能得到方差Y^对应于 x = 32.5 ? 我知道我们可以使用预测功能。但是,我真正想要的是通过获取设计矩阵并将它们相乘来计算它类似于线性回归。

我真的很感谢你的帮助。

1个回答

您可以使用以下方法获取 R 中线性模型的设计矩阵model.matrix()

X <- model.matrix(myFit)
sigma <- summary(myFit)$sigma
var.Yhat <- (diag(X %*% solve(t(X) %*% X) %*% t(X)) + 1) * sigma^2

或者,如果您想获得新值的预测方差X, 使用ns()先转化为自然样条基:

X.new <- cbind(1, ns(x.new, knots=knots))
var.Yhat <- (diag(X.new %*% solve(t(X) %*% X) %*% t(X.new)) + 1) * sigma^2