说我有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
,但它们似乎都没有效果。我在前10个条目中再次测试lm
,绝对不是因为NA
s。这个警告的问题是每个谷歌搜索结果似乎都指向NA
。
我是误解错误还是错误地使用lm
?
数据位于kaggle。我正在使用线性回归建模 MonthlyIncome 数据(因为我无法让某个glm
家庭工作)。我已经创建了自己的变量,但是如果你尝试使用已经存在的变量对 MonthlyIncome 进行建模,那么它就会失败。
答案 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.omit
和na.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。