在R平滑的brms包

时间:2017-10-03 15:21:08

标签: r bayesian nonlinear-optimization

我在R中有这个数据框:

x =   rep(seq(-10,10,1),each=5) 
y =  rep(0,length(x) )
weights = sample( seq(1,20,1) ,length(x), replace  = TRUE)
weights = weights/sum(weights)
groups = rep( letters[1:5], times =length(x)/5  ) 

和一些看起来像这样的数据:

library(ggplot2)
ggplot(data = dat, aes(x = x, y = y, color = group))+geom_point( aes(size = weights))+
  ylab("outcome")+
  xlab("predictor x1")+
  geom_vline(xintercept = 0)+ geom_hline(yintercept = 0)



fit_brms = brm(y~ s(x)+(1|group), data = dat)
by_group = marginal_effects(fit_brms, conditions  = data.frame(group = dat$group) ,
                            re_formula = NULL, method = "predict")
plot(by_group, ncol = 5, points = TRUE)

我想制作一个分层非线性模型,以便每组都有不同的非线性拟合。

在brms中,我有下面的代码,它在x预测器上进行样条拟合,随机截取组,拟合线对于所有组都是相同的。不同之处在于线穿过y截距的位置。有没有办法让每个组的数据点的非线性拟合不同?

ON第13页:https://cran.r-project.org/web/packages/brms/vignettes/brms_multilevel.pdf

它指出"由于平滑术语本身无法按照多级方式建模,因此我们添加了一个基本的变化截距,以说明年份之间的变化"

因此样条曲线对于它出现的所有组都是相同的?图中唯一的区别是样条与y截距相交。这似乎非常严格。可以修改它以使样条曲线对每个组都是唯一的吗?

1 个答案:

答案 0 :(得分:1)

使用公式:y ~ s(x, by = group) + (1|group)