朱莉娅对比编码
Julia contrast coding
在回归中为分类变量分配自定义对比时遇到问题。看起来可以使用 contrast
参数
分配 EffectsCoding 或 DummyCoding
model = fit!(lmm(@formula(response ~ 1 + factor + (1|sub)), data,
contrasts = Dict(:factor => EffectsCoding()) ))
但是如何分配自定义对比度?
例如,在 R 中我可以做到
contrasts(data$factor) <- cbind("A_vs_B"= c(0.5, -0.5, 0), "AB_vs_C"= c(-0.25, -0.25, 0.5))
> contrasts(data$factor)
A_vs_B AB_vs_C
A 0.5 -0.25
B -0.5 -0.25
C 0.0 0.50
除了EffectsCoding()
,DataFrames还支持其他对比度规范。通常,您可以提供一个对比矩阵(大小合适,k-by-(k-1) 用于 k 类别)作为你在 R 中做。一个例子:
using RDatasets # install with Pkg.add("RDatasets")
using MixedModels # install with Pkg.add("MixedModels")
iris = dataset("datasets", "iris")
contrast_matrix = [0.5 -0.25; -0.5 -0.25; 0.0 0.5]
fit!(lmm(@formula(SepalLength ~ 1 + Species + (1|PetalWidth)), iris,
contrasts = Dict(:Species => ContrastsCoding(contrast_matrix)) ))
题中具体的对比矩阵其实就是一个类别一定排序的Helmert编码矩阵。这样的话,做起来就更简单了:
fit!(lmm(@formula(SepalLength ~ 1 + Species + (1|PetalWidth)), iris,
contrasts = Dict(:Species => HelmertCoding()) ))
HelmertCoding
还采用可选参数 base
和 levels
(未命名,请参阅文档)来切换类别顺序。
希望这会有所帮助,因为实际代码在我的 v0.7 Julia 上出现了一些问题,但在 v0.5 上应该可以。
在回归中为分类变量分配自定义对比时遇到问题。看起来可以使用 contrast
参数
model = fit!(lmm(@formula(response ~ 1 + factor + (1|sub)), data,
contrasts = Dict(:factor => EffectsCoding()) ))
但是如何分配自定义对比度?
例如,在 R 中我可以做到
contrasts(data$factor) <- cbind("A_vs_B"= c(0.5, -0.5, 0), "AB_vs_C"= c(-0.25, -0.25, 0.5))
> contrasts(data$factor)
A_vs_B AB_vs_C
A 0.5 -0.25
B -0.5 -0.25
C 0.0 0.50
除了EffectsCoding()
,DataFrames还支持其他对比度规范。通常,您可以提供一个对比矩阵(大小合适,k-by-(k-1) 用于 k 类别)作为你在 R 中做。一个例子:
using RDatasets # install with Pkg.add("RDatasets")
using MixedModels # install with Pkg.add("MixedModels")
iris = dataset("datasets", "iris")
contrast_matrix = [0.5 -0.25; -0.5 -0.25; 0.0 0.5]
fit!(lmm(@formula(SepalLength ~ 1 + Species + (1|PetalWidth)), iris,
contrasts = Dict(:Species => ContrastsCoding(contrast_matrix)) ))
题中具体的对比矩阵其实就是一个类别一定排序的Helmert编码矩阵。这样的话,做起来就更简单了:
fit!(lmm(@formula(SepalLength ~ 1 + Species + (1|PetalWidth)), iris,
contrasts = Dict(:Species => HelmertCoding()) ))
HelmertCoding
还采用可选参数 base
和 levels
(未命名,请参阅文档)来切换类别顺序。
希望这会有所帮助,因为实际代码在我的 v0.7 Julia 上出现了一些问题,但在 v0.5 上应该可以。