28

说我有 data.framea

我用

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)

我检查了邮件列表,似乎是因为NAs incol2但我尝试使用na.action=na.exclude/omit/pass但它们似乎都不起作用。我lm对前 10 个条目再次进行了测试,绝对不是因为NAs. 这个警告的问题是每个谷歌结果似乎都指向NA.

我误解了错误还是我使用lm错误?

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

4

10 回答 10

39

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

我遇到的问题是因为 NA 列也有 NaN 和 Inf。删除这些并重试。具体来说:

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

希望对您 18 个月大的问题有所帮助!

于 2013-09-04T22:05:53.760 回答
10

您应该阅读A Beginner's Guide to R这本书以获得完整的解释。具体来说,它提到了以下错误:

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

解决方案是在强度数据中添加一个小的常数值,例如 1。请注意,统计界正在进行关于添加一个小值的讨论。尽管如此,在 R 中进行计算时,您不能使用零的对数。

于 2015-07-23T16:19:01.227 回答
8

我只是遭受了另一种可能性,毕竟可能na.omitna.exclude检查。

我正在服用类似的东西:

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

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

所以只是另一件事要注意!

于 2017-09-21T22:10:19.203 回答
2

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

我检查了我的设置,之前已将选项更改为“na.pass”,这并没有放弃我对 NA 的 y 观察(其中y~x)。

于 2017-08-29T17:57:08.943 回答
1

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

col2 <- as.integer(col2)
于 2013-06-11T19:12:08.800 回答
0

我刚刚遇到了同样的问题。使用有限元

finiteElements = which(is.finite(col3*col4))
finiteData = data[finiteElements,]
lm(col2~col3*col4,na.action=na.exclude,data=finiteData)
于 2014-05-26T06:08:35.767 回答
0

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

于 2018-08-31T09:55:21.787 回答
0

当我的 col2 等效项是 integer64 而不是整数时,并且在使用自然和多项式样条曲线时,例如 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))
于 2018-01-09T17:38:09.250 回答
0

另一件需要注意的事情是使用 log() 或 sin() 之类的函数使您的 x 和 y 成为 inf。例如。log 0 = 0 或 sin(pi) = 0。

于 2019-02-14T22:03:17.747 回答
-2

确保因变量中没有任何 0。

于 2019-04-15T05:57:05.470 回答