lm() NA/NaN/Inf error

Мой вопрос довольно прост, но я не могу понять, что не так. Просто скажи, что у меня есть 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 записях, определенно не из-за NAs. Проблема с этим предупреждением заключается в том, что все результаты Google указывают на NA,

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

Спасибо

Хорошо, данные на http://www.kaggle.com/c/GiveMeSomeCredit/Download/cs-training.csv. Я моделирую данные за месяц с использованием линейной регрессии (не судите, я не смог получить glm Семья на работу, потому что я плохо на R). Я создал свои собственные переменные для использования, но если вы попытаетесь смоделировать MonthlyIncome с уже существующими переменными, это не удастся.

11 ответов

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

col2 <- as.integer(col2)

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

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

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

Я столкнулся с этой ошибкой, когда моим эквивалентом col2 было целое число 64, а не целое число, и при использовании естественных и полиномиальных сплайнов, splines::bs и splines: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))

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

Вот что помогло в моем случае. Я проанализировал данные, которые уже исключают NA и INF.

      lm(y ~ x, data = data[(y != Inf & is.na(y) == FALSE)])

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

Другие вопросы по тегам