我有一个向量数据集,表示具有不同特征的运动。一些向量表示被外部因素阻止的运动,因此,这样一个向量(v_length)的长度的观测值是不完整的(标记为incomplete == 1)。数据如下:
# A tibble: 10 x 9
v_length incomplete v_angle x0 y0 x1 y1 type vap
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <chr> <dbl>
1 1.70 1 0.869 66.6 0.5 67.7 1.8 A 0
2 1.82 1 -0.165 37.4 65.6 39.2 65.3 B 0
3 2.57 1 0.236 61.3 49.7 58.8 49.1 A 0
4 3.14 1 1.18 57.8 40.5 59 43.4 A 0
5 12.6 0 0.119 52.5 33.7 65 35.2 A 0
6 20.5 0 -0.847 65.3 32.3 78.9 16.9 A 0
7 33.0 0 -0.180 77.5 13.7 45 19.6 A 0
8 14.1 0 -0.780 45 19.6 35 29.5 B 0
9 2.97 0 1.00 35 29.5 33.4 27 B 0
10 6.59 0 0.732 33.4 27 38.3 31.4 A 0我想把v_length归为不完全观测(incomplete==1)。我的第一个想法是使用一些参数生存模型(例如威布尔)。但由于我没有经验的生存分析,我一直在为一个良好的设置挣扎。我的第一个疑问是,使用v_length作为预测指标之一是否正确?乍一看,这是没有意义的,但如果没有将v_length作为预测指标之一,对该模型的预测看起来非常奇怪:

包含背后的想法是帮助模型知道什么是观察到的向量长度,所以它可以预测一个值高于这个值。在预测器中包含v_length之后,输出如下所示:

然而,我们仍然有很多比实际向量长度更低的值,而我显然不想要一个模型来预测一个比观察到的值更低的值。
所以我的问题是:威布尔生存模型适合这个任务吗?正确的设置是什么?其他哪些方法适合于正确审查数据的估算?
发布于 2020-02-11 17:23:21
您不能将v_length放在回归中--这将是数据泄漏的一种形式。然而,你应该考虑“如何告诉模型我已经观察到了一些长度”,这是正确的。这可以通过一些生存分析数学来完成。对于经过审查的观察,你想要的是
S(l \;|\; l > \text{observed v_length})= P(L > l \;|\; L > \text{observed v_length})。
让我们分析一下:
这给了你一个新的生存曲线,你可以用它来计算(取新的生存曲线的中值或平均值)。
在python的lifelines包中,这种计算是在预测方法中使用conditional_after参数时在幕后完成的,参见docs 这里。我不确定R包是否有这样的东西。
绘制观测值和预测值也没有意义,因为一些观测值被截断(删失),因此观测值和预测值的差异可能是由于审查而不是错误的预测。例如,使用上面的值,我可以绘制点(1.70,25.0)。1.70被审查,25.0是预测值。这些价值观之间有很大的差异,但我们不知道这种差异是因为审查,还是我们的预测真的是错的。
我的建议是集中精力寻找一个好的模型,最大限度地利用样本外的可能性或AIC (为什么可能?这是衡量生存适应度的一个很好的指标)。
https://datascience.stackexchange.com/questions/67903
复制相似问题