我在使用线性模型预测栅格时遇到问题。
首先,我从我的多边形中的数据创建我的模型。
# 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
如果您这样做,也许它有效:
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中的值不匹配(一个因子,另一个数字?),它将无法工作。请设置一个带代码的小例子......