【问题标题】:How to extract the baseline hazard function h0(t) from glmnet object in R?如何从 R 中的 glmnet 对象中提取基线危险函数 h0(t)?
【发布时间】:2017-03-17 03:13:45
【问题描述】:

从 glmnet 对象中提取基线风险函数 h0(t)

我想知道时间 t 的风险函数 >> h(t,X) = h0(t) exp[Σ βi*Xi]。如何从 R 中的 glmnet 对象中提取基线危险函数 h0(t)?

据我所知,Survival Packages 中的函数“basehaz()”只能从 coxph 对象中提取基线危险函数。

我还发现了一个函数,glmnet.basesurv(time, event, lp, times.eval = NULL, centered = FALSE)。但是当我尝试使用这个功能时,出现了错误。

错误:找不到函数“glmnet.basesurv”

下面是我的代码,使用 glmnet 拟合 cox 模型并获得所选变量的系数。是否可以从这个 glmnet 对象中获取基线风险函数 h0(t)?

代码

    # Split data into training data and testing data 
    set.seed(101) 
    train_ratio = 2/3
    sample <- sample.int(nrow(x), floor(train_ratio*nrow(x)), replace = F)
    x.train <- x[sample, ]
    x.test <- x[-sample, ]
    y.train <- y[sample, ]
    y.test <- y[-sample, ]

    surv_obj <- Surv(y.train[,1],y.train[,2]) 

    # 
    my_alpha = 0.5

    fit = glmnet(x = x.train, y = surv_obj, family = "cox",alpha = my_alpha)  # fit the model with elastic net method
    plot(fit,xvar="lambda", main="cox model coefficient paths(glmnet.fit)\n\n") # Plot the paths for the fit
    fit 

    # cross validation to find out best lambda
    cv_fit = cv.glmnet(x = x.train,y = surv_obj , family = "cox",nfolds = 10,alpha = my_alpha) 

    tencrossfit <- cv_fit$glmnet.fit 
    plot(cv_fit, main="Cross-validated Deviance(10 folds cv.glmnet.fit)\n\n") 

    plot(tencrossfit, main="cox model coefficient paths(10 folds cv.glmnet.fit)\n\n")

    max(cv_fit$cvm)
    summary(cv_fit$cvm)
    cv_fit$lambda.min
    cv_fit$lambda.1se

    coef.min = coef(cv_fit, s = "lambda.1se")

    pred_min_value2 <- predict(cv_fit, s=cv_fit$lambda.min, newx=x.test,type="link")

非常感谢您提供的任何帮助。

【问题讨论】:

    标签: r glmnet cox-regression hazard


    【解决方案1】:

    glmnet.basesurv 函数是 hdnom 包(在 CRAN 上可用)的一部分,而不是 glmnet 本身。所以安装它,然后调用它。

    【讨论】:

    • 谢谢。我安装了 hdnom 软件包,但仍然无法正常工作。 glmnet.basesurv(time, event, pred_min_value2, times.eval = 30, centered = FALSE) 错误:找不到函数“glmnet.basesurv”我需要安装任何其他软件包吗?奇怪的是,我可以从这个网页(rdocumentation.org/packages/hdnom/versions/4.6)找到函数 glmnet.basesurv。
    【解决方案2】:

    我有类似的问题,在安装 hdnom install.packages("hdnom") 后,如果你检查功能列表 library(help = "hdnom") 可以看到函数其实是glmnet_survcurve()。我让它以hdnom:::glmnet_survcurve() 工作,示例在这里:

    S <- Surv(data$survtimed, data$outcome)
    X_glm<-model.matrix(S~.,data[, c("factor1", "factor2")])
    cox_model <- glmnet(X_glm, S, family="cox", alpha=1, lambda=0.2)
    times = c (1,2) #for predict of survival and 
    linearpredictors at times = 1 and 2
    predictions = hdnom:::glmnet_survcurve(cox_model, S[,1], S[,2], X_glm, survtime = times)
    predictions$p[,1] #survival probability at time 1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-22
      • 1970-01-01
      • 1970-01-01
      • 2015-12-24
      • 1970-01-01
      • 2021-12-01
      • 2012-03-09
      • 1970-01-01
      相关资源
      最近更新 更多