Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

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

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

Ответ 3

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

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

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

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

Итак, еще одна вещь, о которой нужно следить!

Ответ 4

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

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

Ответ 5

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

col2 <- as.integer(col2)

Ответ 6

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

finiteElements = which(is.finite(col3*col4))
finiteData = data[finiteElements,]
lm(col2~col3*col4,na.action=na.exclude,data=finiteData)

Ответ 7

Я столкнулся с этой ошибкой, когда мой эквивалент 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))

Ответ 8

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

Ответ 9

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

Ответ 10

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