Ошибка функции lm () линейной модели: NA / NaN / Inf при вызове сторонней функции (arg 1) - PullRequest
23 голосов
/ 07 декабря 2011

Скажите, что у меня есть data.frame a

Я использую

m.fit <- lm(col2 ~ col3 * col4, na.action = na.exclude)

col2 имеет некоторые значения NA, col3 и col4 имеют значения меньше 1.

Я продолжаю получать

Error in lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) : 
NA/NaN/Inf in foreign function call (arg 1)

Я проверил список рассылки, и похоже, что это из-за NA s в col2, но я попытался использовать na.action=na.exclude/omit/pass, но ни один из них, похоже, не работает. Я протестировал lm снова на первых 10 записях, определенно не из-за NA s. Проблема с этим предупреждением в том, что все результаты Google указывают на NA.

Я неправильно истолковал ошибку или неправильно использую lm?

Данные в kaggle . Я моделирую данные MonthlyIncome , используя линейную регрессию (поскольку я не могу заставить работать определенное семейство glm). Я создал свои собственные переменные для использования, но если вы попытаетесь смоделировать MonthlyIncome с уже существующими переменными, то произойдет сбой.

Ответы [ 10 ]

34 голосов
/ 05 сентября 2013

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

Проблема, с которой я столкнулся, заключалась в том, что в столбцах NA также были NaN и Inf,Удалите их и попробуйте снова.В частности:

col2[which(is.nan(col2))] = NA
col2[which(col2==Inf)] = NA

Надеюсь, это поможет вашему 18-месячному вопросу!

8 голосов
/ 23 июля 2015

Вы должны прочитать книгу Руководство для начинающих по R для полного объяснения этого.В частности, упоминается следующая ошибка:

Ошибка в lm.fit (x, y, offset = offset, singular.ok = singular.ok, ...): NA / NaN / Inf inвызов внешней функции (arg 4)

Решение состоит в том, чтобы добавить небольшое постоянное значение к данным Intensity, например, 1. Обратите внимание, что в статистическом сообществе идет постоянное обсуждение вопроса онебольшое значение.Как бы то ни было, вы не можете использовать лог ноль при выполнении расчетов в R.

5 голосов
/ 22 сентября 2017

У меня просто была другая возможность, после всех возможных проверок na.omit и na.exclude.

Я принимал что-то вроде:

lm(log(x) ~ log(y), data = ...)

Не замечая, что для некоторых значений в моем наборе данных x или y могут быть равны нулю: log(0) = -Inf

Так что просто еще одна вещь, которую нужно остерегаться!

2 голосов
/ 29 августа 2017

Я решил этот тип проблемы, сбросив настройки. options(na.action="na.exclude") или же options(na.action="na.omit")

Я проверил свои настройки и ранее изменил параметр на «na.pass», который не отбросил мои наблюдения с NA (где y~x).

1 голос
/ 11 июня 2013

Попробуйте изменить тип col2 (и все другие переменные)

col2 <- as.integer(col2)
0 голосов
/ 15 апреля 2019

Убедитесь, что у вас нет 0 в зависимой переменной.

0 голосов
/ 15 февраля 2019

Еще одна вещь, на которую стоит обратить внимание, это использование таких функций, как log () или sin (), чтобы сделать ваши x и y inf.например.log 0 = 0 или sin (pi) = 0.

0 голосов
/ 31 августа 2018

Я получил эту ошибку, когда инвертировал аргументы при вызове reformulate и использовал формулу в моем вызове lm без проверки, поэтому у меня был неправильный предиктор и переменная ответа.

0 голосов
/ 09 января 2018

Я столкнулся с этой ошибкой, когда моим эквивалентом col2 было целое число 64, а не целое число, и при использовании естественных и полиномиальных сплайнов, сплайнов :: bs и сплайнов: ns, например:

m.fit <- lm(col1 ~ ns(col2))
m.fit <- lm(col1 ~ bs(col2, degree = 3))

Преобразование в стандартное целое число работало для меня:

m.fit <- lm(col1 ~ ns(as.integer(col2)))
m.fit <- lm(col1 ~ bs(as.integer(col2), degree = 3))
0 голосов
/ 26 мая 2014

Я только что столкнулся с той же проблемой.получить конечные элементы, используя

finiteElements = which(is.finite(col3*col4))
finiteData = data[finiteElements,]
lm(col2~col3*col4,na.action=na.exclude,data=finiteData)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...