如何评估二元结果分类预测变量集的预测能力?计算概率还是逻辑回归?


10

我试图确定简单概率是否可以解决我的问题,或者使用(学习)逻辑回归等更复杂的方法是否更好。

此问题中的响应变量是二进制响应(0,1)。我有许多都是分类无序的预测变量。我正在尝试确定预测变量的哪些组合产生最高的1。我需要逻辑回归吗?仅针对分类预测变量的每种组合计算样本集中的比例会有什么好处?


如果您有多个预测变量,那么在没有某种回归模型的情况下很难做到这一点。你有什么想法?只是一个很大的维偶数表(是预测变量的数量)?ķkk
2012年

预测变量类别是否被分组为多个因素?如果是,它们是否交叉或嵌套?此外,您只对发表描述性陈述感兴趣吗?我认为,如果您的数据很复杂,LR模型可能会更方便,并且如果您要进行推断,则LR更可取。
gung-恢复莫妮卡

@Macro-是的,我认为这本质上是一个大表,一列显示与场景对应的采样点数,另一列显示1的比例。我有五个分类预测变量,每个都有10-30个可能的值,因此我知道方案列表会很多。我当时想在R中编写一个循环遍历每个循环并输出显着结果的脚本(场景中1的高比例加上大量的采样点)。
雷切尔(Rachel)2012年

@gung-这些因素只是部分交叉。没有一个因素会被认为是嵌套的。我对寻找可能具有很高的响应变量等于1的因素(例如州,客户,雇员)的组合感兴趣
Rachel

1
@EmreA-不幸的是,分类变量并非完全独立。某些组合比其他组合更有可能...
Rachel 2012年

Answers:


11

逻辑回归直到数值不精确为止,其拟合度与列表百分比完全相同。 因此,如果您的自变量是因子对象factor1等,并且从属结果(0和1)是x,则可以使用如下表达式获得效果

aggregate(x, list(factor1, <etc>), FUN=mean)

比较一下

glm(x ~ factor1 * <etc>, family=binomial(link="logit"))

例如,让我们生成一些随机数据:

set.seed(17)
n <- 1000
x <- sample(c(0,1), n, replace=TRUE)
factor1 <- as.factor(floor(2*runif(n)))
factor2 <- as.factor(floor(3*runif(n)))
factor3 <- as.factor(floor(4*runif(n)))

摘要是通过

aggregate.results <- aggregate(x, list(factor1, factor2, factor3), FUN=mean)
aggregate.results

其输出包括

   Group.1 Group.2 Group.3         x
1        0       0       0 0.5128205
2        1       0       0 0.4210526
3        0       1       0 0.5454545
4        1       1       0 0.6071429
5        0       2       0 0.4736842
6        1       2       0 0.5000000
...
24       1       2       3 0.5227273

供将来参考,输出第6行中级别(1,2,0)的因子估计为0.5。

逻辑回归以这种方式放弃其系数:

model <- glm(x ~ factor1 * factor2 * factor3, family=binomial(link="logit"))
b <- model$coefficients

要使用它们,我们需要逻辑功能:

logistic <- function(x) 1 / (1 + exp(-x))

要获得例如水平(1,2,0)的因子的估计,请计算

logistic (b["(Intercept)"] + b["factor11"] + b["factor22"] + b["factor11:factor22"])

(注意,必须将所有相互作用都包括在模型中,并且必须应用所有相关系数才能获得正确的估计值。)输出为

(Intercept) 
        0.5

同意的结果aggregate。(输出中的“(拦截)”标题是输入的痕迹,对于此计算实际上没有任何意义。)


另一形式的相同信息出现在的输出中table。例如,(长)输出

table(x, factor1, factor2, factor3)

包括以下面板:

, , factor2 = 2, factor3 = 0

   factor1
x    0  1
  0 20 21
  1 18 21

factor1= 1 的列对应于(1,2,0)级别的三个因子,并显示等于的值的,与我们从和读出的内容一致。121/(21+21)=0.5x1aggregateglm


最后,可以方便地从以下输出中获得在数据集中占最高比例的因子组合aggregate

> aggregate.results[which.max(aggregate.results$x),]
  Group.1 Group.2 Group.3         x
4       1       1       0 0.6071429

1
这是很多信息,需要我花一些时间来消化,但是我很高兴听到列表的百分比和逻辑回归从本质上给我相同的结果。我在两个预测变量上运行了聚合函数,并立即完成了...逻辑拟合的结果已经运行了几分钟,但尚未完成。我将继续进行调整,但最终可能仅使用列表百分比。谢谢!
雷切尔2012年

(+1),关如果标准误差的袖口我想知道在这方面从逻辑回归可以纳入图形镶嵌故事梗概,我建议。我还怀疑这可能是快速“过滤”有趣交互结果的好方法(尽管这只是我的想法!)
Andy W

“逻辑回归,直到数值不精确为止,都将与列表百分比完全相同”:她不是在为每种预测变量配置列表百分比吗?在这种情况下,逻辑回归无法编码所有可能的关系。
尼尔·G

@Neil确保它可以对所有“关系”(因素的组合)进行编码:使用所有可能的相互作用。有关示例,请参见R代码。当因素众多时,实际上会有很多空组合,但是处理得当的软件将没有问题。甚至更好的软件也可以处理组合,而不会产生响应变化。
ub

