带有序数自变量的 Logit

机器算法验证 物流 罗吉特 序数数据
2022-01-19 16:21:35

在 logit 模型中,是否有比对每个级别使用虚拟变量更智能的方法来确定自序变量的影响?

2个回答

添加到@dmk38 的回复中,“任何一组分数都给出了一个有效的测试,只要它们是在没有咨询实验结果的情况下构建的。如果分数集很差,因为它严重扭曲了真正构成基础的数字量表。有序分类,测试将不敏感。因此,分数应该体现对分类的构建和使用方式的最佳洞察力。(Cochran,1954 年,由 Agresti 引用,2002 年,第 88-89 页)。换句话说,将有序因子视为数字评分变量仅仅是一个建模问题。只要有意义,这只会影响您解释结果的方式,并且对于如何为序数变量选择最佳表示没有明确的经验法则。

考虑以下关于母亲饮酒和存在或不存在先天性畸形的例子(Agresti,分类数据分析,表 3.7 p.89):

            0    <1 1-2 3-5 6+
Absent  17066 14464 788 126 37
Present    48    38   5   1  1

在这种特殊情况下,我们可以使用逻辑回归或简单关联表对结果进行建模。让我们在 R 中进行:

tab3.7 <- matrix(c(17066,48,14464,38,788,5,126,1,37,1), nr=2,
                 dimnames=list(c("Absent","Present"),
                               c("0","<1","1-2","3-5","6+")))
library(vcd)
assocstats(tab3.7)

通常χ2(12.08, p=0.016751) 或 LR (6.20, p=0.184562) 统计量(4 df)不考虑酒精消费的有序水平。

将两个变量视为具有等间距分数的序数(这对二元变量没有影响,例如畸形,我们选择基线为 0=不存在),我们可以通过线性关联测试线性关联。让我们首先构建这个列联表的分解版本:

library(reshape)
tab3.7.df <- untable(data.frame(malform=gl(2,1,10,labels=0:1), 
                                alcohol=gl(5,2,10,labels=colnames(tab3.7))), 
                     c(tab3.7))
# xtabs(~malform+alcohol, tab3.7.df) # check

然后我们可以使用以下方法测试线性关联

library(coin)
#lbl_test(as.table(tab3.7))
lbl_test(malform ~ alcohol, data=tab3.7.df)

产生χ2(1)=1.83p=0.1764. 请注意,这个统计数据只是两个系列分数之间的相关性(Agresti 称之为M2=(n1)r2),这很容易计算为

cor(sapply(tab3.7.df, as.numeric))[1,2]^2*(32574-1)

可以看出,没有太多证据表明这两个变量之间存在明确的关联。正如 Agresti 所做的那样,如果我们选择将酒精水平重新编码为 {0,0.5,1.5,4,7},即使用中间值作为假设的连续量表,最后一个分数有点纯粹是任意的,那么我们会得出结论母亲饮酒对先天性畸形发展的影响更大:

lbl_test(malform ~ alcohol, data=tab3.7.df,         
         scores=list(alcohol=c(0,0.5,1.5,4,7)))

产生的检验统计量为 6.57,相关的 p 值为 0.01037。

有其他编码方案,包括midranks(在这种情况下,我们回退到 Spearmanρ而不是皮尔逊r(缺乏理论依据)。

使用 GLM 方法,我们将进行如下操作。但首先检查酒精是如何在 R 中编码的:

class(tab3.7.df$alcohol)

它是一个简单的无序因子 ( "factor"),因此是一个名义预测因子。现在,这里有三个模型,我们将酒精视为名义、有序或连续的预测因子。

summary(mod1 <- glm(malform ~ alcohol, data=tab3.7.df, 
                    family=binomial))
summary(mod2 <- glm(malform ~ ordered(alcohol), data=tab3.7.df, 
                    family=binomial))
summary(mod3 <- glm(malform ~ as.numeric(alcohol), data=tab3.7.df, 
                    family=binomial))

最后一种情况隐含地假设等间隔尺度,并且β^被解释为@dmk38 所做的:它反映了酒精增加一个单位对通过 logit 链接的结果的影响,即观察到畸形的概率增加(与没有畸形相比,即优势比)是exp(θ^)=exp(0.228)=1.256. Wald 检验在通常的 5% 水平上不显着。在这种情况下,设计矩阵仅包含 2 列:第一列是截距的 1 常量列,第二列是预测变量的数值(1 到 5),如简单的线性回归。总之,该模型测试了酒精对结果的线性影响(在 logit 量表上)。

然而,在其他两种情况(mod1mod2)中,我们得到不同的输出,因为用于对预测变量建模的设计矩阵不同,可以使用以下方法检查:

model.matrix(mod1)
model.matrix(mod2)

我们可以看到,相关的设计矩阵mod1包括虚拟变量k1在第一列中的截距项之后的酒精水平(0 始终是基线),而在mod2我们有四列对比编码效果的情况下(在截距的 1 列之后)。类别“3-5”的系数估计为 1.03736 下mod1,但 0.01633 下mod2请注意,这两个模型之间的 AIC 和其他基于可能性的度量仍然相同。

您可以尝试为酒精分配新分数,看看它将如何影响预测的畸形概率。

如果级别是有序的,那么在 logit(或 OLS)回归模型中使用分类预测器是完全可以的。但是,如果您有理由将每个级别视为离散的(或者如果实际上您的分类变量是名义变量而不是有序变量),那么,作为虚拟编码的替代方案,您还可以使用正交对比编码。有关非常完整且易于理解的讨论,请参阅 Judd, CM, McClelland, GH & Ryan, CS 数据分析:模型比较方法,Edn。第二。(Routledge/Taylor and Francis,纽约,纽约;2008 年),或者只是谷歌“对比编码”