Имитация данных и пробит-модель в R - PullRequest
2 голосов
/ 26 мая 2011

У меня очень простой вопрос об использовании смоделированных данных в R с пробитной моделью. Любой метод, который я использовал для генерации данных и последующего использования этих данных для запуска пробной модели, возвращает предупреждение об идеальных подгонках: в частности:

Warning message:
In glm.fit(x = X, y = Y, weights = weights, start = start, etastart = etastart, :
  fitted probabilities numerically 0 or 1 occurred

Существует ли какой-либо метод для генерации данных для этого типа модели, который не обеспечивает эту ошибку? Всякий раз, когда я пытаюсь использовать команду glm () с probit, я получаю предупреждение. Я пробовал большое количество различных значений set.seed (), и каждое из них по-прежнему возвращает предупреждение. Я также попробовал несколько различных методов (и значений), но ни один не работает. Вот пример кода:

n <- 1000
set.seed(1211)
b.true1 <- c(-1, 2, .8)
X1 <- cbind(rnorm(n, 1.5, 2), rnorm(n, -2, 1.3))
eps.t1 <- rnorm(n)
y.star1 <- b.true1[1] + X1%*%b.true1[2:3] + eps.t1
y1 <- ifelse(y.star1<=0, 0, 1)
prob2 <- glm(y1~X1, family=binomial(link="probit"))

Итак, два вопроса из этого:

  1. Должно ли это быть серьезной проблемой? Я знаю, что это может сделать стандартные ошибки слишком большими, но я не знал, смогу ли я по-прежнему использовать результаты модели с предупреждением.

  2. Есть ли способ генерирования выборочных данных для пробной модели без получения этого предупреждения?

Смоделированные данные используются для проверки сложной логарифмической функции правдоподобия, которую я должен убедиться, что кодируется правильно. Если эти предупреждения приводят к тому, что результаты пробитинга являются недействительными, то не стоит использовать эти данные для проверки функции правдоподобия!

Большое спасибо за вашу помощь!

1 Ответ

4 голосов
/ 26 мая 2011

Для чего это стоит, мне интересно, почему вы берете такие большие различия. Если вы посмотрите на y.star1 (это пробитные значения), эти значения имеют огромный диапазон (от -10 до 14). Это приведет к предупреждению, так как округление даст вероятностные ответы 0 или 1.

Позаботьтесь о том, чтобы результаты не были такими уж экстремальными, это все, что вам нужно, чтобы избавиться от предупреждения. Уменьшение различий в средних значениях X1 и приближении коэффициентов b.true1 к 0 помогает:

b.true1 <- c(-1, 1, .8)
X1 <- cbind(rnorm(n, 1.5, 2), rnorm(n, -1, 1.3))

не выдает предупреждений и все еще показывает довольно хорошее различие в данных:

hist(predict(prob2,type="response"))

enter image description here

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