Spark2 生存分析Survival regression

  在spark.ml中,实现了加速失效时间(AFT)模型,这是一个用于检查数据的参数生存回归模型。 它描述了生存时间对数的模型,因此它通常被称为生存分析的对数线性模型。 不同于为相同目的设计的比例风险模型,AFT模型更容易并行化,因为每个实例独立地贡献于目标函数。

  当在具有常量非零列的数据集上匹配AFTSurvivalRegressionModel而没有截距时,Spark MLlib为常量非零列输出零系数。 这种行为不同于R survival :: survreg。

导入包

import org.apache.spark.sql.SparkSession
import org.apache.spark.sql.Dataset
import org.apache.spark.sql.Row
import org.apache.spark.sql.DataFrame
import org.apache.spark.sql.Column
import org.apache.spark.sql.DataFrameReader
import org.apache.spark.rdd.RDD
import org.apache.spark.sql.catalyst.encoders.ExpressionEncoder
import org.apache.spark.sql.Encoder
import org.apache.spark.sql.DataFrameStatFunctions
import org.apache.spark.sql.functions._

import org.apache.spark.ml.linalg.Vectors
import org.apache.spark.ml.regression.AFTSurvivalRegression
import org.apache.spark.ml.feature.VectorAssembler

建模

    val spark = SparkSession.builder().appName("Spark Survival regression").config("spark.some.config.option", "some-value").getOrCreate()

    // For implicit conversions like converting RDDs to DataFrames
    import spark.implicits._

    val dataList: List[(Double, Double, Double, Double)] = List(
      (2, 51, 1, 1),
      (2, 58, 1, 1),
      (2, 55, 2, 1),
      (2, 28, 22, 1),
      (1, 21, 30, 0),
      (1, 19, 28, 1),
      (2, 25, 32, 1),
      (2, 48, 11, 1),
      (2, 47, 14, 1),
      (2, 25, 36, 0),
      (2, 31, 31, 0),
      (1, 24, 33, 0),
      (1, 25, 33, 0),
      (2, 30, 37, 0),
      (2, 33, 35, 0),
      (1, 36, 25, 1),
      (1, 30, 31, 0),
      (1, 41, 22, 1),
      (2, 43, 26, 1),
      (2, 45, 24, 1),
      (2, 35, 35, 0),
      (1, 29, 34, 0),
      (1, 35, 30, 0),
      (1, 32, 35, 1),
      (2, 36, 40, 1),
      (1, 32, 39, 0))

    val data = dataList.toDF("sex", "age", "label", "censor").orderBy("label")

    val colArray = Array("sex", "age")

    val assembler = new VectorAssembler().setInputCols(colArray).setOutputCol("features")

    val vecDF: DataFrame = assembler.transform(data)

    val aft = new AFTSurvivalRegression()

    val model = aft.fit(vecDF)

    // Print the coefficients, intercept and scale parameter for AFT survival regression
    println(s"Coefficients: ${model.coefficients} Intercept: " +
      s"${model.intercept} Scale: ${model.scale}")

    val Array(coeff1, coeff2) = model.coefficients.toArray

    val intercept: Double = model.intercept

    val scale: Double = model.scale

    val aftDF = model.transform(vecDF)

    // 风险率h(t)
    aftDF.selectExpr("sex", "age", "label", "censor",
      "features", "round(prediction,2) as prediction",
      s"round( exp( sex*$coeff1+age*$coeff2+$intercept ), 2) as h(t)").orderBy("label").show(100, false)
 
时间: 2024-10-21 10:12:58

Spark2 生存分析Survival regression的相关文章

生存模型(Survival Model)介绍

https://www.cnblogs.com/BinbinChen/p/3416972.html 生存分析,维基上的解释是: 生存分析(Survival analysis)是指根据试验或调查得到的数据对生物或人的生存时间进行分析和推断,研究生存时间和结局与众多影响因素间关系及其程度大小的方法,也称生存率分析或存活率分析. 生存分析的方法也可以用在其他的商业应用中,比如顾客流失,等模型.大概可以从两个方向上去考虑生存分析的研究对象 1. 估计(各期的)生存函数,某个人病人可以活多久(e.g. 5

survival analysis 生存分析与R 语言示例 入门篇

