在 R 中回归时数据框中的 Phantom NA

Phantom NA's in dataframe when regression in R

我有相当大的数据框——大约 235K 行,我想进行多元回归:

model <- lm(var~., data=data)

但我得到一个错误:

Error in lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) : 
  NA/NaN/Inf в 'y'
In addition: Warning message:
In storage.mode(v) <- "double" : NAs introduced by coercion

na.omit 和其他摆脱 NA 的方法都没有帮助。

所以我试着自己找NA。我将数据框分成两部分:

第二次更新

data1 <- data[1:(dim(data)[1]/2), ]
data2 <- data[(dim(data)[1]/2):(dim(data)[1]), ]

我又一次得到了 lm 的结果,而且之前的 UPD 部分没有错误!注意:我已经重新启动了 RStudio。

第一次更新

data1 <- data[1:(dim(data)[1]/2),]

当我调用 lm 而不是之前的错误时,我得到下一个:

Error in `contrasts<-`(`*tmp*`, value = contr.funs[1 + isOF[nn]]) : 
  contrasts can be applied only to factors with 2 or more levels

为了解决这个错误,我将数据从 235K 减少到 14.5K。那么,现在的问题是什么?一些 offcasted 切片不会抛出任何错误。

原始版本

data1 <- data[1:(dim(data)[1]/2)]
data2 <- data[(dim(data)[1]/2):(dim(data)[1])]

并为每个人调用 lm

model1 <- lm(var~., data=data1)
model2 <- lm(var~., data=data2)

而且我没有收到任何错误!所以,我想问题出在数据框的大尺寸上。有什么办法可以解决吗?

str(data) 的输出来看,您的某些数字预测变量似乎被编码为“字符”。

Re-code 使用 as.numeric 将它们转换为数字,看看是否能解决问题。

如果是,您可能想检查为什么将它们编码为字符。您的数据中是否存在恶意标点符号或空格?