Поиск подходящих начальных значений может быть затруднен для достаточно сложных задач. Однако для установки начальных значений (документация которых невелика, но существует) вам следует научиться читать сообщения об ошибках. Вот копия вашей неудачной попытки с использованием start=1
со встроенным набором данных:
>quine.nb1 <- glm.nb(Days ~ Sex + Age + Eth + Lrn, data = quine,
link=sqrt, start=1)
Error in glm.fitter(x = X, y = Y, w = w, start = start, etastart = etastart, :
length of 'start' should equal 7 and correspond to initial coefs for
c("(Intercept)", "SexM", "AgeF1", "AgeF2", "AgeF3", "EthN", "LrnSL", )
Он точно сообщает вам, чего он ожидает: вектор значений для каждого оцениваемого коэффициента.
quine.nb1 <- glm.nb(Days ~ Sex + Age + Eth + Lrn, data = quine,
link=sqrt, start=rep(1,7))
работает, потому что я дал вектор длины 7. Возможно, вам придется поиграться с фактическими значениями, чтобы получить модель, которая всегда предсказывает положительные значения. Вероятно, алгоритм по умолчанию для генерации начальных значений в glm.nb
где-то дает отрицательный прогноз, и ссылка sqrt
не может этого допустить (в отличие от log
). Если у вас возникли проблемы с поиском действительных начальных значений вручную, вы можете попробовать запустить более простую модель и расширить оценки по ней на 0 для других параметров, чтобы получить хорошее начальное местоположение.
РЕДАКТИРОВАТЬ: создание модели
Предположим, вы не можете найти действительные начальные значения для вашей сложной модели. Затем начните с простого, например
> nb0 <- glm.nb(Days ~ Sex, data=quine, link=sqrt)
> coef(nb0)
(Intercept) SexM
3.9019226 0.3353578
Теперь давайте добавим следующую переменную, используя предыдущие начальные значения, добавив 0 оценок для эффекта новой переменной (в этом случае Age
имеет четыре уровня, поэтому необходимо 3 коэффициента):
> nb1 <- glm.nb(Days ~ Sex+Age, data=quine, link=sqrt, start=c(coef(nb0), 0,0,0))
> coef(nb1)
(Intercept) SexM AgeF1 AgeF2 AgeF3
3.9127405 -0.1155013 -0.5551010 0.7475166 0.5933048
Обычно вы хотите продолжать добавлять 0, а не, скажем, 100, потому что коэффициент 0 означает, что новая переменная не имеет никакого эффекта - это именно то, что предполагает более простая модель, которую вы только что установили.