朱莉娅对比编码

时间:2017-08-15 02:48:20

标签: regression julia categorical-data

在回归中为分类变量分配自定义对比时遇到问题。看起来可以使用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

1 个答案:

答案 0 :(得分:3)

EffectsCoding()外,DataFrame还支持其他对比规范。通常,您可以像在R中一样提供对比矩阵(大小合适, k-by-(k-1) k 类别)。例如:

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还会使用可选参数baselevels(未命名,请参阅文档)来切换类别排序。

希望这会有所帮助,因为实际代码在我的v0.7 Julia上给出了一些问题,但是在v0.5上它应该可以工作。