微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

错误:在 R 中使用 glm 模型lulcc 包预测土地利用变化时,“预测”包含 NA

如何解决错误:在 R 中使用 glm 模型lulcc 包预测土地利用变化时,“预测”包含 NA

我是使用 R 的初学者。我使用 R 中的 lulcc 包制作了土地利用变化的预测模型。预测是使用 glm 完成的。当我执行glm.pred(最后一行)时,出现一个错误:'predictions' contains NA 消息。我已经尝试使用 na.omit 函数,但仍然存在错误,我不知道 NA 值位于何处。对我的问题有什么建议或解决方案吗?提前致谢。

这是代码

setwd("D:\\Penelitian_Tesis\\lulcclMG package")

memory.size() ### Checking your memory size
memory.limit() ## Checking the set limit
memory.limit(size=500000) ### expanding your memory

lu_lmg_2007 = raster("lu_lmg2007.tif")
lu_lmg_2013 = raster("lu_lmg_2013.tif")
lu_lmg_2019 = raster("lu_lmg_2019.tif")
ef_001 = raster("ef_001.tif")
ef_002 = raster("ef_002.tif")
ef_003 = raster("ef_003.tif")

# create raster stack
Lmg <- stack(lu_lmg_2007,lu_lmg_2013,lu_lmg_2019)
save(Lmg,file="Lmg.Rda")
na.omit("Lmg")

Expvar <- stack(ef_001,ef_002,ef_003)
save(Expvar,file="Expvar.Rda")
na.omit("Expvar")

##############

library(rgdal)

library(raster)

load(file="Lmg.Rda")
load(file="Expvar.Rda")

library(lulcc)

## observed maps
obs <- ObsLulcRasterStack(x=Lmg,pattern="lu",categories=c(0,1,2,3,4,5,6,7),labels=c("HU","LAD","LN","LA","TE","SW","SB","TA"),t=c(0,12))
obs
na.omit(obs)
plot(obs)

crosstabulate(obs,times=c(0,12))

## explanatory variables
ef <- ExpVarRasterList(x=Expvar,pattern="ef")
ef
na.omit(ef)

part <- partition(x=obs[[1]],size=0.1,spatial=TRUE)
na.omit("part")
train.data <- getPredictiveModelInputData(obs=obs,ef=ef,cells=part[["train"]],t=0)
na.omit(train.data)

forms <- list(HU ~ ef_001+ef_002+ef_003,LAD ~ ef_002+ef_003,LN ~ ef_002+ef_003,LA ~ ef_002+ef_003,TE ~ ef_002+ef_003,SW ~ ef_002+ef_003,SB ~ ef_001+ef_002+ef_003,TA ~ ef_001+ef_002+ef_003)

glm.models <- glmModels(formula=forms,family=binomial(link="logit"),data=train.data,obs=obs)
na.omit(glm.models)

## test ability of models to predict allocation of forest,built and other
## land uses in testing partition
test.data <- getPredictiveModelInputData(obs=obs,cells=part[["test"]])
na.omit(test.data)

glm.pred <- PredictionList(models=glm.models,newdata=test.data)

解决方法

我遇到了同样的问题。问题是您的 train.data OR test.data 可能包含 NA。

解决方案是将 na.omit(train.data) 更改为 train.data.no.na <- na.omit(train.data) 并使用新创建的变量来提供您的模型。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。