首先,我构建了一个模型,通过以下代码:
cf1 <- cforest(y~., data = DATA, strata = DATA$y, ntree = 200L, mtry = 10)
考虑到数据集非常不平衡(y=1
占全部观察值的7%),所以我在这里添加了 strata
,确保在装袋过程中不会忽略 y=1
的观察值。 cf1
在混淆矩阵方面运行正常。然而,当我尝试通过以下代码进行特征选择时:
cf1.imp_cond <- varimp(cf1, conditional = TRUE)
它返回了以下错误:
Error in x[strata == s] <- .resample(x[strata == s]) : NAs are not allowed in subscripted assignments
我无法理解这个错误的含义。之前有人遇到过这个问题吗?
—-更新
这是我从原始数据集中处理后的测试数据。以下是代码:
cf2 <- cforest(X5_years_survival~., data = test, strata = X5_years_survival, ntree = 200L, mtry = 6)cf2.imp_cond <- varimp(cf2, conditional = TRUE)
仍然,我得到了同样的错误:
Error in x[strata == s] <- .resample(x[strata == s]) : NAs are not allowed in subscripted assignments
—更新
错误发生在应用 kidids_node
函数时。
回答:
事实上,如果我保持所有 integer
类型的协变量,而不是通过 as.factor
转换它们,使用 varimp
就不会出现错误。