econometria espacial no r
TRANSCRIPT
Atenção:
Este material ainda está sendo finalizado e pode conter erros, entretanto,
acredito que possa ser útil até a versão final estar pronta. Alguma sugestão, crítica ou
comentário, por favor entre em contato.
Estimação e Análise de Regressão Espacial no R1
Samuel Alex Coelho Campos
Mestrando em Economia Aplicada
Departamento de Economia Rural
Universidade Federal de Viçosa
Viçosa, 20 de agosto de 2010
1 Maiores detalhes podem ser encontrados em Anselin, L. (2005). Spatial Regression Analysis in R - A
Workbook. Disponível em geodacenter.asu.edu/system/files/rex1.pdf.Esse texto se baseou neste
workbook.
I – Avaliando a presença da autocorrelação especial
Inicialmente deve-se avaliar se existe ou não autocorrelação espacial, para isto
estime a regressão por MQO por meio do comando lm
mqo <- lm(TX_CRESC_9~LN_IP_91, data=Minas)
extraia os resíduos como por meio do seguinte comando
resid(mqo)
Teste para os redísuos de MQO para Spatial Autocorrelation – ver teste I Moran
• Lagrange Multiplier tests using lm.LMtests
• parameters: a regression object, listw object and the type of test
• specifying the LM tests by name (LMerr, RLMerr, LMlag, RLMlag,
SARMA)
The statistics are the simple LM test for error dependence (LMerr), the simple LM test for a missing spatially lagged dependent variable (LMlag), variants of these robust to the presence of the other (RLMerr, RLMlag - RLMerr tests for error dependence in the possible presence of a missing lagged dependent variable, RLMlag the other way round), and a portmanteau test (SARMA, in fact LMerr + RLMlag). Note: from spdep 0.3-32, the value of the weights matrix trace term is returned correctly for both underlying symmetric and asymmetric neighbour lists, before 0.3-32, the value was wrong for listw objects based on asymmetric neighbour lists, such as k-nearest neighbours (thanks to Luc Anselin for finding the bug).
data(oldcol)oldcrime.lm <- lm(CRIME ~ HOVAL + INC, data = COL.OLD)summary(oldcrime.lm)lm.LMtests(oldcrime.lm, nb2listw(COL.nb), test=c("LMerr", "LMlag", "RLMerr", "RLMlag", "SARMA"))lm.LMtests(oldcrime.lm, nb2listw(COL.nb))lm.LMtests(residuals(oldcrime.lm), nb2listw(COL.nb))
6.2.3 ML Estimation of Spatial Lag Model
• using lagsarlm with a formula and listw object
• using summary to list the detailed results
Maximum likelihood estimation of spatial simultaneous autoregressive lag and mixed models of the form:
where _ is found by optimize() first, and _ and other parameters by generalized least squares subsequently (one-dimensional search using optim performs badly on some platforms). In the mixed model, the spatially lagged independent variables are
added to X. Note that interpretation of the fitted coefficients should use impact measures, because of the feedback loops induced by the data generation process for this model.
data(oldcol)COL.lag.eig <- lagsarlm(CRIME ~ INC + HOVAL, data=COL.OLD,nb2listw(COL.nb, style="W"), method="eigen", quiet=FALSE)summary(COL.lag.eig, correlation=TRUE)
6.2.4 ML Estimation of Spatial Error Model
• using errorsarlm with a formula and listw object
• using summary to list the detailed results
Description Maximum likelihood estimation of spatial simultaneous autoregressive error models of the form:
where is found by optimize() first, and and other parameters by generalized least squares subsequently (one-dimensional search using optim performs badly on some platforms).
data(oldcol)COL.errW.eig <- errorsarlm(CRIME ~ INC + HOVAL, data=COL.OLD,nb2listw(COL.nb, style="W"), method="eigen", quiet=FALSE)summary(COL.errW.eig, correlation=TRUE)
6.2.5 Testing the Spatial Common Factor Hypothesis
• using lagsarlm with type="mixed"
• using LR.sarlm for the Likelihood Ratio test
Breusch-Pagan test for spatial models
DescriptionPerforms the Breusch-Pagan test for heteroskedasticity on the least squares fit of the spatial models taking the spatial coefficients rho or lambda into account. This function is a copy of the bptest function in package "lmtest", modified to use objects returned by spatial simultaneous autoregressive models.
example(columbus)error.col <- errorsarlm(CRIME ~ HOVAL + INC, data=columbus,nb2listw(col.gal.nb))bptest.sarlm(error.col)bptest.sarlm(error.col, studentize=FALSE)
object An object of class "sarlm" from errorsarlm() or lagsarlm().
1
studentize logical. If set to TRUE Koenker’s studentized version of the test statistic will be used.
2
1. Importando os dados e pesos para o R
1.1. Exportando os dados com o GeoDa
Pelo GeoDa abra os dados em File > Load shape
Após abrir os dados clique em Tools > Data Export > ASCII
Localize o arquivo shape no qual vc irá trabalhar posteriormente no R
Selecione todas as variáveis e clique no "disquete" e em "exporte"
1.2. Criando os pesos espaciais com o GeoDa
#Clique em Tools / Weights/ Create ...
Identifique a variável de identificação em “Weights File ID Variable”
Então escolha entre “Contiguity Weight” ou Distance Weight”
Create (Salve com o nome desejado)
3
1.3. Criando a tabela de dados
#Usaremos o comando "read.table" para dados ASCII que é o comando "read.csv"
#O arquivo criado pelo GeoDa contem um cabeçalho (abra e confira que a primeira
linha possui um número que é o número de observações e o segundo número é o número de
observações, então devemos usar "header=TRUE"
#E também há uma primeira linha extra que não será necessária que apenas mostra o
número de observações e variáveis, desta forma deve ser usado "skip=1"
#O comando usado então deve ser
Minas <- read.csv ("C:/Users/Samuel/Documents/Artigos &
Projetos/Spatial/Testando.txt",header=TRUE,skip=1)
#Para obter as estatísticas descritivas das variáveis:
summary (Minas)
CODMUNI IP_91 IP_00 LN_IP_91 LN_IP_00 TX_CRESC_9
Min. : 10 Min. : 0.000 Min. : 0.000 Min. :-0.5234 Min. :-0.5234 Min. :-2.8497
1st Qu.:1950 1st Qu.: 2.021 1st Qu.: 2.828 1st Qu.: 0.7035 1st Qu.: 1.0397 1st Qu.: 0.0000
Median :3730 Median : 3.081 Median : 4.336 Median : 1.1254 Median : 1.4670 Median : 0.2203
Mean :3698 Mean : 5.615 Mean : 6.582 Mean : 1.2944 Mean : 1.5257 Mean : 0.2313
3rd Qu.:5490 3rd Qu.: 5.499 3rd Qu.: 7.367 3rd Qu.: 1.7046 3rd Qu.: 1.9970 3rd Qu.: 0.5796
Max. :7220 Max. :75.299 Max. :77.512 Max. : 4.3215 Max. : 4.3504 Max. : 3.0050
IP_01 IP_07 LN_IP_01 LN_IP_07 TX_CRESC_0 TX_CRESC_T
Min. : 0.000 Min. : 0.000 Min. :-0.718 Min. :-0.7563 Min. :-3.6554 Min. :-2.52275
1st Qu.: 2.604 1st Qu.: 3.249 1st Qu.: 0.957 1st Qu.: 1.1784 1st Qu.:-0.0737 1st Qu.: 0.01861
Median : 4.227 Median : 5.936 Median : 1.442 Median : 1.7810 Median : 0.2083 Median : 0.46892
Mean : 6.966 Mean : 9.945 Mean : 1.538 Mean : 1.8218 Mean : 0.2838 Mean : 0.52744
3rd Qu.: 7.736 3rd Qu.:11.610 3rd Qu.: 2.046 3rd Qu.: 2.4519 3rd Qu.: 0.5615 3rd Qu.: 1.06312
Max. :72.207 Max. :88.791 Max. : 4.280 Max. : 4.4863 Max. : 3.3717 Max. : 4.25011
Observação: Se aconteceu algum erro na importação ou vc quer apagar o
banco de dados da memória use o comando:
rm(nome do banco de dados, no caso Testando)
4
1.4. Criando uma lista de vizinhos com um arquivo GAL
#Para manipular os pesos você irá precisar pedir para o programa carregar o pacote
spdep, assumindo que você já o tenha instalado - use o comando library
library(spdep)
Usando read.gal
# Você irá ver que há três parâmetros: o nome do arquivo de entrada; um "region.id" e
um "overrid.id".
#O propósito desses dados é evitar ter que assumir que os dados e o arquivo de pesos
possuam as observações na mesma ordem. Isto não é de importância aqui, uma vez que o
arquivo de dados e de pesos são criados pelo GeoDa.
#Para os nossos propósitos basta configurar "override.id=TRUE, contrapondo ao padrão
FALSE para forcar o programa a usar o novo GeoDa Gal pesos format:
polgal <- read.gal("C:/Users/Samuel/Documents/Artigos &
Projetos/Spatial/Queen.gal",override.id=TRUE)
#Isto cria um objeto de vizinhos com nome polgal.
# O arquivo carregado contém meta atributos que podem ser visualizado pelo comando:
attributes(polgal)
> attributes(polgal)
$class
[1] "nb"
$region.id
[1] "10" "20" "30" "40" "50" "60" "70" "80" "90" "100" "110" "120" "130" "140" "150"
(Omitido...)
[826] "7030" "7040" "7043" "7047" "7050" "7052" "7057" "7060" "7065" "7070" "7075" "7080" "7090" "7100" "7220"
[841] "7103" "7107" "7110" "7115" "7120" "7130" "7140" "7160" "7170" "7180" "7190" "7200" "7210"
$GeoDa
$GeoDa$shpfile
[1] "Ip"
$GeoDa$ind
[1] "CODMUNI"
$gal
5
[1] TRUE
$call
[1] TRUE
$sym
[1] TRUE
# Para visualizarmos as características principais do arquivo, com o número de regiões,
visinhos, etc:
print(polgal)
Neighbour list object:
Number of regions: 853
Number of nonzero links: 4898
Percentage nonzero weights: 0.6731637
Average number of links: 5.742087
#Características dos pesos
summary(polgal)
#Note how the link number distribution and summary of the connectedness structure
use the region.id values to identify the observations. If you use Tools > Weights > Properties in
GeoDa, you will observe the same frequency distribution in the link histogram.
1.5. Criando uma lista de vizinhos com um arquivo GWT
A função red.gwt2nb lê como argumentos o nome do arquivo para o arquivo GWT e o
nome da variável de identificação, no caso “CODMUNI”. A última precisa estar “disponível”
no wokspace. Isto é alcançado “anexando” os dados do quadro que contêm a variável. Em nosso
caso, este é o quadro “Minas”. Anexando o quadro de dados, as variáveis podem ser acessadas
por meio de seus nomes como IP_91, ao invés de ser necessário usar o comando mais extenso
“Minas$CODMUNI”. Anexando os quadros de dados “Minas”:
attach(Minas)
Para conferir se o banco de dados foi anexado:
Summary(Minas)
6
Agora, vamos usar o arquivo k-Nearest.gwt como o lista de visinhos, usando
CODMUNI como o ID para a região e seguindo por um “summary”, com o nomer de polgwt,
usando o comando read.gwt2nb, o arquivo de Vizinhos k-Nearest.gwt:
polgwt <- read.gwt2nb("C:/Users/Samuel/Documents/Artigos & Projetos/Spatial/k-
Nearest.gwt",region.id=CODMUNI)
summary(polgwt)
Neighbour list object:
Number of regions: 853
Number of nonzero links: 4265
Percentage nonzero weights: 0.5861665
Average number of links: 5
Non-symmetric neighbours list
Link number distribution:
5
853
853 least connected regions:
10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160 163 170 180 190 200 205 5350 210 220 230
(Omitido)
6840 6850 6860 6870 6880 6890 6900 6905 6910 6920 6930 6935 6940 6950 6960 6970 6980 6990 7000 7005 7010
7020 7030 7040 7043 7047 7050 7052 7057 7060 7065 7070 7075 7080 7090 7100 7220 7103 7107 7110 7115 7120
7130 7140 7160 7170 7180 7190 7200 7210 with 5 links
853 most connected regions:
10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160 163 170 180 190 200 205 5350 210 220 230
(Omitido)
7220 7103 7107 7110 7115 7120 7130 7140 7160 7170 7180 7190 7200 7210 with 5 links
1.6. Checagem de simetria para a lista de vizinhos
Uma função usual é uma checagem para a simetria da lista de vizinhos. Pesos espaciais
baseados na “contiguity” devem ser simétricos, enquanto pesos derivados da uma realação de k-
vizinhos mais próximos são tipicamente não simétricos. A função “is.symmetric.nb” disponível
no pacote spdep. Esta utiliza o nome dos objetos vizinhos como argumento. Por exemplo, para
pesos baseados em GAL, em que polgal é o nome usado anteriormente na importação dos pesos
para o R:
print(is.symmetric.nb(polgal))
7
[1] TRUE
e para os pesos baseados no arquivo GWT, em que polgwt é o nome dado na
importação dos pesos GWT como anteriormente feito.
print(is.symmetric.nb(polgwt))
8
2. Análise da Autocorrelação Espacial no R
Nessa seção é ilustrado como analisar a autocorelação espacial no R, usando o pacote
spdep, explorando gráficos, testes, etc. Será necessário que o pacote esteja carregado na
memória do programa. Se não estiver use o comando “library(spdep). Também será necessário
o arquivos de pesos e de dados, como descrito anteriormente nas seções 1.3 a 1.5 a
operacionalização para a importação.
2.1. Convertendo a lista de vizinhos para pesos especiais
Para os testes de autocorrelação espacial e diagnóstico espacial na análise de regressão,
um tipo diferente de objeto é usado, um objeto de pesos espaciais (um objeto da classe listw).
Podemos converter um objeto nb, criados anteriormente, pode ser transformado em um objeto
listw por meio da função nb2listw. Usando a ajuda do programa para essa função –
help(nb2listw) – os parâmetro listados abaixo e as configurações padrão:
Uso:
nb2listw(neighbours, glist=NULL, style="W", zero.policy=FALSE)
Argumentos:
neighbours: objeto da classe “nb”;
glist: lista geral dos pesos correspondentes aos vizinhos;
style: ’style’ pode assumer os valores W, B, C, U, e S;
zero.policy: Se FALSE, a configuração encerra com um erro para qualquer vizinho
próximo, se TRUE permite que a lista de pesos seja formada com um vetor de pesos com
distância nula.
Deve-se observar como as “ilhas” serão tratadas pelo programa. O padrão do programa
zero.policy = FALSE, o que para o programa quando ilhas são encontradas. Para permitir as
“ilhas”, defina explicitamente zero.policy = TRUE. Como antes, se estiver satisfeito com as
configurações padrão, não há necessidade de especificar qualquer um dos parâmetros, bastando
apenas nb2listw (objeto vizinho).
9
A função adiciona uma lista de pesos com valores dados pelo esquema da codificação
escolhida. B é um código binário básico, W é uma linha padronizada (soma de todos os links
para n), C esta globalmente padronizando (soma de todos os links para n), U é igual a C,
divididos pelo número de vizinhos (soma de todos os links para a unidade ), enquanto S é
codificado pela variância padronizada , como proposto por Tiefelsdorf et al. (1999), p. 167-168
(somas de todos os links para n) (BIVAND, 2010).
Exemplo:
library(spdep)
Minas <- read.csv ("C:/Users/Samuel/Documents/Artigos &
Projetos/Spatial/Testando.txt",header=TRUE,skip=1)
polgal <- read.gal("C:/Users/Samuel/Documents/Artigos &
Projetos/Spatial/Queen.gal",override.id=TRUE)
Será usado o objeto “Queen.gal”, uma lista de vizinhos para “queen contiguity”. Desde
que não há ilhas em Queen e o padrão para a padronização das linhas (style="W") esta certo,
nós podemos apenas especificar o nome da lista de vizinhos:
colqueen <- nb2listw(polgal)
Para checar se a lista de vizinhos foi convertida para a classe “listw”:
class (colqueen)
"listw" "nb"
E “summary” gera as mesmas informações de ligação, como para o objeto “nb”.
Entretanto, o resumo das medidas para os pesos foram pré-calculados, como os traços (de
matrizes) usados nas estatísticas de teste, mais precisamente nn, SO, S1 e S2.
> summary(colqueen)
Characteristics of weights list object:Neighbour list object:Number of regions: 853 Number of nonzero links: 4898 Percentage nonzero weights: 0.6731637 Average number of links: 5.742087 Link number distribution:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 18
10
5 25 82 136 182 166 104 69 38 18 11 9 4 2 2 5 least connected regions:310 945 1640 2700 6670 with 1 link2 most connected regions:1340 2770 with 18 links
Weights style: W Weights constants summary: n nn S0 S1 S2W 853 727609 853 321.7223 3593.489
Para visualizar os pesos reais contidos no objeto use colqueen$weights, que gerará uma
lista dos pesos espaciais para cada observação.
colqueen$weights
[[1]]
[1] 0.3333333 0.3333333 0.3333333
[[2]]
[1] 0.1666667 0.1666667 0.1666667 0.1666667 0.1666667 0.1666667
(Omitted)
[[852]]
[1] 0.1666667 0.1666667 0.1666667 0.1666667 0.1666667 0.1666667
[[853]]
[1] 0.3333333 0.3333333 0.3333333
attr(,"mode")
[1] "binary"
attr(,"W")
[1] TRUE
attr(,"comp")
attr(,"comp")$d
[1] 3 6 10 5 11 9 2 5 6 8 4 8 4 2 6 10 4 6 5 6 6 3 4 9 4 6 4 5 7 10 5 5 7 1 4 5
(Omitted)
5 7 5 3 4 4 6 5 6 6 5 3 4 4 5 3 6 8 5 6 7 4 4 6 3
2.2. Teste I de Moran
O teste I de Moran para autocorrelação espacial é implementado no pacote spdep,
podendo ser usadas duas funções diferentes: “moran.test” em que a inferência é baseada na
pressupocição de normalidade ou aleatoriedade; “moran.mc”, para um teste baseado em
permutação. Ambos os testes necessitam do nome da variável e do vetor ou objeto ou lista dos
11
pesos espaciais (listw), sendo que “moran.mc” também necessita do número de permutações
como terceiro parâmetro.
Usage
moran.test(x, listw, randomisation=TRUE, zero.policy=NULL, alternative="greater",
rank = FALSE, na.action=na.fail, spChk=NULL, adjust.n=TRUE)
Arguments
x - vetor numérico do mesmo tamanho que a lista de vizinhos em listw
listw - objeto listw criado como exemplificado na seção 2.1. usando nb2listw
randomization – variância do I calculado com base na pressuposição de aleatoriedade,
se FALSE para normalidade
zero.policy - default NULL, usa a opção valor global, se TRUE for atribuído, zera o
valor defasado das zonas sem vizinhos, se FALSE atribui NA (Não disponível/aplicável)
alternative – cadeia de caracteres que especifica a hipótese alternativa, deve ser
greater (padrão), less ou two.sided.
rank – o padrão é FALSE para variáveis contínuas, se TRUE, usa a adaptação para o
teste I de Moran proposta por Cliff and Ord (1981) p. 46.
na.action - uma função (padrão na.fail), também pode ser na.omit ou na.exclude –
nestes casos, a lista de pesos será subsetted para remover NAs nos dados. Pode ser necessário
para definir zero.policy como TRUE porque esse sub-configuração pode criar observações não
vizinhas. Note que apenas a lista de pesos criadas sem usar o argumento glist em nb2listw pode
ser subsetted. Se na.pass é usado, zero é substituída por valores NA no cálculo da defasagem
espacial
spChk – os nomes dados vetoriais devem ser checadas com os objetos espaciais para
identificar a integridade, TRUE ou FALSE, defaul NULL para usar get.spChkOption ()
adjust.n – padrão TRUE, se é selecionado FALSE, o número de observações não é
ajustado para as observações sem vizinhos, se TRUE, o número de observações é ajustado
Value
12
A list with class htest containing the following components:
statistic - the value of the standard deviate of Moran’s I.
p.value - the p-value of the test.
Estimate the value of the observed Moran’s I, its expectation and variance under the
method assumption.
alternative - a character string describing the alternative hypothesis.
method - a character string giving the assumption used for calculating the standard
deviate.
data.name - a character string giving the name(s) of the data.
Das opções para os parâmetros, apenas duas são importantes. A opção “randomization”
é a configuração TRUE por padrão, que implica que para obter inferência baseada na
aproximação normal, esta precisa ser explicitada como FALSE. Similarmente, o padrão é o teste
unilateral, então para obter os resultados (mais usual) para um teste bicaudal, a opção alternativa
precisa ser explicitada “two.sided”. Note também que a opção “zero.policy” é definida como
FALSE por padrão, que significa que ilhas resultam no código para valores perdidos (NA).
Definir esta opção como TRUE irá definir a defasagem espacial para as ilhas com o habitual
valor zero.
Para exemplificar, usando a variável IP_91 e os pesos da lista colqueen com
aproximação normal bicaudal:
Antes:
library (spdep)
Minas <- read.csv ("C:/Users/Samuel/Documents/Artigos &
Projetos/Spatial/Testando.txt",header=TRUE,skip=1)
attach(Minas)
polgal <- read.gal("C:/Users/Samuel/Documents/Artigos &
Projetos/Spatial/Queen.gal",override.id=TRUE)
colqueen <- nb2listw(polgal)
O teste I de Moran: moran.test(IP_91,colqueen,randomisation=FALSE,alternative="two.sided")
13
Moran's I test under normality
data: IP_91 weights: colqueen Moran I statistic standard deviate = 17.8442, p-value < 2.2e-16alternative hypothesis: two.sided sample estimates:Moran I statistic Expectation Variance 0.3727554942 -0.0011737089 0.0004391199
2.3. Moran Scatter Plot
O gráfico de dispersão de Moran está disponível no package spdep. O gráfico é
implementado por meio da função moran.plot. Esta função necessita, como argumentos, nome
de variável em questão, seguido por um objeto de pesos espaciais da classe listw. Parâmetros
opcionais são zero.policy, que permite refinar a rotulagem dos pontos de grande influência, os
eixos X e Y, e os diversos parâmetros gráficos (passado como no par (..)). A função moran.plot
também cria o chamado objeto "influência", por meio da opção influence.measures, passou
para trás do modelo de regressão e é usado para estimar a inclinação (Moran's I). Definindo a
opção quiet = TRUE, esta suprime as medidas de influência (o padrão é quiet = FALSE).
moran.plot(IP_91,colqueen)
14
3. Estimando modelo de autocorrelação especial com heterocedasticidade
com erro espacial.
Considere o seguinte modelo especial
y=Xβ+λWy+ε (1)
ou de maneira compacta,
y=Zγ+ε (2)
com Z=[ X ,Wy ] e γ=[ βT , λ ]T. A presença da variável dependente defasada espacialmente Wy
introduz uma forma de endogeneidade. Sobre as especificações típicas, Wy será correlacionada
com os distúrbios ε , o que motiva a abordagem de variáveis instrumentais. Em problemas
empíricos, a matrix de instrumentos pode ser definida da seguinte maneira:
H=(X ,WX , …, W q X ) (3)
onde, tipicamente, q ≤ 2. A matriz de instrumentos implementada no package sphet é
H=(X ,WX , W 2 X ). O estimador de mínimos quadrados de dois estágios espacial (S2SLS)
para o parâmetro γ pode ser definido como:
γ .S 2 SLS=[ Z .T Z ]−1 Z .T y (4)
onde Z=PZ=[ X ,Wy ] , Wy=PWy e P=H (HT H)−1 HT .
Entretanto, considere que o processo de perturbação é conhecido como sendo
autorregressivo de primeira ordem, sendo expresso por:
ε=ρWε+ξ (5)
onde ξ1 ,… ,ξn são assumidos como independentes com média zero e variância não constante
desconhecida σ i2. Kelejian e Pruncha (2010) definiram um estimador por generalized moments
(GM) para ρ que obtêm estimativas tanto consistentes e assintoticamente normais, permitindo
defasagem espacial na variável dependente e nos distúrbios. O processo de estimação sugerido
por Kelejian e Pruncha (2010) consiste em duas etapas alterando entre GM e variáveis
instrumentais (IV). Na primeira etapa γ é estimado por S2SLS. Os resíduos do modelo são
primeiramente empregados para obter um estimador inicial ρ (consistente, mas não eficiente)
15
por GM e então um estimador consistente e eficiente (envolvendo a matriz de variância-
covariância da distribuição limitada da amostra normalizada moments). Na segunda etapa, a
transformação de Cochrane-Orcutt do modelo espacial é estimada por S2SLS. Isto corresponde
à estimação por mínimos quadrados generalizados de dois estágios especial (GS2SLS).
Especificamente, o estimador GS2SLS para o parâmetro γ é definido como:
γ .S 2 SLS=[ Z .¿T Z¿]
−1 Z .¿T y¿ (6)
em que y¿= y− ρ Wy ,Z¿=Z− ρWy , Z¿=P Z¿ e P=H (HT H)−1 HT . No segundo e último
passo da segunda etapa, uma nova “sample moments” é obtido substituindo os resíduos
estimados por S2SLS pelos resíduos estimador por GS2SLS obtidos a partir da Equação 6. O
estimador GM eficiente para ρ com base no resíduo GS2SLS é obtido de:
~ρ=armminρ
[m ( ρ , γ )T Υ .−1 m ( ρ , γ )].
(7)
Exemplificando a estimação no R. Inicialmente será estimado o modelo com defasagem
na variável dependente e nos resíduos, desta forma a opção sarar=TRUE.
Refazendo os passos das seções 1 e 2 necessários novamente:
library(spdep)
Minas <- read.csv ("C:/Users/Samuel/Documents/Artigos &
Projetos/Spatial/Testando.txt",header=TRUE,skip=1)
polgal <- read.gal("C:/Users/Samuel/Documents/Artigos &
Projetos/Spatial/Queen.gal",override.id=TRUE)
colqueen <- nb2listw(polgal)
Carregando o pacote sphet para permitir a correção de heterocedasticidade
(considerando que este já esteja instalado no computador):
library(sphet)
res<-gstslshet(TX_CRESC_9~LN_IP_91, data=Minas, listw=colqueen,
initial.value=0.2, sarar=TRUE)
summary(res)
Generalized stsls
16
Call:gstslshet(formula = TX_CRESC_9 ~ LN_IP_91, data = Minas, listw = colqueen, initial.value = 0.2, sarar = TRUE)
Residuals: Min. 1st Qu. Median Mean 3rd Qu. Max. -2.71000 -0.39400 0.00693 0.01280 0.45600 2.54000
Coefficients: Estimate Std. Error t-value Pr(>|t|) (Intercept) 0.916362 0.075270 12.1743 < 2.2e-16 ***LN_IP_91 -0.414013 0.035028 -11.8194 < 2.2e-16 ***lambda -0.681470 0.153694 -4.4339 9.253e-06 ***rho 0.753738 0.042761 17.6269 < 2.2e-16 ***---Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Wald test that rho and lambda are both zero: Statistics: 0.28811 p-val: 0.59143
Estimado o modelo com defasagem nos resíduos, desta forma a opção sarar=FALSE.
res2<-gstslshet(TX_CRESC_9~LN_IP_91, data=Minas, listw=colqueen,
initial.value=0.2, sarar=FALSE)
summary(res2)
Generalized stslsCall:gstslshet(formula = TX_CRESC_9 ~ LN_IP_91, data = Minas, listw = colqueen, initial.value = 0.2, sarar = FALSE)
Residuals: Min. 1st Qu. Median Mean 3rd Qu. Max. -2.20000 -0.32600 -0.01010 0.00392 0.33200 2.12000
Coefficients: Estimate Std. Error t-value Pr(>|t|) (Intercept) 0.739103 0.044374 16.656 < 2.2e-16 ***LN_IP_91 -0.395362 0.032688 -12.095 < 2.2e-16 ***rho 0.505610 0.044172 11.447 < 2.2e-16 ***---Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
4. Referências
ANSELIN, L. (2005). Spatial Regression Analysis in R - A Workbook. Disponível em
<geodacenter.asu.edu/system/files/rex1.pdf>. Acesso em 30 ago 2010.
17
KELEJIAN, H.H; PRUNCHA, I.R. Specification estimation spatial autoregressive
models autoregressive heteroskedastic disturbances. Journal of Econometrics, v. 157,
n. 1, p. 53-67, 2010.
PIRAS, G. Package “sphet”. Disponível em <
http://cran.r-project.org/web/packages/sphet/sphet.pdf> Acesso em 25 set 2010.
PIRAS, G. sphet: spatial models with heteroskedastic innovations in R. Journal of
Statistical Software, v. 36, n. 1, p. 1-21, 2010.
18