4

我需要绘制一个分级残差图,其中包含来自有序多项 logit 回归的拟合残差值。

使用 polr 时如何提取残差?是否有任何其他运行 ord multinominal logit 的函数可以提取残差?

这是我使用的代码

options(contrasts = c("contr.treatment", "contr.poly"))
mod1 <- polr(as.ordered(y) ~ x1 + x2 + x3, data, method='logistic')

fit <- mod1$fitted.values
res <- residuals(mod1)
binnedplot(fit, res)

问题是对象“res”是“null”。

谢谢

4

3 回答 3

2

首先,您能否告诉我们原则上如何为具有分类响应的模型定义残差?fitted.values是一个概率矩阵。您可以根据正确的预测来定义残差(将最可能的结果定义为预测,就像在对象的默认predict方法中一样polr)——或者您可以计算一个真实值和预测值的 n×n 表。或者,您可以将序数数据减少回整数尺度并计算平均结果作为预测......但我看不出有任何独特的方法可以首先定义残差。

于 2012-02-11T18:31:25.377 回答
0

实际上有很多方法可以从序数 probit/logit 中获取残差。虽然polr不提供任何残差,但vglm提供了几个。?residualsvglm从包装中查看VGAM(另见下文)。

注意:但是,对于控制函数/2SRI 方法,Wooldridge (2014) 建议使用 Vella (1993) 中描述的广义残差。据我所知,这些目前在 中不可用R,虽然我正在努力,但它们在 Stata 中(使用predict gr, score

VLGM 中的残差

在此处输入图像描述

polr 的替代残差

您可以使用包sure链接)来计算代理残差resids。该软件包基于美国统计协会杂志上的这篇论文。

library(sure) # for residual function and sample data sets
library(MASS) # for polr function

df1 <- df1
df1$x1 <- df1$x
df1$x <- NULL
df1$y <- df2$y
df1$x2 <- df2$x
df1$x3 <- df3$x

options(contrasts = c("contr.treatment", "contr.poly"))
mod1 <- polr(as.ordered(y) ~ x1 + x2 + x3, data=df1, method='probit')

fit <- mod1$fitted.values
res <- resids(mod1)

编辑:一个大问题是以下(来自?resids):

"注意:代理残差需要从连续分布中采样;因此,每次调用残差的结果都会有所不同。当 method = "latent" 时,用于从截断分布中采样的内部函数基于 rtrunc 和 qtrunc 的修改版本。 "

即使在运行时resids(mod1, nsim=1000, method="latent"),也没有收敛的结果。

于 2021-04-10T16:50:30.090 回答
0

在 polr() 中,没有返回残差的函数。您应该使用其定义手动计算它。

于 2018-02-20T23:10:00.907 回答