线性模型函数lm()错误:外部函数调用中的NA / NaN / Inf(arg 1)

时间:2011-12-07 13:06:52

标签: r nan lm kaggle

说我有data.frame a

我用

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

col2有一些NA个值,col3col4的值小于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,但它们似乎都没有效果。我在前10个条目中再次测试lm,绝对不是因为NA s。这个警告的问题是每个谷歌搜索结果似乎都指向NA

我是误解错误还是错误地使用lm

数据位于kaggle。我正在使用线性回归建模 MonthlyIncome 数据(因为我无法让某个glm家庭工作)。我已经创建了自己的变量,但是如果你尝试使用已经存在的变量对 MonthlyIncome 进行建模,那么它就会失败。

10 个答案:

答案 0 :(得分:34)

我知道这个帖子真的很旧,但答案似乎并不完整,我遇到了同样的问题。

我遇到的问题是因为NA列也有NaN和Inf。删除它们并再试一次。具体做法是:

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

希望能帮到你18个月大的问题!

答案 1 :(得分:8)

您应该阅读本书A Beginner’s Guide to R以获取有关此内容的完整说明。具体来说,它提到了以下错误:

  

lm.fit中的错误(x,y,offset = offset,singular.ok =   singular.ok,...):外来函数调用中的NA / NaN / Inf(arg 4)

解决方案是在Intensity数据中添加一个小的常量值,例如1.请注意,统计社区中正在进行有关添加小值的讨论。尽管如此,在R中进行计算时,不能使用零日志。

答案 2 :(得分:3)

在所有可行的na.omitna.exclude检查之后,我只是遇到了另一种可能性。

我正在采取类似的措施:

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

没有注意到,对于我的数据集中的某些值,x或y可能为零: log(0) = -Inf

所以还有另外一件需要注意的事情!

答案 3 :(得分:2)

我通过重置我的选项解决了这类问题。 options(na.action="na.exclude") 要么 options(na.action="na.omit")

我检查了我的设置,之前已将选项更改为 “na.pass”没有删除我在NA上的观察结果(y~x)。

答案 4 :(得分:1)

尝试更改col2(和所有其他变量)的类型

col2 <- as.integer(col2)

答案 5 :(得分:0)

我刚遇到同样的问题。使用

获取有限元素
finiteElements = which(is.finite(col3*col4))
finiteData = data[finiteElements,]
lm(col2~col3*col4,na.action=na.exclude,data=finiteData)

答案 6 :(得分: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))

答案 7 :(得分:0)

当我在调用reformulate时反转参数并在我的lm调用中使用公式而不进行检查时出现了此错误,因此预测变量和响应变量错误。

答案 8 :(得分:0)

要注意的另一件事是使用log()或sin()之类的函数来使x和y的inf变大。例如。 log 0 = 0或sin(pi)= 0。

答案 9 :(得分:0)

确保因变量中没有0。