在使用boxcox公式时,lm.fit(x, y, offset = offset, singular.ok, ...)出现错误,有0个非NA值。

16

我正在尝试用以下代码运行一个boxcox变换:

urban1 <- subset(ski,urban <= 4,na.rm=TRUE)
ski$gender <- as.numeric((as.character(ski$gender)),na.rm=TRUE)
urban1 <- as.numeric((as.character(urban1)))
x <- (ski$gender*urban1)
y <- ski$EPSI.
bc <- boxcox(y ~ x) 
(trans <- bc$x[which.max(bc$y)]) 
model3 <- lm(y ~ x) 
model3new <- lm(y^trans ~ x)
ski$EPSI. <- ski$EPSI. + 1
但我不断收到这个错误:

Error in lm.fit(x,y,offset = offset, singular.ok = singular.ok, ...) : 0 (non-NA) cases Calls: ... eval -> eval -> boxcar -> boxcar.formula -> lm -> lm.fit Execution halted

提前致谢!


你确定第二行吗?如果你的代码中有缺失值,那么你会用错误的值替换你的数据。我可以建议你将你的代码转换到 tidyverse,特别是 dplyr 的宇宙中吗? - YCR
2个回答

24

当变量xy(或两者都)仅具有NAs时,lm(y ~ x)命令会生成错误消息。

lm.fit(x,y,offset = offset, singular.ok = singular.ok, ...) : 0 (non-NA) cases

以下是一个示例:

n <- 10
x <- rnorm(n,1)
y <- rep(NA,n)
lm(y ~ x)

Error in lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) : 
  0 (non-NA) cases

在您的代码中,我建议在您的lm命令之前测试一下您的变量是否全部为NA,如下所示:

lm命令之前添加以下代码:

if(all(is.na(variable1))) stop("All values of variable1 are NA.")
if(all(is.na(variable2))) stop("All values of variable2 are NA.")

请将variable1variable2替换为您要检查的变量名称。

all(is.na(x))
all(is.na(y))
all(is.na(y^trans))

在我的例子中:

all(is.na(y))
[1] TRUE

3
我在删除所有完全为NA的列后仍然遇到了这个错误。是否可能存在其他原因导致出现此错误? - Tom
@TomKisters 请问Tom,您能分享更多关于您的问题的信息吗? - Marco Sandri

5
错误可能由于你的数据中存在缺失值错误的转换而引发。
#From the mtcars dataset
mpg.reg3 <- lm(mpg ~ cylinders + displacement + horsepower + weight + acceleration + year + origin, data=Auto, na.action=na.exclude)

注意na.action=参数。将其设置为na.exclude将允许lm函数忽略数据中的NA。另一个选项是na.omit,它的作用略有不同。

另一个问题可能是您的数据转换有误-请仔细检查交互项和操作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接