我在使用线性模型预测栅格时遇到问题。
首先,我从多边形中找到的数据创建模型。
# create model
poly <- st_read("polygon.shp")
df <- na.omit(poly)
df <- df[df$gdp > 0 & df$ntl2 > 0 & df$pop2 > 0,]
x <- log(df$ntl2)
y <- log(df$gdp*df$pop2)
c <- df$iso
d <- data.frame(x,y,c)
m <- lm(y~x+c,data=d)
然后我要使用raster :: predict估计输出栅格
# raster data
iso <- raster("iso.tif")
viirs <- raster("viirs.tif")
x <- log(viirs)
c <- iso
## predict with models
s <- stack(x,c)
predicted <- raster::predict(x,model=m)
但是我得到以下答复:
Error in model.frame.default(Terms, newdata, na.action = na.action, xlev = object$xlevels) :
object is not a matrix
我不知道问题是什么以及如何解决。我目前的观点是与因素/国家/地区代码有关:
我的模型包括国家/地区代码,因为我想包括一些国家/地区固定效果。包括这些可能存在问题。但是,即使从模型和整个数据框中排除国家/地区代码,我仍然会收到相同的错误消息。
富特莫尔,我的模型基于全世界的区域值,预测数据集仅包含土耳其的范围。也许这是问题所在?
这是数据: https://drive.google.com/open?id=16cy7CJFrxQCTLhx-hXDNHJz8ej3vTEED
答案 0 :(得分:0)
如果您这样操作,可能会起作用:
iso <- raster("iso.tif")
viirs <- raster("viirs.tif")
s <- stack(log(viirs), iso)
names(s) <- c("x", "c")
predicted <- raster::predict(s, model=m)
如果df $ iso和iso.tif中的值不匹配(一个是一个因数,另一个是数字?)不起作用。请用代码设置一个小示例...