biomod2包BIOMOD_Modeling()调用GBM算法时维度错误求助
biomod2包调用GBM算法报错「incorrect number of dimensions」的解决方法
问题背景
使用biomod2 4.2-3版本构建Acacia confusa的物种分布模型,调用GBM算法时出现「incorrect number of dimensions」错误,但相同数据下GLM、GAM算法可正常运行。
数据情况
物种数据
Acacia confusa的存在/缺失数据(1=存在,0=缺失),共7796个样地,无NA值:
> dim(test_spe) [1] 7796 1 > head(test_spe) # A tibble: 6 x 1 `Acacia confusa` <dbl> 1 0 2 0 3 0 4 0 5 0 6 1
环境数据
仅包含年平均温度(MAT)变量,共7796个样地:
> dim(test_env) [1] 7796 1 > head(test_env) MAT 1 19.08279 2 19.08279 3 19.08279 4 20.02513 5 19.08279 6 17.25201
建模准备与报错详情
数据格式化与参数设置
data4biomod = BIOMOD_FormatingData( resp.var = test_spe, expl.var = test_env, resp.name = "Acacia.confusa" ) settings4biomod = BIOMOD_ModelingOptions() # 使用默认设置
建模调用与错误
执行GBM建模时触发错误:
biomod = BIOMOD_Modeling( bm.format = data4biomod, modeling.id = "testing", models = c("GBM"), bm.options = settings4biomod, nb.rep = 1, data.split.perc = 100 # 不预留验证数据 )
错误信息:
Error in x[i.train, , drop = TRUE][i, , drop = FALSE] : incorrect number of dimensions Error in h(simpleError(msg, call)) : 在為 'predict' 函式選擇方法時評估 'object' 引數發生錯誤: object 'model.bm' not found *** inherits(g.pred,'try-error') ! Note : Acacia.confusa_allData_allRun_GBM failed!
问题原因
当仅使用单个环境变量时,biomod2默认的GBM交叉验证(cv.folds=3)在处理数据时会将环境变量降维为向量,导致后续索引操作时维度不匹配,触发错误。而GLM、GAM的内部数据处理逻辑不受单变量影响,因此可正常运行。
解决方案
修改GBM的建模选项,关闭交叉验证(因已设置data.split.perc=100,无需额外交叉验证):
# 自定义GBM建模参数,关闭交叉验证 settings4biomod = BIOMOD_ModelingOptions( GBM = list( cv.folds = 0, # 关闭交叉验证 n.trees = 2500, # 保留默认树数量 interaction.depth = 3,# 保留默认交互深度 shrinkage = 0.001, # 保留默认学习率 bag.fraction = 0.5 # 保留默认袋分数 ) ) # 重新执行建模 biomod = BIOMOD_Modeling( bm.format = data4biomod, modeling.id = "testing", models = c("GBM"), bm.options = settings4biomod, nb.rep = 1, data.split.perc = 100 )
验证
修改参数后,GBM模型可正常训练,不会再触发维度错误。
内容的提问来源于stack exchange,提问作者HsunHung Chu
相关产品推荐
相关产品推荐

