Остатки и графики в упорядоченной полиномиальной регрессии

Мне нужно построить бинарный остаточный график с подобранными остаточными значениями из упорядоченной многономинальной логит-регрессии.

Как я могу извлечь остатки при использовании polr? Существует ли какая-либо другая функция, выполняющая многономенклатурный логит, в которой можно извлечь остатки?

Это код, который я использовал

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'.

Спасибо


person user1172558    schedule 11.02.2012    source источник
comment
Могу ли я взглянуть на данные? (Я не смогу ответить, потому что я не так хорошо знаю R, но я хотел бы повторить, чтобы узнать) спасибо   -  person moldovean    schedule 11.02.2012
comment
@moldovean, на странице справки пакета MASS для функции polr есть несколько примеров наборов данных.   -  person Ben Bolker    schedule 11.02.2012
comment
Гельман и Хилл предлагают способ расчета остатков для порядковых логистических регрессий. Они рассчитывают средневзвешенное значение для каждого случая на основе точек отсечки, рассчитывают остатки, а затем группируют эти отклонения для графического представления.   -  person peppygraybeal    schedule 19.08.2018


Ответы (3)


Для начала, можете ли вы рассказать нам, как остатки будут определяться в принципе для модели с категориальными ответами? fitted.values — матрица вероятностей. Вы можете определить остатки с точки зрения правильного прогноза (определив наиболее вероятный результат как прогноз, как в методе predict по умолчанию для polr объектов) или вы можете вычислить таблицу n на n истинных значений и прогнозируемых значений. В качестве альтернативы вы можете уменьшить порядковые данные обратно до целочисленной шкалы и вычислить средний результат в качестве прогноза ... но я не вижу, чтобы в первую очередь существовал какой-либо уникальный способ определить остатки.

person Ben Bolker    schedule 11.02.2012
comment
Я знаю, что это действительно старый ответ, но я увидел, что вы все еще активны в стеке ... поэтому я решил попробовать. Я хотел бы использовать функцию управления (CF) / двухступенчатое остаточное включение (2SRI) с polr на первой ступени. Мне было интересно, подойдут ли какие-либо из ваших различных предложений о том, как рассчитать остатки от polr, для этой цели (подход 2SLS должен был бы включать подобранные значения polr, но результат будет непоследовательным при имитации 2SLS, и я не знаю никакого программного обеспечения, которое напрямую выполняет порядковый-2SLS). - person Tom; 06.04.2021
comment
Я разместил вопрос о своем комментарии на CrossValidated: -ones-to-get" title="как получить остатки от порядкового логит-пробита и какие из них получить">stats.stackexchange.com/questions/518535/ - person Tom; 07.04.2021

В polr() нет функции, которая возвращает остаток. Вы должны вручную вычислить его, используя его определение.

person Jongwon Kim    schedule 20.02.2018

На самом деле существует множество способов получить остатки от порядкового пробит/логита. Хотя polr не дает никаких остатков, vglm дает несколько. См. ?residualsvglm из пакета VGAM (см. также ниже).

ПРИМЕЧАНИЕ. Тем не менее, для подхода Control Function/2SRI Wooldridge (2014) предлагает использовать обобщенные невязки, как описано в Vella (1993). Насколько я знаю, в настоящее время они недоступны в R, хотя -point-for-observa">Я работаю над этим, но они в Stata (используя predict gr, score)

Остатки в VLGM

введите здесь описание изображения

Суррогатные остатки для опроса

Вы можете использовать пакет sure (ссылка), чтобы рассчитать суррогатные остатки с помощью resids. Пакет основан на этой статье, опубликованной в Journal of the American Статистическая ассоциация.

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. Внутренние функции, используемые для выборки из усеченных дистрибутивов, когда метод = латентный, основаны на модифицированных версиях rtrunc и qtrunc.

Даже при выполнении resids(mod1, nsim=1000, method="latent") сходимости результатов нет.

person Tom    schedule 10.04.2021