我正在尝试使用 BRT 分析来拟合和测试模型,但我一直遇到完全分离的错误。我尝试了多种方法来克服这个问题,但无济于事。我通过logistf使用了一种惩罚回归,对模型进行了贝叶斯先验,省略了我认为导致过度拟合的变量,使用log1p转换了我所有的倾斜预测变量,并根据Coadou,2013完全忽略了它(http:// www.epj-conferences.org/articles/epjconf/pdf/2013/16/epjconf_sos2012_02004.pdf)建议在 BRT 训练模型中过度拟合不会造成大问题。
在她的文章中,她指出,导致训练数据完美拟合的树对测试样本的最终提升输出贡献很小。然而,即使我忽略完全分离并尝试预测我的评估数据(我试图将我的模型拟合到 2000 点,并在剩余的 11,141 点上对其进行测试),我的绘图仍然是空白的(Elith 等人的图 2 . 2008)。
我读过的文章都没有专门讨论克服 BRT 中完全分离的解决方案,这让我认为可能有一个我不知道的替代解决方案来解决这个问题。
我有一个非常大的数据集(13,141 个点),其中包含一个二元响应变量和 16 个协变量。我还尝试仅使用 5 个协变量来拟合模型并遇到了同样的问题。任何帮助都将不胜感激。我附上了我的数据的头部给你一个想法。
Hotspot_Resp Dist_Build Dist_River Dist_Road Dist_Underpro Aspect
0 935 1074 18396 335 303.69
0 893 1112 18355 299 176.50
0 884 1133 18335 298 176.50
0 849 1208 18261 297 175.10
0 856 1216 18254 310 175.10
0 1212 1501 18021 827 215.54
Soil_Type OPP_Class Elevation Dist_Forest Build_Density Dist_Fence
2 1 3.218876 5.659482 9.360116 8.180601
2 1 2.995732 5.673323 9.360116 8.179480
2 1 2.995732 5.730100 9.360116 8.174985
2 1 2.079442 5.908083 9.360116 8.161090
2 1 2.079442 5.945421 9.360116 8.156797
2 1 2.564949 6.523562 9.254766 7.988204
DistGC Dist_Clear Slope Canopy_Cov No_Canopy
5.424950 0 1.0152307 0 3
5.204007 0 1.4678743 0 3
5.117994 0 1.4678743 0 3
4.753590 0 1.5748465 0 3
4.804021 0 1.5748465 0 3
5.863631 0 0.9895412 0 3
请原谅嘈杂的变量名!我的响应变量“Hotspot_Resp”是二进制的;“Canopy_Cov”、“No_Canopy”、“Soil_Type”和“OPP_Class”是分类变量。其中许多变量是 log1p 或 log 转换的,但为简单起见,我在此处保留了原始列名。
无论我尝试什么,每次我尝试拟合以下模型时:
gbm.step(data=training.model1, gbm.x=2:16, gbm.y=1,
family="bernoulli", tree.complexity=5, learning.rate=0.01,
bag.fraction=0.5)
它运行交叉验证过程,但我得到:
Warning messages:
1: glm.fit: algorithm did not converge
2: glm.fit: fitted probabilities numerically 0 or 1 occurred
请注意:根据 Elith 等人的第一个步骤之一。BRT 的 2008 年教程是检查响应变量的总和。我可以实现这一点的唯一方法是将 Hotspot_Resp 设置为数字,中间步骤将其设置为字符。当 Hotspot_Resp 设置为数字时,我能够成功执行模型拟合(尽管完全分离)。但是,当我设置因素时,我收到以下信息:
Error in while (delta.deviance > tolerance.test & n.fitted < max.trees) { :
missing value where TRUE/FALSE needed
In addition: There were 44 warnings (use warnings() to see them)
> warnings()
Warning messages:
1: In mean.default(y.data) : argument is not numeric or logical: returning NA
2: In Ops.factor(y.data, site.weights) : '*' not meaningful for factors
再次非常感谢您提供的任何帮助或见解!