![](/img/trans.png)
[英]Incorporating time series into a mixed effects model in R (using lme4)
[英]Rewriting Mixed effects model formula from R (lme4) to Julia
我想获得在朱莉娅的结果相同使用功能的11聚物从lme4在河库请看以下和例如在内置的mtcars数据集,使用R
library(lme4)
data<-mtcars
data$vs<-as.factor(data$vs)
data$am<-as.factor(data$am)
data$gear<-as.factor(data$gear)
str(data)
model <- lmer(mpg ~ cyl:gear + hp:am + (1|gear:am), data = data)
我从用于 Julia 的MixedModels包中找到了lmm()
函数,它应该能够运行相同的结果,但是我不知道如何使用lmm()
从lmer()
函数的第一个参数重写公式。 尤其是交互 (:) 运算符。
我将不胜感激用简短的例子回答。
这里的 R 和 Julia 模型之间的对应关系似乎并不准确。 还有不同数值算法的问题。 但是我尝试使用MixedModels
重新创建相同的模型如下:
using RDatasets
using MixedModels
mtcars = dataset("datasets","mtcars")
mtcars[:AM] = PooledDataArray(mtcars[:AM])
mtcars[:Gear] = PooledDataArray(mtcars[:Gear])
mtcars[:GearAM] = PooledDataArray(collect(zip(mtcars[:Gear],mtcars[:AM])))
m = fit!(lmm(MPG ~ 1 + Gear + AM + Cyl + HP + (1|GearAM),mtcars))
手动创建混合效果列很笨拙 - 也许有更好的方法。 请注意命名 R 和 Julia 之间的系数的差异。 两者都有 6 个固定效应系数。
Julia 中的解决方案似乎不同(在我的机器上),但实现了更好的对数似然。 随机效应预计很弱,因为它的变量已经存在于固定效应中(它只考虑了 Gear 和 AM 之间的依赖关系),并且只有 32 个数据点。
希望这会有所帮助,如果您有更好的理解,最好将其添加到另一个答案或评论中。
如果您使用REML=true
和@formula(MPG ~ 1 + Cyl & Gear + HP & AM + (1 | Gear & AM)
您可以准确地重现。
支持(1 | Gear & AM)
需要版本 3 或更高版本的 MixedModels.jl,截至目前(2020 年 8 月)尚未发布,因此要重现此内容,您需要使用pkg"add MixedModels#master"
安装它。 这是在 Julia 1.5.0 上运行的:
using RDatasets, MixedModels
mtcars = RDatasets.dataset("datasets","mtcars")
categorical!(mtcars, [:AM, :Gear])
m = fit(MixedModel,
@formula(MPG ~ Cyl & Gear + HP & AM + (1 | Gear & AM)),
mtcars,
REML=true)
产生这个输出:
Linear mixed model fit by REML
MPG ~ 1 + Cyl & Gear + HP & AM + (1 | Gear & AM)
REML criterion at convergence: 168.11435769585046
Variance components:
Column Variance Std.Dev.
Gear & AM (Intercept) 16.913543 4.1126078
Residual 7.988539 2.8264004
Number of obs: 32; levels of grouping factors: 4
Fixed-effects parameters:
──────────────────────────────────────────────────────
Coef. Std. Error z Pr(>|z|)
──────────────────────────────────────────────────────
(Intercept) 34.3507 3.50385 9.80 <1e-21
Cyl & Gear: 3 -1.08837 0.781649 -1.39 0.1638
Cyl & Gear: 4 -1.56833 0.875625 -1.79 0.0733
Cyl & Gear: 5 -0.167413 1.42839 -0.12 0.9067
HP & AM: 0 -0.0412826 0.0215381 -1.92 0.0553
HP & AM: 1 -0.0613247 0.0298067 -2.06 0.0396
──────────────────────────────────────────────────────
与您发布的R代码相比:
Linear mixed model fit by REML ['lmerMod']
Formula: mpg ~ cyl:gear + hp:am + (1 | gear:am)
Data: data
REML criterion at convergence: 168.1
Scaled residuals:
Min 1Q Median 3Q Max
-1.42280 -0.54922 -0.07898 0.54892 2.09217
Random effects:
Groups Name Variance Std.Dev.
gear:am (Intercept) 16.914 4.113
Residual 7.989 2.826
Number of obs: 32, groups: gear:am, 4
Fixed effects:
Estimate Std. Error t value
(Intercept) 34.35066 3.50385 9.804
cyl:gear3 -1.08837 0.78165 -1.392
cyl:gear4 -1.56833 0.87562 -1.791
cyl:gear5 -0.16741 1.42839 -0.117
hp:am0 -0.04128 0.02154 -1.917
hp:am1 -0.06132 0.02981 -2.057
您还可以通过为它们提供对比来控制哪些变量被视为分类变量:
m2 = fit(MixedModel,
@formula(MPG ~ Cyl & Gear + HP & AM + (1 | Gear & AM)),
mtcars,
REML=true,
contrasts = Dict(:AM => DummyCoding(), :Gear => DummyCoding()))
指定 R 和 Julia(使用StatsModels.jl )之间的回归公式有两个主要区别。
&
来创建术语之间的交互,但在 R 中,您使用:
。@formula
宏定义一个公式。 在 R 中,通过“非标准评估”的魔力,任何事物都可能是一个宏。因此,您模型的等效 Julia 公式是
@formula(mpg ~ cyl&gear + hp&am + (1|gear&am))
对于使用categorical!
要将 DataFrame 中的列转换为分类列,请参阅DataFrames.jl 文档
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.