Как выполнить выбор пространственного собственного вектора в R? - PullRequest
0 голосов
/ 08 октября 2018

В настоящее время я пытаюсь выполнить гауссовую линейную регрессию в R с данными, которые могут быть пространственно автокоррелированыМой набор данных содержит географические координаты (значение долготы, значение широты), виды, независимые переменные (BS и LTS) и некоторые объяснительные переменные;это выглядит так:

head(dataset)

coordinates SPECIES                BS   LTS  DEPTH OCEAN
(155, 47)    Cristaphyes abyssorum  8.66 28.3  5373  WPac
(150, 41)    Cristaphyes abyssorum  8.66 28.3  5250  WPac 
(-72, -41)   Cristaphyes anomalus   8.69   NA    35  EPac
(-74, -44)   Cristaphyes anomalus   8.69   NA    35  EPac
(-57, -46)   Cristaphyes anomalus   8.69   NA    NA  WAtl
(29, 80)     Cristaphyes arctous    8.32 27.0   393  EAtl

tail(dataset)

coordinates SPECIES                  BS   LTS   DEPTH  OCEAN
(-80, 27)   Zelinkaderes brightae    NA   20.1  13.04  WAtl
(-80, 27)   Zelinkaderes floridensis 7.10 12.4  140.00 WAtl
(35, 25)    Zelinkaderes klepali     NA   25.0  1.00   WInd
(9, 57)     Zelinkaderes submersus   7.99 21.4  30.00  EAtl
(130, 36)   Zelinkaderes yong        NA   12.7  4.50   WAtl
(126, 33)   Zelinkaderes yong        NA   12.7  0.00   WAtl

Набор данных также включает значения широты и долготы в отдельных столбцах.

Я извлек пространственные фильтры на основе положительных собственных векторов из усеченной матрицы географических расстояний среди выборокместа.Я хотел бы рассматривать пространственные фильтры как возможные объясняющие переменные в моей модели линейной регрессии.Я сделал это следующим образом:

Прежде всего, я создал объект списка соседей (nb).В моем случае нерегулярных выборок я использовал функцию knearneight пакета R spdep:

knea8 <-knearneight(coordinates(dataset), longlat=TRUE, k=8)

neib8 <-knn2nb(knea8)

Затем я создал пространственную весовую матрицу с функцией nb2listw пакета R spdep:

nb2listw(neib8)

distgab8 <- nbdists(neib8, coordinates(dataset))

str(distgab8)

fdist<-lapply(distgab8, function(x) 1-x/max(dist(coordinates(dataset))))

listwgab8 <- nb2listw(neib8, glist = fdist8, style = "B")

Затем я построил пространственные предикторы, чтобы включить их в гауссовую линейную регрессию.Я сделал это с помощью функции mem пакета R adespatial, как показано ниже:

mem.gab8 <- mem(listwgab8)

Кроме того, Морана I были вычислены и протестированы для каждого собственного вектора с функцией moran.randtest, как показано ниже:

moranI8 <-moran.randtest(mem.gab8, listwgab8, 99)

Я получил несколько собственных векторов со значительной положительной пространственной автокорреляцией.Теперь я хотел бы включить их в гауссовскую линейную регрессию.Я попытался сделать это с помощью функции ME из spdep следующим образом:

GLM1 <- ME(BS~LATITUDE, data=dataset, listw=listwgab8, family=gaussian, nsim=99, alpha=0.05)

К сожалению, я получаю эту ошибку:

Ошибка в sW% *%var: ошибка Cholmod 'X и / или Y имеют неправильные размеры' в файле ../MatrixOps/cholmod_sdmult.c, строка 90

Как мне решить эту ошибку?Или есть другой способ выполнить выбор пространственного вектора в гауссовой линейной регрессии?

...