我在R版本3.2.2中拟合了一个Boosted回归模型,我的所有变量都是数字,但由于这个错误我无法继续#34;总错误.deviance / n.cases:non - 二元运算符的数字参数"。我的数据结构如下:
str(uffe.data)
'data.frame': 1437 obs. of 7 variables:
$ uffespeed : num 0.162 0.298 0.317 0.261 0.759 ...
$ uffepike : num 0.419 0.419 0.419 0.419 0.419 ...
$ uffeslope : num 1.863 2.374 1.647 2.003 0.737 ...
$ uffepop0999: num 15.6 15.6 15.6 15.6 15.6 ...
$ uffedwater : num 359 2778 3112 2310 2726 ...
$ uffedtown : num 14139 11713 11330 12020 11654 ...
$ ufferoads : num 0 0 0 0 0 0 0 0 0 0 ...
我的模特是:
uffebrt <- gbm.step(data=uffe.data, gbm.x = 2:7,
gbm.y = 1, family = "gamma", tree.complexity = 5,
learning.rate = 0.01,bag.fraction = 0.5)
执行过早结束如下:
Length Class Mode
0 NULL NULL
GBM STEP - version 2.9
Performing cross-validation optimisation of a boosted regression tree model
for uffespeed with dataframe uffe.data and using a family of gamma
Using 1437 observations and 6 predictors
Error in total.deviance/n.cases : non-numeric argument to binary operator
我哪里错了?
答案 0 :(得分:1)
gbm.step
包中的dismo
功能允许family
成为:'bernoulli'
,'binomial'
,'poisson'
,{{1}之一},或'laplace'
。如果您提供的家庭不是其中之一,则由'gaussian'
调用的calc.deviance
会引发以下错误:
gbm.step
您的错误消息表明Error in calc.deviance(y_i, u_i, weights = site.weights, family = family, :
unknown family, should be one of: "binomial", "bernoulli", "poisson", "laplace", "gaussian"
未按预期抛出该错误,因为calc.deviance
(在您的错误消息中引用)在调用{{1}后(直接)出现} total.deviance/n.cases
的来源。
该错误导致calc.deviance
或gbm.step
中的一个或另一个是非数字的。从查看来源我们可以安全地假设它不是total.deviance
,.这会留下n.cases
,这是n.cases
调用的结果。我的猜测是,出于某种原因,total.deviance
正在为calc.deviance
分配一个字符串。
我无法解释为什么会发生这种情况,但是根据您的意见,我怀疑使用其中一个接受的家庭将解决您的问题。你在新的R会话中得到错误吗?也许如果您从CRAN重新安装calc.deviance
,它可能会按预期运行。
为了将来参考,total.deviance
函数对于探索这些问题非常有用,因为它允许您逐步浏览源,检查在任何点创建的对象。
作为旁注,打印到屏幕上的信息错误地表明可能支持gamma系列,因为它显示:
dismo
但请考虑以下提供的debug
以及随后的消息:
## Performing cross-validation optimisation of a boosted regression tree model
## for uffespeed with dataframe uffe.data and using a family of gamma
在执行错误检查之前打印消息,这有点误导。但至少在我的情况下,我也看到了:
family