2014-10-15 7 views
1

Интересно, может ли кто-нибудь здесь помочь мне.Пропорциональное моделирование - ошибки Betareg

Я пытаюсь соответствовать бета GLM с betareg пакета, так как моей зависимой переменной является доля (относительная плотность китов в 500m размер сетки) колеблется от 0 до 1. У меня есть три ковариат:

  • Глубина (измеряется в метрах от 4 до 100 м),
  • Расстояние до побережья (измеряется в метрах от 0 до 21346 м) и
  • Расстояние до лодок (измеряется в метрах от 0 до 20621).

Моя зависимая переменная имеет много 0 и много значений, которые слишком близки к 0 (как в 7.8e-014). Когда я пытаюсь подобрать модель следующая ошибка показывает:

invalid dependent variable, all observations must be in (0, 1). 

Из того, что я смотрел из предыдущих обсуждений, кажется, это вызвано моим 0s в наборе данных (не должно быть никаких 0s или 1s). Когда я изменить все мои 0 только положительно определенной (например 0.0000000000000001) сообщение об ошибке я получаю:

Error in chol.default(K) : 
    the leading minor of order 2 is not positive definite 
In addition: Warning messages: 
1: In digamma(mu * phi) : NaNs produced 
2: In digamma(phi) : NaNs produced 
Error in chol.default(K) : 
    the leading minor of order 2 is not positive definite 
In addition: Warning messages: 
1: In betareg.fit(X, Y, Z, weights, offset, link, link.phi, type, control) : 
    failed to invert the information matrix: iteration stopped prematurely 
2: In digamma(mu * phi) : NaNs produced 

Из того, что я видел на нескольких форумах, кажется, это происходит потому, что моя матрица не является положительно определенной. Он может быть либо неопределенным (т. Е. Иметь как положительные, так и отрицательные собственные значения), или моя матрица может быть близка к сингулярной, т. Е. Наименьшее собственное значение очень близко к 0 (и, следовательно, вычислительно оно равно 0).

Мой вопрос: так как у меня есть только этот набор данных, есть ли способ решить эти проблемы и запустить бета-регрессию? Или, есть ли какая-нибудь другая модель, которую я мог бы использовать вместо пакета betareg, который мог бы работать?

Вот мой код:

betareg(Density~DEPTH+DISTANCE_TO_COAST+DIST_BOAT,data=misti) 
+0

трудно сказать, не воспроизводимый пример, но я хотел бы попробовать (1) добавление большого смещения ваших 0 значений, чтобы убедиться, вы находитесь далеко от границы (например, 1e-6); (2) масштабирование и центрирование ваших переменных-предикторов. Работают ли однократные бета-регрессии (например, «betareg (Density-DEPTH, data = misti)»? В конечном итоге вам придется учитывать нулевую инфляцию. –

ответ

0

Вместо бета-регрессии, вы можете просто запустить линейную модель, используя логистическую преобразование вашей зависимой переменной. Попробуйте следующее:

logistic <- function(p) log(p/(1-p) +0.01) 
    lm(logistic(Density)~DEPTH+DISTANCE_TO_COAST+DIST_BOAT,data=misti) 
5

Когда я изменить все мои 0 только положительно определенной (например 0.0000000000000001)

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

Кажется, что betareg в настоящее время работает только строго для данных внутри интервала (0,1), и вот что package vignette должен сказать:

Класс моделей бета-регрессии, который был внесен на Ferrari и Крибари-Нето (2004), полезно для моделирования непрерывных переменных y, которые принимают значения в открытом стандартном единичном интервале (0, 1). [...] Кроме того, если y также принимает крайности 0 и 1, полезным практическим преобразованием на практике является (y · (n - 1) + 0,5)/n, где n - размер выборки (Smithson and Verkuilen 2006).

Так один способ приблизиться к этому будет:

y.transf.betareg <- function(y){ 
    n.obs <- sum(!is.na(y)) 
    (y * (n.obs - 1) + 0.5)/n.obs 
} 


betareg(y.transf.betareg(Density) ~ DEPTH+DISTANCE_TO_COAST+DIST_BOAT, data=misti) 

В качестве альтернативного подхода к betareg, используя binomial GLM с logit ссылку см этот вопрос на крест валидацию и связанный UCLA FAQ:

Некоторые предлагают использовать quasibinomial GLM вместо модели пропорций/проценты ...