PLM-регрессия с журнальными переменными, возвращающими неконечные значения, ошибка, когда в данных отсутствуют нулевые или NA-значения - PullRequest
0 голосов
/ 18 февраля 2020

Я использую пакет plm для анализа данных панели, которые содержат набор состояний за 14 лет. В ходе выполнения регрессий plm я много раз сталкивался с ошибкой «матрица модели или ответ содержит не конечные значения», но в конечном итоге я решил их, удалив наблюдения со значениями NULL или NA. Тем не менее, я делаю регрессию:


mod_3.1_within_log_b <- plm(log(PIB) ~ txinad + prod + op + emp + log(RT) + log (DC) + log(DK) + Gini + I(log(DC)*Gini) + I(log(DK)*Gini), data = dd, effect = 'individual')

summary (mod_3.1_within_log_b)

, которая возвращает

Error in model.matrix.pdata.frame(data, rhs=1, model=model, effect=effect,
model matrix or response contains non-finite values (NA/NaN/inf/-inf)

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


mod_3.1_within_log_b <- plm(log(PIB) ~ txinad + prod + op + emp + log(RT) + log (DC) + Gini + I(log(DC)*Gini) + I(log(DK)*Gini), data = dd, effect = 'individual')

и


mod_3.1_within_log_b <- plm(log(PIB) ~ txinad + prod + op + emp + log(RT) + log(DK) + Gini + I(log(DC)*Gini) + I(log(DK)*Gini), data = dd, effect = 'individual')

summary (mod_3.1_within_log_b)

, и оба сработали, показывая, что это происходит, когда я работаю с log (DK) и log ( D C) вместе, что я получаю ошибку.

Заранее спасибо!

1 Ответ

1 голос
/ 18 февраля 2020

Как подсказывает @StupidWolf в комментарии, матрица вашей модели может содержать нули или, возможно, отрицательные значения (log(-1) возвращает NaN и log(0) возвращает Inf).

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

Обратите внимание, что я сократил формулу для улучшения читабельности.

mm <- model.matrix(txinad + prod + op + emp + log(RT) + 
                    (log(DC) + log(DK)) * Gini, data = dd)
## Check complete.cases
if(any(icc <- !complete.cases(mm))){
    cat('Rows in dd causing trouble:\n')
    print(dd[icc, ])
}

Это выведет любую строки в dd, что вызывает проблему в model.matrix.

...