-1

我正在尝试使用条件推理树(通过 package partykit)作为归纳树,其目的仅仅是描述而不是预测个别情况。根据 Ritschard herethere说法,例如,可以通过交叉表比较响应变量的实际分布和估计分布与可能的基于预测变量的配置文件(所谓的^ TT和表格。我想使用偏差和其他派生统计作为 GOF 测量对象获得的对象ctree()功能。我正在向这个主题介绍自己,我非常感谢一些输入,例如一段 R 代码或关于ctree可能涉及编码的对象结构的一些方向。我认为自己可以从头开始获得目标表和预测表,然后计算偏差公式。我承认对如何进行完全没有信心。

提前非常感谢!

4

1 回答 1

3

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

如果您想考虑与正式偏差/可能性相关的树,您可以考虑使用通用mob()框架或lmtree()便利glmtree()功能。如果只指定了分区变量(并且没有在每个节点中使用更多的回归器),与ctree(). 但是你也可以使用AIC()等。

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

于 2015-06-27T10:58:25.513 回答