将最大可能数量的不互斥的虚拟变量组合成一个分类变量
Combine maximum possible number of not mutually exclusive dummy variables into a categorical variable
这是此处提出的更抽象问题的 R 特定版本 https://math.stackexchange.com/questions/2691617/
假设我们有很多虚拟变量,我们想在回归中用作控制。如果这些变量是互斥的(即在任何特定观察中只有其中一个可以等于 1),我们会将它们组合成一个分类变量并使用 lfe 包将结果变量与任何其他因子变量一起 "transform away"我们有。通过这种方式,我们将避免在非常 "wide" 矩阵上进行回归时与内存和性能限制相关的任何障碍。
但是,如果我们的虚拟变量不是互斥的,则不可能将它们全部组合成一个变量。例如,如果我们有人-月面板数据,其中有虚拟变量表明一个人在任何特定月份的医疗状况,那么如果至少有一个人在同一个月同时患有高血压和牙痛——这两种情况不能一起编码到同一个分类变量中。(要清楚:显然可以用一个分类变量对所有条件组合进行唯一编码,但这不是必需的)。
我们仍然可以将至少一些在我们的特定数据中恰好互斥的虚拟变量编码为分类变量。例如,如果高血压和头痛从未在我们的假设数据集中同时出现,那么没有什么能阻止我们将它们组合成一个分类变量,即使从实质性角度来看这些条件并不相互排斥。然后我们可以 "transform away" 带有 lfe 的分类变量,并将剩余的虚拟变量留在估计的常规部分。
问题:在 R 中将最大可能数量的互斥虚拟变量从较大的非互斥虚拟变量集中编码为分类变量的有效方法是什么?
我给出了一个算法示例,该算法将在链接的 math.stackexchange 问题中至少编码一些虚拟对象(如果可能的话),但它既不高效也不能保证编码最大可能数量的虚拟对象.
我们还可以将观察值和虚拟对象视为双峰网络中的两种类型的节点。有鉴于此,问题可以这样问:我们如何在 R 中找到最大的一组节点(虚拟),通过在同一观察中有 1 个,在扁平的虚拟网络中彼此不连接?
这个问题是NP-complete,因此没有通用的有效解决方案。将您的公式放在数学网络上,很容易将其转换为 maximal clique problem.
但是,出于优化目的,您不需要最好的解决方案,只需要一个好的解决方案。因此,一种简单的贪婪方法是递归地选择与其他变量最少相交的变量。这将产生一组可以折叠的布尔值。现在重复折叠另一组。继续前进,直到每个剩余的布尔值都与其他布尔值相交。
这是此处提出的更抽象问题的 R 特定版本 https://math.stackexchange.com/questions/2691617/
假设我们有很多虚拟变量,我们想在回归中用作控制。如果这些变量是互斥的(即在任何特定观察中只有其中一个可以等于 1),我们会将它们组合成一个分类变量并使用 lfe 包将结果变量与任何其他因子变量一起 "transform away"我们有。通过这种方式,我们将避免在非常 "wide" 矩阵上进行回归时与内存和性能限制相关的任何障碍。
但是,如果我们的虚拟变量不是互斥的,则不可能将它们全部组合成一个变量。例如,如果我们有人-月面板数据,其中有虚拟变量表明一个人在任何特定月份的医疗状况,那么如果至少有一个人在同一个月同时患有高血压和牙痛——这两种情况不能一起编码到同一个分类变量中。(要清楚:显然可以用一个分类变量对所有条件组合进行唯一编码,但这不是必需的)。
我们仍然可以将至少一些在我们的特定数据中恰好互斥的虚拟变量编码为分类变量。例如,如果高血压和头痛从未在我们的假设数据集中同时出现,那么没有什么能阻止我们将它们组合成一个分类变量,即使从实质性角度来看这些条件并不相互排斥。然后我们可以 "transform away" 带有 lfe 的分类变量,并将剩余的虚拟变量留在估计的常规部分。
问题:在 R 中将最大可能数量的互斥虚拟变量从较大的非互斥虚拟变量集中编码为分类变量的有效方法是什么?
我给出了一个算法示例,该算法将在链接的 math.stackexchange 问题中至少编码一些虚拟对象(如果可能的话),但它既不高效也不能保证编码最大可能数量的虚拟对象.
我们还可以将观察值和虚拟对象视为双峰网络中的两种类型的节点。有鉴于此,问题可以这样问:我们如何在 R 中找到最大的一组节点(虚拟),通过在同一观察中有 1 个,在扁平的虚拟网络中彼此不连接?
这个问题是NP-complete,因此没有通用的有效解决方案。将您的公式放在数学网络上,很容易将其转换为 maximal clique problem.
但是,出于优化目的,您不需要最好的解决方案,只需要一个好的解决方案。因此,一种简单的贪婪方法是递归地选择与其他变量最少相交的变量。这将产生一组可以折叠的布尔值。现在重复折叠另一组。继续前进,直到每个剩余的布尔值都与其他布尔值相交。