我正在尝试确定简单的概率是否适用于我的问题,或者使用(并了解)更复杂的方法(如逻辑回归)是否会更好。
此问题中的响应变量是二元响应 (0, 1)。我有许多分类和无序的预测变量。我试图确定哪些预测变量组合产生最高比例的 1。我需要逻辑回归吗?只为分类预测变量的每个组合计算我的样本集中的比例有什么好处?
我正在尝试确定简单的概率是否适用于我的问题,或者使用(并了解)更复杂的方法(如逻辑回归)是否会更好。
此问题中的响应变量是二元响应 (0, 1)。我有许多分类和无序的预测变量。我试图确定哪些预测变量组合产生最高比例的 1。我需要逻辑回归吗?只为分类预测变量的每个组合计算我的样本集中的比例有什么好处?
逻辑回归将给出与表格百分比完全相同的拟合,直至数值不精确。 因此,如果您的自变量是因子对象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
。(输出中的“(Intercept)”标题是输入的痕迹,对于这个计算实际上没有意义。)
的输出中出现了另一种形式的相同信息table
。例如,(冗长的)输出
table(x, factor1, factor2, factor3)
包括这个面板:
, , factor2 = 2, factor3 = 0
factor1
x 0 1
0 20 21
1 18 21
= 1的列factor1
对应于水平 (1,2,0) 的三个因子,并显示的值等于,与我们从和读出的内容一致。x
aggregate
glm
最后,从 的输出中可以方便地获得在数据集中产生最高比例的因素组合aggregate
:
> aggregate.results[which.max(aggregate.results$x),]
Group.1 Group.2 Group.3 x
4 1 1 0 0.6071429
为了快速浏览每个类别中二元响应的比例和/或以多个类别为条件,可以使用图形图。特别是,为了同时可视化以许多分类自变量为条件的比例,我建议使用Mosaic Plots。
以下是从博客文章中获取的示例,了解基于区域的图:来自统计图形和更多博客的马赛克图。此示例以蓝色可视化泰坦尼克号上的幸存者比例,具体取决于乘客的类别。一个人可以同时评估幸存者的比例,同时仍然了解每个子组中的乘客总数(肯定是有用的信息,特别是当某些子组数量稀少时,我们预计会有更多的随机变化)。
(来源:theusrus.de)
然后可以使后续的马赛克图以多个分类自变量为条件。下一个来自同一博客文章的快速视觉摘要示例表明,一等舱和二等舱的所有儿童乘客都幸免于难,而三等舱的儿童则没有那么好。它还清楚地表明,与男性相比,每个级别的女性成年人的存活率要高得多,尽管级别之间的女性幸存者比例从一等到二等到三等明显减少(然后船员再次相对较高,尽管再次注意,鉴于酒吧有多窄,女性船员并不多)。
(来源:theusrus.de)
令人惊讶的是显示了多少信息,这是四个维度的比例(班级、成人/儿童、性别和幸存者比例)!
我同意,如果您对预测或更一般的因果解释感兴趣,您将希望转向更正式的建模。尽管关于数据的性质,图形图可以是非常快速的视觉线索,并且可以提供在简单估计回归模型时经常错过的其他见解(特别是在考虑不同类别变量之间的交互时)。
根据您的需要,您可能会发现递归分区提供了一种易于解释的方法来预测结果变量。有关这些方法的R介绍,请参阅 Quick-R 的基于树的模型页面。我通常喜欢ctree()
在 R 的 `party 包中实现,因为不必担心修剪,默认情况下它会产生漂亮的图形。
这将属于先前答案中建议的特征选择算法的类别,并且通常提供与逻辑回归一样好的预测。
给定您的五个分类预测变量,假设每个变量有 20 个结果,那么每个预测变量配置具有不同预测的解决方案需要参数。这些参数中的每一个都需要许多训练示例才能很好地学习。您是否有至少一千万个分布在所有配置中的训练示例?如果是这样,请继续这样做。
如果您的数据较少,则希望学习的参数较少。例如,您可以通过假设各个预测变量的配置对响应变量具有一致的影响来减少参数的数量。
如果您认为您的预测变量是相互独立的,那么逻辑回归就是做正确事情的独特算法。(即使他们不是独立的,它仍然可以做得很好。)
总之,逻辑回归对预测变量的独立影响做出假设,这减少了模型参数的数量,并产生了一个易于学习的模型。