3

cancensus パッケージを使用してダウンロードしたデータを使用して、Gavin Simpson によるこの素晴らしいブログ投稿を実装しようとしましたが、gam を評価しようとすると次のエラーが発生します。

Error in smooth.construct.mrf.smooth.spec(object, dk$data, dk$knots) : 
  mismatch between nb/polys supplied area names and data area names
In addition: Warning message:
In if (all.equal(sort(a.name), sort(levels(k))) != TRUE) stop("mismatch 
between nb/polys supplied area names and data area names") :
  the condition has length > 1 and only the first element will be used

ここに最小限の作業例を投稿しました。どんなヒントでも大歓迎です。

一番、

4

2 に答える 2

1

すでに答えを見つけていることは知っていますが、同じエラーと別の問題があったため、後世のためにここに私の解決策を投稿します。

(注: と の代わりにパッケージを使用しましsfた)rgdalspdep

library(sf)
sh_terr <- st_read("your_shp.shp", stringsAsFactors = T) 

neighb <- st_touches(sh_terr, sparse = T) %>% 
  lapply(function(xx) sh_terr$FSA[xx] %>% factor(levels = levels(sh_terr$FSA))) %>% 
  set_names(sh_terr$FSA)

隣接するオブジェクト構造は次のようになります。

str(neighb[1:5])
List of 5
 $ G0A: Factor w/ 419 levels "G0A","G0C","G0E",..: 14 15 16 17 21 22 39 49 50 51 ...
 $ G0C: Factor w/ 419 levels "G0A","G0C","G0E",..: 3 6 67
 $ G0E: Factor w/ 419 levels "G0A","G0C","G0E",..: 2 6 65 67
 $ G0G: Factor w/ 419 levels "G0A","G0C","G0E",..: 5 16 62 70 271
 $ G0H: Factor w/ 419 levels "G0A","G0C","G0E",..: 4 14 16 68 70 71

そしてあなたのスプライン式:

Effect ~ s(FSA, bs = "mrf", xt = list(nb = neighb), k = 41, fx = TRUE)

それはすべて要因にあります。 FSAあなたのメインデータオブジェクトは であるgam必要がfactorあり、隣接するオブジェクト構造は、メインデータのレベルの TOTAL 数と同じ数のレベルを持つ要因のリストである必要があります。

于 2018-03-15T12:44:08.500 に答える