@Andy我喜欢您对图形的答复-我们需要找到一种方法来创建一个完全正确的线程!也许您想将误差估计值合并到镶嵌图中的想法就是解决它的方法:如何在其中同时表示逻辑估计值,实际数据和/或误差?
ub

6

为了快速浏览每个类别中和/或以多个类别为条件的二进制响应的比例,可以使用图形图。特别是,为了同时可视化以许多类别自变量为条件的比例,我建议使用Mosaic Plots

以下是从博客文章“ 了解基于区域的图:统计图形和其他博客中的马赛克图”中获取的示例。此示例以乘客的等级为条件,以蓝色显示了泰坦尼克号上幸存者的比例。人们可以同时评估幸存者的比例,同时仍可以了解每个子组中的乘客总数(可以肯定的有用信息,尤其是当某些子组的数量稀少并且我们期望会有更多随机变化时)。

泰坦尼克号的马赛克图
(来源:theusrus.de

然后,可以使后续镶嵌图以多个类别自变量为条件。来自同一博客文章的下一个示例以简短的视觉摘要显示,所有头等舱和二等舱的儿童乘客幸存下来,而三等舱的孩子票价则差得很远。它还清楚地表明,尽管每个班级之间女性幸存者的比例从第一到第二到第三班级都明显减少,但成年女性的存活率比男性高得多(尽管机组人员相对较高),再次注意,鉴于门槛有多狭窄,女性船员并不多。

以第三个变量为条件的镶嵌
(来源:theusrus.de

显示了多少信息真是令人惊讶,这是四个方面的比例(阶层,成人/儿童,性别和幸存者比例)!

我同意,如果您对预测感兴趣或总体上对因果关系感兴趣,那么您将希望转向更正式的建模。图形图虽然可以提供关于数据性质的非常直观的线索,并且可以提供其他在简单估计回归模型时(尤其是考虑到不同类别变量之间的交互作用)时常常会漏掉的见解。


+1,这就是我在上面的评论中要尝试表达的关于目标是简单描述还是推断的观点。Nb,要清楚一点,用数字做得更好!
gung-恢复莫妮卡

@gung谢谢,代表什么Nb?我总是对数字也说的更好!
Andy W

2
与统计数据无关,“ nb”代表nota bene,反过来又是拉丁文的“注意”(字面意思)或“注意” /“ notice”(通俗地说)。
gung-恢复莫妮卡

3

根据您的需求,您可能会发现递归分区提供了一种易于解释的方法来预测结果变量。有关这些方法的R简介,请参见Quick-R的基于树的模型页面。我通常更喜欢ctree()R的方包中的实现,因为不必担心会被修剪,并且默认情况下它会生成漂亮的图形。

这将属于先前答案中建议的特征选择算法的类别,并且通常会给出与逻辑回归一样好甚至更好的预测。


2

给定您的五个类别预测变量,每个假设20个结果,则针对每种预测变量配置具有不同预测的解决方案需要205参数。这些参数中的每一个都需要许多训练示例才能很好地学习。您是否在所有配置中至少拥有一千万个培训示例?如果是这样,请继续这样做。

如果数据较少,则希望学习较少的参数。例如,可以通过假设各个预测变量的配置对响应变量具有一致的影响来减少参数的数量。

如果您认为自己的预测变量彼​​此独立,那么逻辑回归是唯一可以正确执行操作的算法。(即使他们不是独立的,它仍然可以做得很好。)

总而言之,逻辑回归对预测变量的独立影响进行了假设,从而减少了模型参数的数量,并产生了易于学习的模型。


1

您应该查看特征选择算法。一种适合您的情况(二进制分类,分类变量)的方法是“最小冗余最大相关性”(mRMR)方法。您可以在http://penglab.janelia.org/proj/mRMR/上快速在线尝试。


是否可以使用多个分类预测器来运行此程序?在上载页面上,看起来只有第一列可以成为数据的“类”……也许我不明白应该如何格式化数据。
Rachel 2012年

还是“类”应该是输出变量,在这种情况下为0或1?如果是这样,将分类变量转换为虚拟变量以显示每个变量的指标是否重要?
Rachel

您可以根据需要拥有任意数量的预测变量。数据文件的第一行必须是要素名称,第一列必须是样本的类(响应变量)。因此,一个例子是: response,predictor1,predictor2,predictor3 <line break here> 1,5,4,3 <line break here> 0,5,3,-1 <line break here> 1,1,2,3
emrea

1

我从事信用评分领域的工作,在这里,作为一个奇怪的案例提出的是规范。

我们使用逻辑回归,将分类变量和连续变量都转换为证据权重(WOE),然后将其用作回归的预测变量。花大量时间对分类变量进行分组,并对连续变量进行离散化(分类/分类)。

证据的权重是一个简单的计算。它是类别的几率的对数,减去总体的几率的对数:
WOE = ln(Good(Class)/ Bad(Class))-ln(Good(ALL)/ Bad(ALL))几乎所有使用Logistic回归构建的信用评分模型的标准转换方法。您可以分段使用相同的数字。

这样做的好处是您将始终知道分配给每个WOE的系数是否有意义。负系数与数据中的模式相反,通常是由多重共线性引起的。系数超过1.0表示过度补偿。大多数系数会出现在零到一之间。


感谢您提供有趣且有益的信息。不过,我无法弄清楚它如何响应该线程中的问题。您所指的“奇怪情况”是什么?您是否可能打算用它来回答其他地方的另一个问题?
ub
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.