在r中使用LogisticDx包中的gof()函数时出错

时间:2016-03-28 15:35:36

标签: r logistic-regression

您好我在尝试使用LogisticDx包中的gof()函数时收到以下错误消息。

因子误差(G,标签= dx1 [,格式(max(P),digits = 3),by = G] $ V1): 无效的标签&#39 ;;长度6应为1或5

我无法弄清楚导致此错误的原因。您可以找到导致错误的代码以及下面的代码。 如果您需要更多信息,请告诉我

ħ

R版本和加载的库

R版本3.2.3(2015-12-10) 平台:x86_64-pc-linux-gnu(64位) 运行于:Ubuntu 15.04

附加基础包: [1] stats graphics grDevices utils数据集方法库

其他附件包:  [1] ROCR_1.0-7 gplots_2.17.0 LogisticDx_0.2 xtable_1.8-2 pander_0.5.2
 [6] plyr_1.8.3 Amelia_1.7.4 mice_2.25 Rcpp_0.11.6 knitr_1.11

产生错误的代码

PD <- c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
        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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0, 0, 0)
E <- c(4, 4, 3, 1, 0, 5, 1, 5, 5, 5, 1, 5, 4, 2, 1, 1, 1, 1, 5,
       0, 5, 5, 5, 5, 0, 0, 4, 5, 2, 4, 5, 4, 5, 3, 0, 5, 3, 3,
       5, 2, 4, 0, 0, 5, 1, 0, 3, 2, 5, 1, 2, 4, 0, 2, 5, 5, 4,
       3, 5, 2, 0, 2, 0, 1, 0, 5, 2, 0, 3, 0, 0, 0, 1, 0, 0, 2,
       3, 0, 0, 1, 0, 0, 0, 0, 0, 2, 0, 1, 3, 0, 2, 0, 3, 0, 0,
       0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 2, 0, 0,
       0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 2, 1, 0, 0)

test.data <- data.frame(PD,E)
factor(test.data$PD)

g.error <- gof(glm(PD ~ E,family=binomial,data=test.data),plot=FALSE)

有效的代码

data(uis)
g.works <- gof(glm(RACE ~ NDRGTX,family=binomial,data=uis),plot=FALSE)

2 个答案:

答案 0 :(得分:1)

问题出现在源代码的第397行 https://github.com/dardisco/LogisticDx/blob/master/R/gof.R

### Hosmer-Lemeshow
    ## sort by probability
    dx1 <- dx1[order(P), ]
    ## base group size
    gs1 <- dx1[, sum(n) %/% g] # Line 393
    g1 <- rep(gs1, g)
    ## remainer
    mod1 <- dx1[, sum(n) %% g]
    g1[seq(1, g-1, by=g/mod1)] <- gs1 + 1 # Line 397

这里seq(1,g-1,by = g / mod1)的长度不一定等于393行除法的剩余量,使得和(g1)不等于n(ex n = 129,g = 10)。这会导致第399行的错误

dx1[, "G" := factor(G,
              labels=dx1[, format(max(P), digits=3), by=G]$V1)]

由于当n = 129且g = 10时,最后一个dx1 [129,G]为NA。解决方案可能是

g1[seq(1, mod1, by = 1)] <- gs1+1

答案 1 :(得分:0)

此处的问题与正在进行的Hosmer-Lemeshow测试中的组数有关。 gof的默认参数似乎是g=10,这似乎不适用于129次观察(如果再添加一行,它会起作用)。 如果将组数设置为9,它应该可以工作。

gof(glm(PD ~ E,family=binomial,data=test.data), plot=FALSE, g=9)

也许其他人可以回答为什么就是这种情况?