计算条件推理树的偏差

时间:2015-06-26 16:21:54

标签: r party goodness-of-fit

我正在尝试使用条件推理树(通过包partykit)作为归纳树,其目的仅仅是描述而不是预测个别情况。例如,根据Ritschard hereherethere,可以通过交叉表比较关系中响应变量的实际和估计分布来估计偏差度量可能的基于预测变量的配置文件,即所谓的 ^ TT 和表。 我想使用偏差和其他推导的统计数据作为ctree()函数获得的对象的GOF度量。我正在向自己介绍这个主题,我非常欣赏一些输入,例如一段R代码或关于可能参与编码的ctree对象结构的一些方向。 我一直认为自己可以从头开始获得目标和预测表,然后计算偏差公式。我承认自己对如何继续行事没有信心。

事先非常感谢!

1 个答案:

答案 0 :(得分:2)

首先介绍一些背景信息:我们已讨论为deviance()个对象添加logLik()ctree方法。到目前为止,我们还没有这样做,因为条件推理树与特定的损失函数甚至可能性无关。相反,仅通过使用某些影响和回归变换的条件推理测试来评估响应和分区变量之间的关联。但是,对于默认的回归和分类情况,偏差或对数似然的度量在实践中可能是一个有用的补充。所以我们可能会在将来的版本中添加这些方法。

如果您想考虑与正式偏差/可能性相关的树,您可以考虑使用通用mob()框架或lmtree()glmtree()便利功能。如果仅指定了分区变量(并且在每个节点中不再使用其他回归器),则与ctree()相比,这些树通常会导致非常相似的树。但是你也可以使用AIC()等。

但回到原来的问题:如果你看模型响应和拟合响应,你可以相当容易地计算偏差/对数似然或其他损失函数。或者,您可以提取指示终端节点的factor变量并重新设置线性或多项模型。这将具有相同的拟合值,但也提供deviance()logLik()。下面,我使用您在运行airct时获得的irisctexample("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中有关回归和分类树与广义线性模型之间关系的讨论。