1

我正在尝试使用 dismo 包创建 BRT 模型。当我按照 cran 教程简化我的模型,然后尝试重新指定它时,我收到一条错误消息:“数据错误 [,gbm.x,drop = FALSE]:维度数不正确”。

我不确定问题是什么,任何帮助将不胜感激。

> BRTsynoptic <- gbm.step(data=synoptic, gbm.x = 2:14,      gbm.y = 1,
 family = "bernoulli", tree.complexity = 10,
learning.rate = .001, bag.fraction = 0.75)
summary(BRTsynoptic)
#simplify the model
synoptic.simp <- gbm.simplify(BRTsynoptic, n.drops = 5)
#assign new model with simplification
synopticss.simp <- gbm.step(BRTsynoptic,
gbm.x=synoptic.simp$pred.list[[4]], gbm.y=1,
                               tree.complexity=10,learning.rate=0.001)
4

1 回答 1

0

如果您查看 synoptic.simp$final.drops,它是一个数据框。请参阅下面的可重现示例:

library(dismo)
data(Anguilla_train)
Anguilla_train = Anguilla_train[1:200,]

mdl <- gbm.step(data=Anguilla_train, gbm.x = 3:14, 
gbm.y = 2, family = "bernoulli",
tree.complexity = 10, learning.rate = 0.001, bag.fraction = 0.75)
train.simp <- gbm.simplify(mdl, n.drops = 5)

train.simp$final.drops
        preds order
1       DSDam     1
2  USRainDays     2
3     USSlope     3
4  SegLowFlow     4
5    SegTSeas     5
6     SegSumT    NA
7      DSDist    NA
8  DSMaxSlope    NA
9      USAvgT    NA
10   USNative    NA
11     Method    NA
12     LocSed    NA

要重新运行您的模型,您需要在第二列中取出作为 NA 的 preds:

var_names = with(train.simp$final.drops,preds[which(is.na(order))])
idx = match(var_names,colnames(Anguilla_train))

mdl.simp <- gbm.step(Anguilla_train,
gbm.x=idx, gbm.y=2,
tree.complexity=10,learning.rate=0.001)
于 2020-03-03T15:57:12.337 回答