首先是一些背景信息:我们已经讨论了对象的添加deviance()
或logLik()
方法ctree
。到目前为止,我们还没有这样做,因为条件推理树与特定的损失函数甚至可能性无关。相反,仅通过使用某些影响和回归量转换的条件推理测试来评估响应变量和分区变量之间的关联。但是,对于默认回归和分类情况,偏差或对数似然的度量在实践中可能是有用的补充。所以也许我们会在未来的版本中添加这些方法。
如果您想考虑与正式偏差/可能性相关的树,您可以考虑使用通用mob()
框架或lmtree()
便利glmtree()
功能。如果只指定了分区变量(并且没有在每个节点中使用更多的回归器),与ctree()
. 但是你也可以使用AIC()
等。
但回到你原来的问题:如果你查看模型响应和拟合响应,你可以相当容易地计算偏差/对数似然或其他损失函数。或者,您可以提取factor
指示终端节点的变量并重新拟合线性或多项模型。这将具有相同的拟合值,但也提供deviance()
和logLik()
。下面,我用运行时获得的airct
和irisct
树来说明这一点example("ctree", package = "partykit")
。
回归:高斯偏差只是残差平方和:
sum((airq$Ozone - predict(airct, newdata = airq, type = "response"))^2)
## [1] 46825.35
通过重新拟合为线性回归模型可以获得相同的结果:
airq$node <- factor(predict(airct, newdata = airq, type = "node"))
airlm <- lm(Ozone ~ node, data = airq)
deviance(airlm)
## [1] 46825.35
logLik(airlm)
## 'log Lik.' -512.6311 (df=6)
分类:对数似然只是观察到的类的预测对数概率之和。偏差是对数似然的 -2 倍:
irisprob <- predict(irisct, type = "prob")
sum(log(irisprob[cbind(1:nrow(iris), iris$Species)]))
## [1] -15.18056
-2 * sum(log(irisprob[cbind(1:nrow(iris), iris$Species)]))
## [1] 30.36112
同样,这也可以通过重新拟合为多项式模型来获得:
library("nnet")
iris$node <- factor(predict(irisct, newdata = iris, type = "node"))
irismultinom <- multinom(Species ~ node, data = iris, trace = FALSE)
deviance(irismultinom)
## [1] 30.36321
logLik(irismultinom)
## 'log Lik.' -15.1816 (df=8)
另请参阅https://stats.stackexchange.com/questions/6581/what-is-deviance-specifically-in-cart-rpart中的讨论,了解回归和分类树与广义线性模型之间的联系。