1

我正在尝试使用 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

再次非常感谢您提供的任何帮助或见解!

4

0 回答 0