【问题标题】:How to get the calibration plot of a multivariable logistic regression model (glm)?如何获得多变量逻辑回归模型(glm)的校准图?
【发布时间】:2020-01-12 05:09:33
【问题描述】:

我有以下模型并计算了预测概率: (所有变量都是二进制 (0, 1) 除了 AED_pre 是数字 (0:4)

modelfit <-glm(engelone ~ generalized + SEEG+ Aura + AED_pre + MS, data=data)
summary(modelfit)
prob <-predict(modelfit, type = c("response"))

我使用 SPSS 获得 ROC 曲线,但我仍然需要校准图(+bootstrapping)。我试过了:

val <- val.prob(data$prob, data$engelone, pl = TRUE)

但我收到此错误:

Error in qlogis(p) : Non-numeric argument to mathematical function

我该怎么办?谢谢!

这是我的数据:

structure(list(generalized = c(0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 
0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 
0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 
1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 
0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 
0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 
0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 
0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 
0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 
1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 
1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 
1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 
0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0), Aura = c(0, 0, 1, 0, 0, 
0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 
1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 
0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 
0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 
0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 
1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 
1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 
1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 
0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 
0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 
1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 
1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 
0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 
1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 
0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0), AED_pre = c(0, 
0, 3, 3, 3, 3, 2, 4, 4, 4, 3, 2, 5, 3, 2, 2, 2, 4, 5, 2, 2, 4, 
5, 4, 3, 4, 3, 4, 3, 3, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 4, 2, 
2, 3, 4, 3, 3, 2, 3, 4, 3, 5, 2, 3, 1, 2, 4, 3, 3, 4, 3, 3, 3, 
2, 6, 3, 2, 3, 2, 3, 1, 3, 3, 2, 3, 1, 3, 4, 2, 4, 3, 2, 2, 3, 
1, 4, 1, 3, 2, 2, 3, 3, 3, 4, 4, 2, 3, 4, 3, 3, 3, 2, 2, 5, 3, 
2, 2, 3, 4, 3, 3, 4, 4, 4, 2, 0, 3, 2, 4, 3, 2, 2, 5, 4, 4, 0, 
3, 2, 4, 6, 4, 3, 4, 3, 2, 4, 4, 2, 3, 3, 4, 3, 2, 3, 3, 1, 2, 
3, 2, 3, 3, 2, 4, 1, 2, 4, 3, 5, 3, 3, 4, 2, 4, 2, 4, 3, 4, 4, 
4, 2, 2, 3, 2, 4, 2, 2, 4, 3, 3, 3, 3, 2, 2, 3, 3, 2, 3, 2, 2, 
4, 3, 3, 3, 4, 3, 3, 2, 2, 3, 3, 3, 3, 2, 2, 5, 4, 3, 4, 4, 3, 
2, 4, 3, 2, 2, 2, 3, 3, 1, 2, 4, 3, 2, 2, 1, 2, 4, 3, 2, 3, 3, 
3, 0, 3, 3, 2, 2, 2, 3, 2, 1, 3, 2, 2, 3, 3, 3, 2, 2, 4, 2, 3, 
3, 2, 2, 2, 3, 2, 3, 3, 4, 2, 1, 2, 2, 4, 2, 4, 4, 3, 1, 4, 2, 
4, 4, 3, 4, 2, 2, 5, 2, 2, 3, 3, 4, 0, 4, 2, 4, 1, 3, 1, 3, 3, 
2, 3, 3, 3, 3, 3, 4, 4, 3, 2, 2, 3, 2, 2, 3, 3, 2, 2, 3, 3, 3
), SEEG = c(1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 
1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 
1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 
0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 
1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 
1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 
1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 
0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 
0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 
1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 
1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 
1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 
1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0), MS = c(0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 
0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 
1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 
0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 
1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 
0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 
0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 
1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 
0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 
0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 
1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 
0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 
0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 
1, 1, 0, 0, 0, 1, 0, 0, 0), engelone = c(1, 1, 0, 0, 1, 1, 1, 
1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 
1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 
0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 
1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 
0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 
0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 
0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 
0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 
1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 
1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 
1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 
0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1)), .Names = c("generalized", 
"Aura", "AED_pre", "SEEG", "MS", "engelone"), row.names = c(NA, 
-316L), class = c("tbl_df", "tbl", "data.frame"))

【问题讨论】:

  • 你能dput()你的输入数据吗?
  • 刚刚做了-关于最初的问题

标签: r glm calibration rms


【解决方案1】:

也许您必须查看数据库中有哪些变量类,您可以使用 class() 查看它,并确保您有数字或因子变量。可以试试这个。

【讨论】:

  • 谢谢!我做到了。所有数字:/```类(数据$engelone)类(数据$generalized)类(数据$Aura)类(数据$SEEG)类(数据$MS)类(数据$AED_pre)[1]“数字”[ 1]“数字”[1]“数字”[1]“数字”[1]“数字”[1]“数字”```
  • 我看到了一些罕见的东西,因为当我在 R 中尝试它时,它转向我一个错误,即 base$prob 不存在,这是真的,你必须使用 val.prob(prob, data$ engelone, pl = TRUE) 而不是 val.prob(data$prob, data$engelone, pl = TRUE) 当我运行它时,他转向我,与参数 4 相关的错误是 NA,这将是因为 val.prob () 函数需要一些额外的参数,你可以在示例中看到它,如果你把 ?val.prob() 像这样 val.prob(phat, y[101:200], m=20, cex=.5) # subgroups 20个。或者这个 val.prob(phat, y[101:200], group=x1[101:200], g.group=2)
猜你喜欢
  • 1970-01-01
  • 2014-06-08
  • 2017-07-25
  • 2014-06-20
  • 2020-08-26
  • 2018-07-08
  • 2020-08-06
  • 2016-03-08
  • 1970-01-01
相关资源
最近更新 更多