如何解决如何在R中的lmx〜y函数中处理负值?
运行脚本时,出现以下错误消息:Error in lm.fit(x,y,offset = offset,singular.ok = singular.ok,...) : 0 (non-NA) cases
,我猜测这是由于某些负值引起的吗?
该脚本遍历了csv文件列表,对于其中的一小部分,代码正在运行。但是对于所有人,我都会收到错误消息。我检查了数据,发现一些NDVI负值(约占整个数据的2%)始终为-99999。而且我的土壤湿度值为0。
我发现此解决方案na.action=na.exclude
要添加到lm函数中:
model <- lm(NDVI ~ T + Prec + soilM,data = BeforeConf)
model <- lm(NDVI ~ T + Prec + soilM,data = BeforeConf,na.action=na.exclude)
但是仍然会出现相同的错误。除了从数据中删除负值之外,您还有其他解决方案吗?最好是忽略整个而不是在线性回归(lm)中排除这些值,或者忽略整个csv文件。如果其中包含负值。
解决方法
R中缺少的值应编码为NA
。您可以使用replace
,
replace(dat,dat == -99999,NA)
# X1 X2 X3
# 1 1.37 1.30 -0.31
# 2 NA 2.29 -1.78
# 3 0.36 -1.39 -0.17
# 4 0.63 -0.28 1.21
# 5 0.40 NA 1.90
# 6 -0.11 0.64 -0.43
# 7 1.51 -0.28 -0.26
# 8 -0.09 -2.66 -1.76
# 9 2.02 -2.44 NA
# 10 -0.06 1.32 -0.64
实际上直接在公式中起作用而无需更改数据。
lm(X1 ~ X2 + X3,replace(dat,NA))$coefficients
# (Intercept) X2 X3
# 0.61499466 0.06062925 0.25979370
如果缺少多个代码,则可以执行以下操作:
replace(dat,array(unlist(dat) %in% c(-99999,-88888),dim(dat)),NA)
数据:
set.seed(42)
dat <- data.frame(matrix(round(rnorm(30),2),10,3))
dat[2,1] <- -99999
dat[5,2] <- -99999
dat[9,3] <- -99999
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。