生存分析,survival analysis,顾名思义是用来研究个体的存活概率与时间的关系.例如研究病人感染了病毒后,多长时间会死亡:工作的机器多长时间会发生崩溃等.  这里“个体的存活”可以推广抽象成某些关注的事件. 所以SA就成了研究某一事件与它的发生时间的联系的方法.这个方法广泛的用在医学.生物学等学科上,近年来也越来越多人用在互联网数据挖掘中,例如用survival analysis去预测信息在社交网络的传播程度,或者去预测用户流失的概率. R里面有很成熟的SA工具. 本文介绍生存分析的

Cox回归模型【生存分析】

参考:<复杂数据统计方法——基于R的应用> 吴喜之 在生存分析中,研究的主要对象是寿命超过某一时间的概率.还可以描述其他一些事情发生的概率,例如产品的失效.出狱犯人第一次犯罪.失业人员第一次找到工作.青少年第一次吸毒等等. 生存函数S(t): S(t)=P(T>t)=1-P(T<=t),t>0 T:表示寿命的随机变量 t:特定时间 综合生存函数图:用到包survival 案例:口腔癌数据

R语言生存分析可视化分析

完整原文链接:http://tecdat.cn/?p=5438 生存分析对应于一组统计方法,用于调查感兴趣事件发生所花费的时间. 生存分析被用于各种领域,例如: 癌症研究为患者生存时间分析, “事件历史分析”的社会学 在工程的“故障时间分析”. 在癌症研究中,典型的研究问题如下: 某些临床特征对患者的生存有何影响? 个人三年存活的概率是多少? 各组患者的生存率有差异吗? 基本概念 在这里,我们从定义生存分析的基本术语开始,包括: 生存时间和事件 生存功能和危险功能 癌症研究中的生存时间和事件类型

Forest plot(森林图) | Cox生存分析可视化

本文首发于“生信补给站”微信公众号,https://mp.weixin.qq.com/s/2W1W-8JKTM4S4nml3VF51w 更多关于R语言,ggplot2绘图,生信分析的内容,敬请关注小号,给您干货. Meta分析的结果使用森林图进行可视化展示很常见,其实COX生存分析也能用森林图展示. 之前分享过绘制KM曲线R|生存分析(1),诺莫图展示COX结果Nomogram(诺莫图) | Logistic.Cox生存分析结果可视化,本文将简单的介绍如何使用R-survminer包绘制Cox生

生存分析

在某些领域的分析中,常常用追踪的方式来研究事物的发展规律,比如研究某种药物的疗效,手术后的存活时间,某件机器的使用寿命等. 这种分析的特点是追踪研究的对象都要经过一段时间,而且经常会碰到出于某种原因无法继续追踪的情况. 生存分析就是用来研究这段追踪时间的分布规律以及相关因素的一种统计分析方法. 一.生存分析的一些概念 1.观察起点是指由研究者确定的研究开始时的时间 2.终点事件是指由研究者确定的某种发生的事件,这种事件必须明确定义,而且并不一定是消极事件 3.生存时间是指从观察起点到终点事件发生

R生存分析AFT

1. Surv Description 创建一个生存对象,通常用作模型公式中的响应变量. 参数匹配是此功能的特殊功能,请参阅下面的详细信息. Surv(time, time2, event, type=c('right', 'left', 'interval', 'counting', 'interval2', 'mstate'), origin=0) is.Surv(x) Argumentstime对于右删失数据,这是一个跟踪时间.对于区间数据,第一个参数是区间的开始时间. event 状态指

R语言如何在生存分析与Cox回归中计算IDI,NRI指标

原文链接:http://tecdat.cn/?p=6095 读取样本数据 D=subset(pbc, select=c("time","status","age","albumin","edema","protime","bili")) D$status=as.numeric(D$status==2) D=D[!is.na(apply(D,1,mean)),] ; d

泰坦尼克生存分析

泰坦尼克数据集描述: 案例数:1309 特征数:14个,包括年龄,性别,仓位等 总存活率:38% 统计描述部分只详细看仓位和性别这两个特征值,以及它们的联合起来对生存率的影响,我们通过简单的三张统计表格就可以发现数据具有欺骗与真实的双面性. 从男女各自的总幸存率看,男女幸存比大约为1:2,单从这点看男女幸存的比例并不是很悬殊.但是结合人数占比,男性大约占了6.5成,就可以看出总幸存比并不能很好的描述泰坦尼克中男女幸存的真实情况,最能反映性别幸存差异的是男女在各自性别中的幸存比例,可以看到男性的死