我需要根据有序多项Logit回归绘制带有拟合与残差值的分级残差图。
使用polr时如何提取残差?是否还有其他函数可以运行多项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'。
由于
答案 0 :(得分:0)
首先,您能告诉我们对于具有分类响应的模型,如何定义残差原则? fitted.values
是概率矩阵。您可以根据正确的预测定义残差(将最可能的结果定义为预测,如predict
对象的默认polr
方法) - 或者您可以计算n-by-n表真值和预测值。或者,您可以将序数数据减少回整数,并计算平均结果作为预测...但我看不出有任何独特的方法来定义残差。
答案 1 :(得分:0)
在polr()中,没有返回残差的函数。您应该使用其定义手动计算它。
答案 2 :(得分:0)
实际上有很多方法可以从序数 probit/logit 中获取残差。尽管 polr
不提供任何残差,但 vglm
提供了几个。请参阅 ?residualsvglm
包中的 VGAM
(另见下文)。
注意:但是,对于控制函数/2SRI 方法,Wooldridge (2014) 建议使用 Vella (1993) 中描述的广义残差。据我所知,这些目前在 R
中不可用,虽然 I am working on that,但它们在 Stata 中(使用 predict gr, score
)
您可以使用包 sure
(link),通过 resids
计算代理残差。该软件包基于 this paper,美国统计协会杂志。
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
):
"注意:代理残差需要从连续分布中采样;因此,每次调用 resids 的结果都会不同。当 method = "latent" 时,用于从截断分布中采样的内部函数基于修改rtrunc 和 qtrunc 的版本。”
即使运行 resids(mod1, nsim=1000, method="latent")
,结果也没有收敛。