簡體   English   中英

如何處理 R 中 lm(x~y) 函數中的負值?

[英]How to treat negative values in lm(x~y) function in R?

運行我的腳本時,我收到以下錯誤消息: Error in lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) : 0 (non-NA) cases ,我在猜測這是由於一些負值? 該腳本正在循環遍歷 csv 文件列表,並且對於其中的一小部分,代碼正在運行。 但是對於他們所有人,我都收到了錯誤消息。 我檢查了數據,發現有一些(約占整個數據的 2%)負 NDVI 值始終為 -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, dat == -99999, 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM