基于模型的递归划分模型是否来自混合效应模型家族?
Is a model-based recursive partitioning model from the family of the mixed effect models?
我想知道基于模型的递归分区模型(mob,package partykit)是否正确
混合效应模型系列。
我的观点是,混合效应模型为每个随机效应提供了不同的参数,暴民模型也是如此。我看到的主要区别是暴民将随机效应划分为自己。
这是一个例子:
library(partykit); library(lme4)
set.seed(321)
##### Random data
V1 <- runif(100); V2 <- sample(1:3, 100, replace=T)
V3 <- jitter(ifelse(V2 == 1, 2*V1+3, ifelse(V2==2, -1*V1+2, V1)), amount=.2)
##### Mixed-effect model
me <- lmer(V3 ~ V1 + (1 + V1|V2))
coef(me) #linear model coefficients from the mixel effect model
#$V2
# (Intercept) V1
#1 2.99960082 1.9794378
#2 1.96874586 -0.8992926
#3 0.01520725 1.0255424
##### MOB
fit <- function(y, x, start = NULL, weights = NULL, offset = NULL) lm(y ~ x)
mo <- mob(V3 ~ V1|V2, fit=fit) #equivalent to lmtree
coef(mo) #linear model (same) coefficients from the mob
# (Intercept) x(Intercept) xV1
#2 2.99928854 NA 1.9804084
#4 1.97185661 NA -0.9047805
#5 0.01333292 NA 1.0288309
不是,那种线性的regression-based MOB(lmtree
)不是mixed-effects类型的模型。但是,您使用 MOB 树来估计交互模型(或嵌套效应),实际上 mixed-effects 模型也可以用来这样做。
您的 data-generating 过程为 V2
的每个级别实施不同的截距和 V1
斜率。如果已知这种相互作用,则可以通过具有相互作用效应的合适的线性回归轻松恢复它(但 V2
应该是一个分类因子变量)。
V2 <- factor(V2)
mi <- lm(V3 ~ 0 + V2 / V1)
matrix(coef(mi), ncol = 2)
## [,1] [,2]
## [1,] 2.99928854 1.9804084
## [2,] 1.97185661 -0.9047805
## [3,] 0.01333292 1.0288309
请注意,模型拟合等同于 lm(V3 ~ V1 * V2)
,但对系数使用不同的对比编码。
上面获得的估计与 lmtree()
输出完全相同(或像您在 post 中那样手动使用 mob()
+ lm()
):
coef(lmtree(V3 ~ V1 | V2))
## (Intercept) V1
## 2 2.99928854 1.9804084
## 4 1.97185661 -0.9047805
## 5 0.01333292 1.0288309
主要区别在于您必须准确地告诉 lm()
要考虑的交互。 lmtree()
,另一方面,"learned" 以 data-driven 方式进行交互。不可否认,在这种情况下,没有太多需要学习的东西......但是 lmtree()
可以决定不进行任何拆分或进行两次拆分,而不是执行所有可能的拆分。
最后,您的 lmer(V3 ~ V1 + (1 + V1 | V2))
规范还估计了嵌套(或交互)效应。然而,它使用了一种不同的估计技术,具有随机效应而不是完全固定效应。另外,这里你必须预先指定交互。
简而言之:lmtree()
可以被认为是一种以data-driven的方式寻找交互作用的方法。但是这些相互作用不是用随机效应估计的,因此不是 mixed-effects 模型。
P.S.: 可以组合 lmtree()
和 lmer()
但那是另一回事了。如果您有兴趣,请参阅包 https://CRAN.R-project.org/package=glmertree 和随附的文件。
我想知道基于模型的递归分区模型(mob,package partykit)是否正确 混合效应模型系列。
我的观点是,混合效应模型为每个随机效应提供了不同的参数,暴民模型也是如此。我看到的主要区别是暴民将随机效应划分为自己。
这是一个例子:
library(partykit); library(lme4)
set.seed(321)
##### Random data
V1 <- runif(100); V2 <- sample(1:3, 100, replace=T)
V3 <- jitter(ifelse(V2 == 1, 2*V1+3, ifelse(V2==2, -1*V1+2, V1)), amount=.2)
##### Mixed-effect model
me <- lmer(V3 ~ V1 + (1 + V1|V2))
coef(me) #linear model coefficients from the mixel effect model
#$V2
# (Intercept) V1
#1 2.99960082 1.9794378
#2 1.96874586 -0.8992926
#3 0.01520725 1.0255424
##### MOB
fit <- function(y, x, start = NULL, weights = NULL, offset = NULL) lm(y ~ x)
mo <- mob(V3 ~ V1|V2, fit=fit) #equivalent to lmtree
coef(mo) #linear model (same) coefficients from the mob
# (Intercept) x(Intercept) xV1
#2 2.99928854 NA 1.9804084
#4 1.97185661 NA -0.9047805
#5 0.01333292 NA 1.0288309
不是,那种线性的regression-based MOB(lmtree
)不是mixed-effects类型的模型。但是,您使用 MOB 树来估计交互模型(或嵌套效应),实际上 mixed-effects 模型也可以用来这样做。
您的 data-generating 过程为 V2
的每个级别实施不同的截距和 V1
斜率。如果已知这种相互作用,则可以通过具有相互作用效应的合适的线性回归轻松恢复它(但 V2
应该是一个分类因子变量)。
V2 <- factor(V2)
mi <- lm(V3 ~ 0 + V2 / V1)
matrix(coef(mi), ncol = 2)
## [,1] [,2]
## [1,] 2.99928854 1.9804084
## [2,] 1.97185661 -0.9047805
## [3,] 0.01333292 1.0288309
请注意,模型拟合等同于 lm(V3 ~ V1 * V2)
,但对系数使用不同的对比编码。
上面获得的估计与 lmtree()
输出完全相同(或像您在 post 中那样手动使用 mob()
+ lm()
):
coef(lmtree(V3 ~ V1 | V2))
## (Intercept) V1
## 2 2.99928854 1.9804084
## 4 1.97185661 -0.9047805
## 5 0.01333292 1.0288309
主要区别在于您必须准确地告诉 lm()
要考虑的交互。 lmtree()
,另一方面,"learned" 以 data-driven 方式进行交互。不可否认,在这种情况下,没有太多需要学习的东西......但是 lmtree()
可以决定不进行任何拆分或进行两次拆分,而不是执行所有可能的拆分。
最后,您的 lmer(V3 ~ V1 + (1 + V1 | V2))
规范还估计了嵌套(或交互)效应。然而,它使用了一种不同的估计技术,具有随机效应而不是完全固定效应。另外,这里你必须预先指定交互。
简而言之:lmtree()
可以被认为是一种以data-driven的方式寻找交互作用的方法。但是这些相互作用不是用随机效应估计的,因此不是 mixed-effects 模型。
P.S.: 可以组合 lmtree()
和 lmer()
但那是另一回事了。如果您有兴趣,请参阅包 https://CRAN.R-project.org/package=glmertree 和随附的文件。