您好我在尝试使用LogisticDx包中的gof()函数时收到以下错误消息。
因子误差(G,标签= dx1 [,格式(max(P),digits = 3),by = G] $ V1): 无效的标签&#39 ;;长度6应为1或5
我无法弄清楚导致此错误的原因。您可以找到导致错误的代码以及下面的代码。 如果您需要更多信息,请告诉我
ħ
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)
答案 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)
也许其他人可以回答为什么就是这种情况?