Exercício 1

Gere um conjunto de coordenadas X, Y (correspondente a 50 pontos) de uma distribuição uniforme no intervalo de (0,100). Calcule a distância euclidiana entre cada par de pontos (dica: um loop pode facilitar o cálculo). gere um arquivo com os seis vizinhos mais próximos.

Resposta:

Primeiro, geramos o conjunto de coordenadas:

library(tidyverse)
set.seed(43)
coordenadas <- tibble(x = runif(50, 0, 100),
                      y = runif(50, 0, 100)
                      )
plot(coordenadas)


Distância bidimensional: Para pontos bidimensionais, \(P=(p_x,p_y)\) e \(Q=(q_x,q_y),\) a distância é computada como: \(\sqrt{(p_x-q_x)^2 + (p_y-q_y)^2}.\)

distancia <- function(coordenadas, p, q) {
  # p e q são números inteiros menores do que 50
  # p : posição do ponto P
  # q : posição do ponto Q
  sqrt( ( coordenadas$x[p] - coordenadas$x[q] )^2 + ( coordenadas$y[p] - coordenadas$y[q] )^2 )
  
  }


Um looping para ajudar a criação de uma matriz de distâncias:

# e este vetor vai estocar os valores
d <- NULL

for(i in 1:nrow(coordenadas)){    # para cada ponto nas coordenadas 
  for(j in 1:nrow(coordenadas)){  # é calculada a distância em relação à todos os pontos
    
    # os resultados saem em um vetor
    d <- append(d, distancia(coordenadas,i,j)) } 
  }

# "quebrando" o vetor em 50 partes iguais temos as distâncias:
matriz_de_distancias <- matrix(d, nrow = 50, ncol = 50)


Criando a matriz de vizinhança, considerando os 6 vizinhos mais próximos:

library(spdep)

spoints  <- SpatialPoints(cbind(coordenadas$x, coordenadas$y))

vizinhos <- knearneigh(spoints, k=6) # Objeto "knn"
vizinhos <- knn2nb(vizinhos)         # Objeto "nb"
W        <- nb2listw(vizinhos, zero.policy = T) # objeto "listw"

summary(W)
## Characteristics of weights list object:
## Neighbour list object:
## Number of regions: 50 
## Number of nonzero links: 300 
## Percentage nonzero weights: 12 
## Average number of links: 6 
## Non-symmetric neighbours list
## Link number distribution:
## 
##  6 
## 50 
## 50 least connected regions:
## 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 with 6 links
## 50 most connected regions:
## 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 with 6 links
## 
## Weights style: W 
## Weights constants summary:
##    n   nn S0       S1       S2
## W 50 2500 50 14.77778 207.6111

Exercício 2

Escreva uma função para calcular a defasagem espacial do vetor de observáveis, isto é, para gerar \(W_{x}\). A matriz deve ser um objeto da classe listw.

Resposta:

variaveis_dependentes <- tibble(x1 = rnorm(50),
                                x2 = rnorm(50))
Wx <- lag.listw(W, as.matrix(variaveis_dependentes))
head(Wx)
##             [,1]        [,2]
## [1,] -0.15541172  0.61960443
## [2,]  0.63431284 -0.51762547
## [3,]  0.95230751 -0.39329903
## [4,]  0.39710155 -0.02183324
## [5,]  0.29285660  0.14639063
## [6,] -0.05281635  0.05193640