我适合使用广义加模式gam
从mgcv
包.我有一个数据表,包含我的因变量Y
,一个自变量X
,其他自变量Oth
和一个两级因子Fac
.我想适合以下模型
Y ~ s(X) + Oth
但是,附加约束条件是该s(X)
术语仅适用于因子的两个等级之一Fac==1
.其他术语Oth
应与整个数据相符.
我尝试过探索,s(X,by=Fac)
但这会偏向于适合Oth
.换句话说,我想表达的信念X
涉及到Y
只有Fac==1
,否则就没有意义模型X
.
廉价技巧:如果Fac == 1则使用X的辅助变量,其他地方使用0.
library("mgcv") library("ggplot2") # simulate data N <- 1e3 dat <- data.frame(covariate = runif(N), predictor = runif(N), group = factor(sample(0:1, N, TRUE))) dat$outcome <- rnorm(N, 1 * dat$covariate + ifelse(dat$group == 1, .5 * dat$predictor + 1.5 * sin(dat$predictor * pi), 0), .1) # some plots ggplot(dat, aes(x = predictor, y = outcome, col = group, group = group)) + geom_point() ggplot(dat, aes(x = covariate, y = outcome, col = group, group = group)) + geom_point() # create auxiliary variable dat$aux <- ifelse(dat$group == 1, dat$predictor, 0) # fit the data fit1 <- gam(outcome ~ covariate + s(predictor, by = group), data = dat) fit2 <- gam(outcome ~ covariate + s(aux, by = group), data = dat) # compare fits summary(fit1) summary(fit2)