以目标向量为输出的 R 神经网络模型,包含生存预测

机器算法验证 r 机器学习 自习 生存 神经网络
2022-04-09 09:56:57

概述

我想使用Chi、Street 和 Wolberg撰写的题为“基于人工神经网络的生存分析在两个乳腺癌数据集上的应用”的论文中描述的神经网络来模拟生存预测,其中评估并返回代表时间点的 1 的目标向量概率的向量。不幸的是,他们没有提供用于创建该方法的软件。

例如,需要在神经网络中训练具有time、 (表示活着或死亡)和其他预测变量的数据集。status将有一个数据结构来保存研究需要的时间点(例如{1,1,1,1,1,1},三年中的六个月间隔)。考虑到上述预测变量后,该模型的输出将如下所示:{0.98761,0.91111,0.82710,0.70003,0.64253,0.47181}对应于:

          6      12      18      24      30      36
1   0.98761 0.91111 0.82710 0.70003 0.64253 0.47181
2   ...

这些数据可用于将来输入网络的记录。


R 神经网络包

我一直在寻找在nnet,neuralnetrminer包中实现这一点的方法,不幸的是我有限的知识无法修改它们以满足我的需要。我只知道这些预测名义值和数值,但现在如何做向量。

到目前为止,这些包中与预测相关的函数并未提示使用向量作为输出。

  1. nnetpredict()描述清楚地说明如下。

    通过训练有素的神经网络预测新示例。

    # X1, X2, and the rest of predictive variables
    model.nnet <- nnet(Surv(time,status)~X1+X2, data=data.train, size=1, maxit=500)
    
  2. neuralnet'scompute()不支持类似目标向量的支持。

    针对给定协变量向量计算给定神经网络。

  3. rminer'spredict()lforecast()证明有潜力(基于示例),但我不知道如何将它们转变为我想做的事情。

  4. 据说survnnet软件包支持该软件包predictSurvProb的常用功能,但由于 Internet 上的文档和支持不佳,我没有使用它。pec

    通过训练有素的生存神经网络预测新示例。

    model.survnet <- survnnet(Surv(time,status)~X1+X2, data=dat,
        model='llog', decay=0.1, bias.decay=25, size=1,
        skip=T, alpha=0.1)  
    predictions   <- predict(model.survnet, data.train, type="raw")
    

Cox PH(目前已知的方法)

coxph到目前为止,我得到的最接近的方法是cph应用于使用数字兴趣点声明变量的predictSurvProb函数。times

通常我这样做:

data.train  <- SimSurv(300)
model.coxph <- cph(Surv(time,status)~X2,data=dat,surv=TRUE,x=TRUE,y=TRUE)

# declare target times as 25,50,75,100,150 for probabilities
predictions <- predictSurvProb(coxph12, newdata=data.train, times=c(25,50,75,100,150))
round(predictions, digits=6) 

我会得到我指定的每个时间段的概率输出:

          25       50       75      100      150
1   0.648268 0.509353 0.460196 0.425917 0.324364
2   0.648268 0.509353 0.460196 0.425917 0.324364
3   0.756732 0.648020 0.607077 0.577596 0.484789
4   0.648268 0.509353 0.460196 0.425917 0.324364
5   0.648268 0.509353 0.460196 0.425917 0.324364

这些现在可以作为新变量集成到数据集中用于其他目的。


我现在想在具有目标向量的神经网络中实现这一点,或者像上面的例子一样,实现与 Cox PH 过程类似的实现。

不幸的是,正如我之前所说,我无法在网上找到一个简单的软件包或教程来说明这是否可行。

我检查了数据挖掘软件 WEKA 的MultilayerPerceptron实现,但它要求结果变量(或者在我的情况下是概率向量)首先存在,这将我带回到 R 中。

这种方法在这些 R 包中是否可行,或者唯一的方法是创建我自己的?所有帮助和建议将不胜感激。

1个回答

为什么不将事件的二进制指标作为目标变量,将时间段长度作为解释变量(加上其他协变量)?如果事件发生,则目标为 1,时间段计算为事件发生前的时间 - 开始时间。对于目标为 0 的某些观察,如果以月为单位,则此时间段为 36。对于目标为 1 的某些观察,它可能要少得多。

在整个监视期结束之前,是否会从数据集中删除一些观察结果?这必须以某种方式计算。

要获得不同时间间隔的个体生存概率,您需要使用刚刚开发的模型对象 i 次对新数据集进行评分,其中 i 个不同的时间段和特定时间段的值为 n。然后只需连接 i 个包含时间段特定概率的向量。

想法是用其他协变量测量的时间段解释了观察研究中以时间长度为条件的生存概率。

编辑:

我寻找 R 包神经网络。您可以通过以下方式在目标矩阵中包含各个时间段特定的生存事件。C1 是 covariate1,T1 是时间段 1 中的生存事件向量等。您的数据框/矩阵可能如下所示:

ID T1 T2 T3 T4 T5 T6 C1 C2 C3 CN  
1 1 1 1 1 1 1 X11 X12 X13 X1N  
2 1 0 0 0 0 0 X21 X22 X23 X2N  
..  

使用以下代码:

survexample=neuralnet(T1+T2+T3+T4+T5+T6~C1+C2+...+CN,data=example,hidden=n,err.fct="ce",linear.output=FALSE)  

此示例代码进行分类并强制输出向量值在 [0,1] 范围内。