通常,RF-SRC 数据集的内存配置文件在 64 位机器上为 nxpx 8。当 n=500,000 和 p=20 时,RAM 使用量约为 80MB。这并不大。
您还需要考虑森林的大小 $nativeArray。默认节点大小 = 3,您将拥有 n / 3 = 166,667 个终端节点。为方便起见假设对称树,肛门内部/外部节点的总数大约为 2 * n / 3 = 333,333。默认 ntree = 1000,假设没有因子,$nativeArray 的维度为 [2 * n / 3 * ntree] x [5]。一个简单的示例将向您展示为什么我们在 $nativeArray 中有 [5] 列来标记拆分参数和拆分值。因此,森林的内存使用量将为 2 * n / 3 * ntree * 5 * 8 = 1.67GB。
所以现在我们正在处理一些严重的内存使用问题。
接下来考虑合奏。您还没有说在竞争风险数据集中有多少事件,但为了简单起见,我们假设有两个。
这里的大数组是特定原因的风险函数 (CSH) 和特定原因的累积发生率函数 (CIF)。这些都是维度 [n] x [time.interest] x [2]。在最坏的情况下,如果您的所有时间都是不同的,并且没有审查事件,则 time.interest = n。所以这些输出中的每一个都是 n * n * 2 * 8 字节。这会炸毁大多数机器。你的敌人是时间利益。在 big-n 情况下,您需要将 time.interest 向量限制为实际事件时间的子集。这可以通过参数 ntime 来控制。
从文档中:
ntime:用于生存家庭的整数值,用于将集成计算约束到不超过 ntime 个时间点的时间值网格。或者,如果提供了长度大于 1 的值向量,则假定这些是用于约束计算的时间点(请注意,使用的约束时间点将是最接近用户提供的时间点的观察事件时间)。如果未指定任何值,则默认操作是使用所有观察到的事件时间。
我的建议是从一个非常小的 ntime 值开始,只是为了测试是否可以毫无问题地完整分析数据集。然后逐渐增加它并观察您的 RAM 使用情况。请注意,如果您缺少数据,则 RAM 使用量会大得多。另请注意,我没有提到其他数组,例如也会导致大量 RAM 使用的终端节点统计信息。我只考虑了集成,但实际情况是每个终端节点将包含维度为 [time.interest] x 2 的数组,用于创建森林集成的 CSH 和 CIF 的节点特定估计器。
将来,我们将实施一个大数据选项,该选项将抑制集成并优化包的内存配置文件,以更好地适应 big-n 场景。同时,您必须努力使用现有的选项,如 ntree、nodesize 和 ntime,以减少 RAM 使用量。