将最大可能数量的非互斥虚拟变量组合成分类变量

时间:2018-03-15 16:59:07

标签: r algorithm graph-algorithm categorical-data dummy-variable

这是一个更具抽象性的问题的R特定版本https://math.stackexchange.com/questions/2691617/

假设我们想要在回归中使用许多虚拟变量作为控件。如果这些变量是互斥的(即在任何特定观察中它们中只有一个可以等于1),我们会将它们组合成一个分类变量,并使用lfe包将结果变量与任何其他因子变量“转换”出来有。通过这种方式,我们可以避免与在非常“宽”的矩阵上进行回归的内存和性能约束相关的任何障碍。

但是,如果我们的假人不是互斥的,则无法将它们全部合并为一个变量。例如,如果我们有人月面板数据和虚拟对象,表明一个人在任何特定月份有哪些医疗状况,那么如果至少有一个人在同一个月内一起患有高血压和牙痛 - 这两个条件不能一起编码相同的分类变量。(要明确的是:显然可以使用一个分类变量对所有条件组合进行唯一编码,但这不是必需的)。

我们仍然可以编码成一个分类变量,至少是一些在我们的特定数据中恰好相互排斥的假人。例如,如果高血压和头痛从未在我们的假设数据集中共同发生,那么没有什么能阻止我们将它们组合成一个分类变量,即使这些条件从实质观点来看并不相互排斥。然后我们可以用lfe“转换”分类变量,并将剩余的虚拟变量留在估计的常规部分。

问题:R中有效的方法是将一组不相互排斥的虚拟变量中最大可能数量的互斥虚拟变量编码为分类变量?

我给出了一个算法的例子,该算法将在链接的math.stackexchange问​​题中编码至少一些虚拟对象(如果可能的话),但它既不高效也不保证编码最大可能数量的虚拟对象。

我们还可以将观察和假人视为双模网络中的两种类型的节点。有鉴于此,我们可以问这样一个问题:我们如何在R中找到最大的节点组(虚拟对象),这些节点在假人的虚拟网络中相互连接,在同一个观察中有1个?

1 个答案:

答案 0 :(得分:0)

这个问题是NP完全的,因此没有一般的有效解决方案。在数学网络上进行制定,很容易将其转换为maximal clique problem

然而,出于优化目的,您不需要最好的解决方案,只需要一个好的解决方案。因此,一种简单的贪婪方法是递归地选择与最少的其他变量相交的变量。这将产生一组可以崩溃的布尔值。现在重复折叠另一组。继续前进,直到每个剩余的布尔值与其他布尔值相交。