обратная функция «прогнозировать» - PullRequest
9 голосов
/ 16 ноября 2010

Используя predict(), можно получить прогнозируемое значение зависимой переменной (y) для определенного значения независимой переменной (x) для данной модели.Существует ли какая-либо функция, которая прогнозирует x для данного y?

Например:

kalythos <- data.frame(x = c(20,35,45,55,70), 
    n = rep(50,5), y = c(6,17,26,37,44))
kalythos$Ymat <- cbind(kalythos$y, kalythos$n - kalythos$y)
model <- glm(Ymat ~ x, family = binomial, data = kalythos)

Если мы хотим узнать прогнозируемое значение модели для x=50:

predict(model, data.frame(x=50), type = "response")

Я хочу знать, например, x составляет y=30.

Ответы [ 5 ]

9 голосов
/ 16 ноября 2010

Видел, что предыдущий ответ удален.В вашем случае, если n = 50 и модель является биномиальной, вы бы вычислили x для y, используя:

f <- function (y,m) {
  (logit(y/50) - coef(m)[["(Intercept)"]]) / coef(m)[["x"]]
}
> f(30,model)
[1] 48.59833

Но при этом вам лучше проконсультироваться со статистиком, чтобы показать вам, как рассчитать обратный прогнозинтервал.И, пожалуйста, примите во внимание соображения ВитошКа.

1 голос
/ 25 сентября 2017

Наткнулся на эту старую ветку, но подумал, что я добавлю какую-то другую информацию. Пакет MASS имеет функцию доза.п для моделей логит / пробит. SE через дельта-метод.

> dose.p(model,p=.6)
             Dose       SE
p = 0.6: 48.59833 1.944772

Подгонка обратной модели (x ~ y) здесь не имеет смысла, потому что, как говорит @VitoshKa, мы предполагаем, что x является фиксированным, а y (ответ 0/1) является случайным. Кроме того, если бы данные не были сгруппированы, у вас было бы только 2 значения объясняющей переменной: 0 и 1. Но даже если мы предполагаем, что x является фиксированным, все равно имеет смысл рассчитать доверительный интервал для дозы x для данного p вопреки тому, что говорит @VitoshKa. Точно так же, как мы можем перепараметризовать модель в терминах ED50, мы можем сделать это для ED60 или любого другого квантиля. Параметры являются фиксированными, но мы по-прежнему рассчитываем CI для них.

1 голос
/ 25 апреля 2012

Пакет chemcal имеет функцию inverse.predict(), которая подходит для посадки вида y ~ x и y ~ x - 1

1 голос
/ 16 ноября 2010

Вам просто нужно переставить уравнение регрессии, но, как указано в комментариях выше, это может оказаться сложным и необязательно иметь содержательную интерпретацию.

Однако для представленного вами случая вы можете использовать:

(1/coef(model)[2])*(model$family$linkfun(30/50)-coef(model)[1])

Примечание. Сначала я произвел деление на коэффициент x, чтобы атрибут имени был правильным.

0 голосов
/ 16 ноября 2010

Для быстрого просмотра (без интервалов и без учета дополнительных проблем) вы можете использовать функцию TkPredict в пакете TeachingDemos. Он не делает этого напрямую, но позволяет динамически изменять значение (я) x и видеть, каково прогнозируемое значение y, поэтому было бы довольно просто перемещать x, пока не будет найден желаемый Y (для заданных значений x), это также покажет возможные проблемы с несколькими x, которые будут работать для того же y.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...