具有序数自变量的Logit


18

在logit模型中,是否有一种比每个级别都使用虚拟变量更聪明的方法来确定独立序数变量的影响?


它不依赖软件吗?

1
不同的软件可能允许不同的选项,但是应该有一个原则性的答案,不是吗?
fgregg 2010年

1
好吧,愚蠢的评论,对不起。

Answers:


16

要添加到@ dmk38的响应中,“任何分数集都可以提供有效的测试,只要它们的构建没有咨询实验结果即可。如果分数集很差,则它会严重扭曲确实构成了如果按顺序分类,则测试将不会敏感。因此,分数应体现出有关分类的构建和使用方式的最佳见解。” (Cochran,1954年,Agresti,2002年,第88-89页)。换句话说,将有序因子作为数字计分变量仅是建模问题。只要有道理,这只会影响您解释结果的方式,并且对于如何为序数变量选择最佳表示形式没有明确的经验法则。

考虑以下有关孕妇饮酒和是否存在先天性畸形的示例(Agresti,分类数据分析,表3.7第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)

通常(12.08,P = 0.016751)或LR(6.20,P = 0.184562)统计量(用4 DF)不占在饮酒的有序等级。χ2

将两个变量都视为等分间隔的序数(这对二进制变量(如畸形)没有影响,我们选择基线为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.1764M2=(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。

ρ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))

β^exp(θ^)=exp(0.228)=1.256。Wald检验在通常的5%水平下并不显着。在这种情况下,设计矩阵仅包括2列:第一列是截距为1的常数列,第二列是预测变量的数值(1到5),就像简单的线性回归一样。总而言之,该模型测试了酒精对结果的线性影响(对数刻度)。

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

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

mod1k1mod2mod1mod2

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


3
(+1)非常彻底的答案。我只想补充一点,尽管通常需要使用模拟或置换方法来获得测试统计量的分布,但可以获得仅假设剂量反应关系单调性的测试,而无需使用等渗回归为序数变量分配分数。在null下。参见Salanti&Ulm 2003 dx.doi.org/10.1002/bimj.200390012
一站式

@onestop感谢您的参考。我看看。
chl 2010年

6

如果水平是有序的,则在logit(或OLS)回归模型中使用分类预测变量是非常好的。但是,如果您有理由将每个级别视为离散级别(或者实际上您的分类变量是名义变量而不是序数变量),那么,除了伪编码之外,还可以使用正交对比编码。有关非常完整且易于访问的讨论,请参见Judd,CM,McClelland,GH和Ryan,CS,《数据分析:模型比较方法》,Edn。2号 (Routledge / Taylor和Francis,纽约,纽约; 2008年),或仅是Google“对比编码”


您是否说在模型中将序数数据视为间隔数据很好?如果是这样,如果我不知道水平之间的“距离”,该如何解释系数?
fgregg 2010年

3
是。该系数反映了顺序预测变量中每个变化增量的对数几率变化。这个(非常常见的)模型规范假设预测变量在其增量上具有线性影响。为了检验假设,您可以将使用序数变量作为单个预测变量的模型与将响应离散化并将其视为多个预测变量的模型进行比较(就像变量是名义变量一样)。如果后一种模型的拟合效果不佳,则将每个增量视为具有线性效应是合理的。
dmk38,2010年

我给您+1,因为此响应听起来不错,而且我想@fgregg也会做同样的事情(如果有足够的代表)。
chl 2010年

我也认为这是一个完美的例子,因为对数赔率的变化可以用序数变量来解释。
SmallChess
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.