在R

时间:2016-02-16 16:44:47

标签: r machine-learning stata spatial

我一直在努力寻找一种方法来创建我的因变量的空间滞后项,并根据我数据中各国首都城市之间的距离加权。虽然权重可以基于不同的东西,但首都城市之间的距离是我感兴趣的(当然,首先我需要找到一种方法来创建一个空间效应变量然后滞后)。

因变量(DV)是从0到2的有序度量。

我的数据样本(如果可以提供任何帮助):

country  year       DV                **spatial lag?**
USA      2000       NA                     
USA      2001       2                      
USA      2002       2                      
USA      2003       2                      
UK       2000       1                      
UK       2001       1                      
UK       2002       2                      
UK       2003       NA                    

我知道Stata有一个名为spmon的命令,可以很容易地在monadic数据中生成空间效果变量(单个单位不是dyads)。不幸的是,我没有Stata - 但我想在R中有办法做到这一点?

更新

我现在有坐标 - 以公里为单位的二元距离。请参阅下面的示例。

ida  numb   idb      kmdist
USA  20     CAN       731
USA  31     BHM       1623
USA  40     CUB       1813
USA  41     HAI       2286
USA  42     DOM       2358
USA  51     JAM       2315
USA  52     TRI       3494
USA  53     BAR       3330

如何从上面的数据集生成空间延迟项(假设我的DV - Y - 在数据集中)

1 个答案:

答案 0 :(得分:2)

  1. 建立权重矩阵。
  2. 再次检查诊断全为零。
  3. 规范化...
  4. 一个功能$ X_1 $
  5. w %*% x的方差小于x
library(data.table)
sp <- data.table(
  location = letters[1:3]
  ,lat = c(20,40,60)
  ,lon = c(50,70,90)
)
sp
#>    location lat lon
#> 1:        a  20  50
#> 2:        b  40  70
#> 3:        c  60  90

library(tidyverse)
w_raw <- 
  sp %>% 
  dist(.$lat,.$lon,method = "euclidean", upper=TRUE) %>% 
  as.matrix()
#> Warning in dist(., .$lat, .$lon, method = "euclidean", upper = TRUE): 强制
#> 改变过程中产生了NA
w_raw
#>          1        2        3
#> 1  0.00000 34.64102 69.28203
#> 2 34.64102  0.00000 34.64102
#> 3 69.28203 34.64102  0.00000

w <- w_raw * (1/rowSums(w_raw))
x <- c(5,10,5)
w %*% x
#>       [,1]
#> 1 6.666667
#> 2 5.000000
#> 3 6.666667

reprex package(v0.2.1)于2018-12-18创建