我不想经营一家公司
gam
我想有一个设计矩阵,为每一个层次的因素分别建立一个平滑的条款模型
u1
library(mgcv)
set.seed(1)
n <- 50
u1 <- sample(c(1,2), n, replace = TRUE)
u1 <- factor(u1)
u2 <- runif(n)
data <- data.frame(u1, u2)
a <- s(u2, k = 5, bs = "ps", by = u1)
b <- smoothCon(a, data = data, absorb.cons = TRUE)
smoothCon
生成长度列表
nlevels(u1)
对于这个因素“由”平滑。为创建虚拟矩阵
(本例中有两列),每列乘以
s(u2, l = 5, bs = "ps")
. 所以,
b[[1]]$X
是第一级的设计矩阵,以及
b[[2]]$X
b[[1]]$X[u1 == 2]
给出所有零,因为这是的设计矩阵
u1 == 1
. 你想吗
cbind
这些单独的矩阵一起:
cbind(b[[1]]$X, b[[2]]$X)
请注意,因为您已设置
absorb.cons = TRUE
u1型
mgcv
s(u2, k = 5, bs = 'ps', by = u1) + u1
这一点在问答中也有提到;A您引用的:
mgcv: how to specify interaction between smooth and factor?
. 在你的申请表里
mgcv公司
你也需要意识到这一点。所以一个完整的模型矩阵应该是
cbind(b[[1]]$X, b[[2]]$X, model.matrix(~ u1))