我一直在尝试使用惩罚样条线和线性混合模型之间的连接来拟合R中的惩罚样条回归模型。虽然我对R函数lme
非常熟悉,但使用其竞争对手lmer
会遇到一些困难。这是一个玩具示例,我想概括为lmer
:
require(nlme)
grid <- seq(0, 1, len = 100)
y <- rep(0, length(grid))
for(i in 1:length(grid)){
y[i] <- sin(3*pi*grid[i]) + rnorm(1, 0, 1)
}
X <- cbind(rep(1, length(grid)), grid, grid^2, grid^3)
knots <- seq(0.01, 0.99, len = 100)
Z <- outer(grid, knots, "-")
Z <- Z*(Z>0)
Z <- Z^3
data.mixed <- data.frame(X, Z)
data.mixed$all <- rep(1 ,nrow(data.mixed))
fit.mixed <- lme(y~ X-1, random = list( all = pdIdent(~Z-1) ), data = data.mixed )
curve(sin(3*pi*x), 0, 1, lwd = 2, ylim = c(-1.5, 1.5))
beta.hat <- fit.mixed$coefficients$fixed
u.hat <- unlist(fit.mixed$coefficients$random)
f.hat <- X%*%beta.hat + Z%*%u.hat
lines(grid, f.hat, lwd = 2, col = "red")
棘手的部分是pdIdent函数,它指定虽然我们有几个随机效应,但它们的协方差结构是单位矩阵的倍数; lme
然后估算这个标量倍数。
如果有人熟悉lmer
,我会非常感谢有关如何使用该功能完成此操作的一些提示。
提前谢谢