r

时间:2019-04-30 10:00:55

标签: r raster lm predict

我在使用线性模型预测栅格时遇到问题。

首先,我从多边形中找到的数据创建模型。

  # 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

1 个答案:

答案 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中的值不匹配(一个是一个因数,另一个是数字?)不起作用。请用代码设置一个小示例...