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