3

我将多重逻辑回归称为如下:

step_1 <- glm(CD3LR ~ alb + surg + ASA_opt + BMI + bil + Hb_cat + MDRD + sex + DM
              + age + Path + Smoking,
              na.action = na.exclude, family = binomial)

当我想通过创建 ROC 曲线来测试模型时,我使用 pROC 包并调用:

roc(CD3LR, step_1$fitted.values, plot=FALSE)

但是,这会返回错误:

> roc(CD3LR, step_1fitted.values, plot=FALSE) 
Setting levels:control=0,case=1
Error in roc.default(CD3LR,step_1fitted.values, plot = FALSE) : 
  Response and predictor must be vectors of the same length.

我认为这是因为该MDRD变量有 3 个缺失值,并且因为我使用它导致的结果比我得到的na.exclude少 3 个step_1$fitted.valuesCD3LR

CD3LR有没有办法只使用对应的值来生成 ROC 曲线step_1$fitted.values

非常感谢任何帮助!

4

2 回答 2

2

您的直觉是正确的,某些值已被过滤掉na.action=na.exclude

通常我会建议使用该predict函数来获得对数据的新预测。它们看起来像这样:

> predict(step_1)
1           2           3           4           5           6           7   ...
NA          NA  1.04059269  0.60248768  0.81502210  0.23992288  0.08421514  ...

如您所见,MDRD 中的缺失值会产生一个NA,而不是被删除。

然后,您可以将这些预测直接提供给 roc 函数:

roc(CD3LR, predict(step_1))
于 2020-02-05T20:03:46.450 回答
1

我注意到你在环境中拥有所有变量,例如像这样,下面我介绍性别的 3NA 和 BMI 的 2 NA,

CD3LR = as.numeric(runif(100)>0.5)
alb = rnorm(100)
surg = sample(1:3,100,replace=TRUE)
ASA_opt = rpois(100,50)
BMI = c(NA,NA,rpois(98,100))
bil = rnorm(100)
Hb_cat = sample(1:3,100,replace=TRUE)
MDRD = runif(100)
sex = c(sample(c("M","F"),98,replace=TRUE),NA,NA)
DM = rnorm(100)
age = sample(20:60,100,replace=TRUE)
Path = rnorm(100)
Smoking = sample(c("Yes","NI"),100,replace=TRUE)

所以最好将它们全部放入一个data.frame中,进行拟合,然后进行roc曲线:

DataFrame = data.frame(
CD3LR,alb,surg,ASA_opt,BMI,bil,Hb_cat,
MDRD,sex,DM,age,Path,Smoking) 

step_1<-glm(CD3LR~alb+surg+ASA_opt+BMI+bil+Hb_cat+MDRD+sex+DM+age+Path+Smoking,
data=DataFrame,na.action=na.exclude,family=binomial)

感谢@Calimo 指出,您还可以使用:

step_1<-glm(CD3LR~.,
data=DataFrame,na.action=na.exclude,family=binomial)

这会给你错误:

roc(DataFrame$CD3LR,step_1$fitted.values,plot=FALSE)

我们可以做的:

roc(step_1$y,step_1$fitted.values,plot=FALSE)

或者:

roc(DataFrame[complete.cases(DataFrame),"CD3LR"],step_1$fitted.values,plot=FALSE)

拥有数据框的原因是您可以立即看到所有非 NA 的完整数据集。如果您在预测变量或响应中有任何 NA,则不会在回归中使用它。

于 2020-02-05T15:03:15.673 回答