【问题标题】:R: How to read Nomograms to predict the desired variableR:如何阅读 Nomograms 来预测所需的变量
【发布时间】:2016-07-09 00:05:53
【问题描述】:

我正在使用 Rstudio。我使用以下代码(从documentation 的示例代码复制)使用包rms 中的函数nomogram 创建了列线图:

library(rms)
n <- 1000    # define sample size
set.seed(17) # so can reproduce the results
age            <- rnorm(n, 50, 10)
blood.pressure <- rnorm(n, 120, 15)
cholesterol    <- rnorm(n, 200, 25)
sex            <- factor(sample(c('female','male'), n,TRUE))


# Specify population model for log odds that Y=1
L <- .4*(sex=='male') + .045*(age-50) +
  (log(cholesterol - 10)-5.2)*(-2*(sex=='female') + 2*(sex=='male'))
# Simulate binary y to have Prob(y=1) = 1/[1+exp(-L)]
y <- ifelse(runif(n) < plogis(L), 1, 0)


ddist <- datadist(age, blood.pressure, cholesterol, sex)
options(datadist='ddist')


f <- lrm(y ~ lsp(age,50)+sex*rcs(cholesterol,4)+blood.pressure)
nom <- nomogram(f, fun=function(x)1/(1+exp(-x)),  # or fun=plogis
    fun.at=c(.001,.01,.05,seq(.1,.9,by=.1),.95,.99,.999),
    funlabel="Risk of Death")
#Instead of fun.at, could have specified fun.lp.at=logit of
#sequence above - faster and slightly more accurate
plot(nom, xfrac=.45)

结果:

此代码生成列线图,但没有连接每个比例的线(称为等值线)以帮助从图中预测所需变量(“死亡风险”)。通常,列线图具有预测的等值线 (example from wikipedia)。但是在这里,我如何预测变量值?

编辑:

来自文档:

列线图没有表示总和的线,但它有一个 读取评分点的参考线(默认范围 0--100)。一次 读者手动对分数进行合计,预测值可以是 在底部阅读。

我不明白这一点。从点的规模来看,似乎应该在没有等值线的情况下进行预测。但如何?有人可以用这个例子详细说明我如何阅读列线图来预测所需的变量吗?非常感谢!

编辑 2(仅供参考):

在赏金的描述中,我说的是等值线。开始赏金时,我不知道nomogram 函数不提供等值线,而是有积分比例。

【问题讨论】:

  • 为了获得最优质的答案,我建议使用内置数据集重写问题。 stackoverflow.com/help/mcve 此外,强烈建议您将自己限制为每个问题一个问题。还有一件事——禁止请求外部材料的链接。
  • 顺便说一句,您从哪里读到应该能够使用列线图对象进行预测?如果这不是该功能的设计目的,那么这不是它的设计目的。不过,您应该能够使用 logit 回归进行预测。此外,您想要的是带有 isoplethparallel-scale 列线图。
  • @Hack-R 我已更改代码以使用内置数据集并删除了关于预测的第二个问题。
  • @Hack-R 我还添加了指向文档的链接,以确认可以通过列线图进行预测。感谢您的投入。我认为现在应该删除反对票。

标签: r regression


【解决方案1】:

从文档中,列线图用于手动获取预测:

在图的顶部(超过总分)

  • 您为患者的每个变量画一条垂直线(例如,年龄=40、胆固醇=220(和性别=男性)、血压=172)
  • 然后将您在分数表上读取的三个值相加 (40+60+3=103) 以获得总分。
  • 最后,您在总分刻度 (103) 上画一条垂直线来读取死亡风险 (0.55)。

【讨论】:

  • 有什么方法可以像predict 那样做吗?类似(虚构):predict(nomogram_model, newdata = data, type = "survival")... 我的意思是,我如何为每个变量指定一些值,然后获得确切死亡风险(或 X 时间的生存)?
  • 嗨@jgarces,我认为您可以使用f 模型中的Predict 函数,如下所示:Predict(f, age=40, cholesterol=220, sex='male', blood.pressure=172,fun=function(x)1/(1+exp(-x)))
【解决方案2】:

这些是回归列线图,其工作方式与经典列线图不同。经典的列线图将执行完整的计算。对于这些列线图,您从每个预测变量中拖出一条线到底部的刻度,然后添加您的结果。

在回归模型上使用经典的“等波列”列线图的唯一方法是 1 只有两个预测变量或 2 具有复杂的多步列线图。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    相关资源
    最近更新 更多