我正在尝试使用lmer
包中的lme4
函数来拟合混合模型。但是,我不明白应该输入start
参数的内容。
我的目的是使用简单的线性回归来将那里估计的系数用作混合模型的起始值。
让我们说我的模型如下:
linear_model = lm(y ~ x1 + x2 + x3, data = data)
coef = summary(linear_model)$coefficients[- 1, 1] #I remove the intercept
result = lmer(y ~ x1 + x2 + x3 | x1 + x2 + x3, data = data, start = coef)
这个例子是我正在做的过于简单的版本,因为我无法共享我的数据。
然后我收到以下类型的错误:
Error during wrapup: incorrect number of theta components (!=105) #105 is the value I get from the real regression I am trying to fit.
我尝试了很多不同的解决方案,尝试提供一个列表并命名这些值theta
,就像我在某些论坛上看到的那样。
此外,Github代码测试长度是否合适但我无法找到它所指的内容:
# Assign the start value to theta
if (is.numeric(start)) {
theta <- start
}
# Check the length of theta
length(theta)!=length(pred$theta)
但是我无法找到定义pred$theta
的位置,因此我不明白该值105
的来源。
任何帮助?
答案 0 :(得分:4)
几点:
lmer
实际上并不明确地适合任何固定效应系数;对这些进行分析,以便在非线性估计过程的每个步骤中隐式地求解它们。估计仅涉及方差 - 协方差参数的非线性搜索。这是lme4 vignettes中的一个(相当于技术上)(方程30-31,第15页)。因此,提供固定效应系数的起始值是不可能的,也是无用的...... glmer
......
nAGQ>0
参数的起始值(唯一在theta
中明确优化的参数)对于非对角元素是0 Cholesky因子,对角元素为1:这是编码here lmer
...您需要进一步了解上游, ll$theta[] <- is.finite(ll$lower) # initial values of theta are 0 off-diagonal, 1 on
向量的值已被编码,以便对应元素对应的lower
向量元素的下限为0 ,非对角元素的下限为theta
;这相当于从缩放方差 - 协方差矩阵的单位矩阵开始(即,随机效应参数的方差 - 协方差矩阵除以残差方差),或随机效应方差-σ方差矩阵(sigma ^ 2 I)。
如果你有几个随机效果和大的方差 - 协方差矩阵,那么事情就会变得有点毛茸茸。如果您想要恢复-Inf
默认使用的起始值,可以使用lmer
,如下所示:
lFormula()
对于这个模型,我们有一个2x2随机效应方差 - 协方差矩阵。 library(lme4)
ff <- lFormula(Reaction~Days+(Days|Subject),sleepstudy)
(lwr <- ff$reTrms$lower)
## [1] 0 -Inf 0
ifelse(lwr==0,1,0) ## starting values
## [1] 1 0 1
参数对应于此矩阵的下三角形Cholesky因子,按列顺序排列,因此第一个和第三个元素是对角线,第二个元素是非对角线。
theta
参数的事实让我担心;拟合如此大的随机效应模型将非常缓慢并且需要大量数据才能可靠地拟合。 (如果您知道您的模型是有意义的,并且您有足够的数据,您可能需要考虑更快的选项,例如使用Doug Bates的theta
包为Julia或可能 MixedModels
,对于大型glmmTMB
向量的问题,可能比lme4
更好地扩展......)theta
似乎很奇怪。我无法弄清楚将相同的变量作为随机效应项并在同一模型中对变量进行分组有意义的任何上下文!