Spatial Econometrics
Introduction to Spatial Econometrics
Syahla Anisah
Teori dan implementasi dasar Spatial Econometrics, meliputi:
1. Matriks Bobot Spasial
2. Model Spatial Lag (SAR) dan Spatial Error Model (SEM)
3. Pengujian Hipotesis Spatial
4. Contoh Simulasi Data Kota Bandung (30 Kecamatan)
5. Implementasi Model SAR dan SEM pada Data Simulasi
Data wilayah yang digunakan adalah data Kota Bandung
Kota Bandung sebagai ibu kota Provinsi Jawa Barat merupakan salah satu kota terbesar dan terpadat di Indonesia. Dengan 30 kecamatan yang memiliki karakteristik sosial-ekonomi beragam, Bandung menjadi lokasi ideal untuk analisis spasial.
Dalam analisis ekonometri tradisional, kita sering mengabaikan dependensi spasial yang mungkin muncul dari interaksi antar wilayah. Namun dalam realitasnya, kondisi suatu wilayah sering dipengaruhi oleh wilayah di sekitarnya. Fenomena ini dikenal sebagai efek spasial atau spatial spillover.
Indo_Kec<-readRDS('gadm36_IDN_3_sp.rds')
Bandung<-Indo_Kec[Indo_Kec$NAME_2 == "Kota Bandung",]
plot(Bandung)
# Assign ID
Bandung$id <- 1:30
Bandung_sf <- st_as_sf(Bandung)
Bandung_merged <- Bandung_sf %>% left_join(Diare, by = "id")
ggplot() +
geom_sf(data=Bandung_merged, aes(fill = Diare), color=NA) +
theme_bw() +
scale_fill_gradient(low = "yellow", high = "red") +
theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
legend.position = "right",
axis.text.x = element_blank(),
axis.text.y = element_blank()) +
labs(title = "", fill = "Diare")
summary(Diare$Diare)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 235.0 529.0 775.0 939.1 1119.2 2898.0
breaks <- c(-Inf, 550, 800, 1200,Inf)
# Define labels for each interval
labels <- c("Very Low", "Low", "High", "Very High")
# Create a new column with discretized Diare
Bandung_merged$Diare_Discrete <- cut(Bandung_merged$Diare, breaks = breaks, labels = labels, right = TRUE)
ggplot() +
geom_sf(data=Bandung_merged, aes(fill = Diare_Discrete), color=NA) +
theme_bw() +
scale_fill_manual(values = c("Very Low" = "yellow",
"Low" = "orange",
"High" = "red",
"Very High" = "red3")) +
theme(legend.position = "right",
axis.text.x = element_blank(),
axis.text.y = element_blank()) +
labs(title = "", fill = "Diare")
Matriks bobot spasial (spatial weight matrix) adalah komponen penting dalam ekonometri spasial yang memodelkan hubungan spasial antar lokasi. Matriks ini menggambarkan struktur ketergantungan spasial antar unit observasi.
Matriks bobot spasial W adalah matriks berukuran n × n (dengan n adalah jumlah observasi/lokasi) yang elemen-elemennya mewakili “kedekatan” atau “interaksi” antara lokasi i dan j. Matriks W dapat didefinisikan sebagai:
\(W = \begin{bmatrix} w_{11} & w_{12} & \ldots & w_{1n} \\ w_{21} & w_{22} & \ldots & w_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ w_{n1} & w_{n2} & \ldots & w_{nn} \end{bmatrix}\)
dimana \(w_{ij}\) mewakili hubungan spasial antara lokasi i dan j.
Matriks bobot sering distandarisasi untuk memudahkan interpretasi:
Row-standardization: Setiap baris matriks dijumlahkan hingga 1.
\(w_{ij}^{std} = \frac{w_{ij}}{\sum_{j=1}^{n} w_{ij}}\)
Binary weighting: Nilai 1 jika dua lokasi bertetangga, 0 jika tidak.
Variance-stabilizing (C-coding): Bobot distandarisasi dengan membagi faktor global.
Ilustrasi Tipe Matriks Bobot Spasial
Contoh kode R membuat matriks bobot:
# Membuat matriks bobot spasial dengan queen contiguity, zero.policy=TRUE
row.names(Bandung) <- as.character(1:30)
W_nb <- poly2nb(Bandung, row.names(Bandung), queen=FALSE)
listw <- nb2listw(W_nb, zero.policy=TRUE)
# Plot wilayah dan tetangga
CoordK <- coordinates(Bandung)
plot(Bandung, axes=TRUE, col="gray90")
text(CoordK[,1], CoordK[,2], row.names(Bandung), col="black", cex=0.8, pos=1.5)
points(CoordK[,1], CoordK[,2], pch=19, cex=0.7, col="blue")
plot.nb(W_nb, CoordK, add=TRUE, col="red", lwd=2)
idx <- complete.cases(Diare$Diare)
Diare_clean <- Diare[idx, ]
listw_clean <- subset.listw(listw, subset = idx)
print(table(card(listw_clean$neighbours)))
##
## 2 3 4 5 6 7
## 3 3 12 5 5 2
Global_Moran <- moran.test(Diare_clean$Diare, listw_clean, zero.policy=TRUE)
print(Global_Moran)
##
## Moran I test under randomisation
##
## data: Diare_clean$Diare
## weights: listw_clean
##
## Moran I statistic standard deviate = 0.67226, p-value = 0.2507
## alternative hypothesis: greater
## sample estimates:
## Moran I statistic Expectation Variance
## 0.04045578 -0.03448276 0.01242630
Local_Moran <- localmoran(Diare_clean$Diare, listw_clean, zero.policy=TRUE)
quadr_data <- attr(Local_Moran, "quadr")
mean_values <- quadr_data$mean
Bandung_sf_clean <- st_as_sf(Bandung)[idx, ]
Bandung_sf_clean$mean_values <- as.character(mean_values)
ggplot() +
geom_sf(data=Bandung_sf_clean, aes(fill=mean_values)) +
scale_fill_manual(values=c("Low-Low"="blue", "High-Low"="green", "Low-High"="yellow", "High-High"="red")) +
labs(title="Local Moran's I Mean Values in Bandung", fill="Mean Type") +
theme_minimal()
Diare_model <- Diare_clean
Diare.ols <- lm(Prevalensi ~ PHBS + Kepadatan, data=Diare_model)
summary(Diare.ols)
##
## Call:
## lm(formula = Prevalensi ~ PHBS + Kepadatan, data = Diare_model)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.0072 -0.5862 -0.1094 0.3048 3.2325
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 2.628067 0.998838 2.631 0.0139 *
## PHBS -0.012999 0.011047 -1.177 0.2496
## Kepadatan -0.003325 0.002415 -1.377 0.1800
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.872 on 27 degrees of freedom
## Multiple R-squared: 0.07665, Adjusted R-squared: 0.00825
## F-statistic: 1.121 on 2 and 27 DF, p-value: 0.3408
plot(Diare.ols)
LM <- lm.LMtests(Diare.ols, listw_clean, test="all", zero.policy=TRUE)
## Please update scripts to use lm.RStests in place of lm.LMtests
print(LM)
##
## Rao's score (a.k.a Lagrange multiplier) diagnostics for spatial
## dependence
##
## data:
## model: lm(formula = Prevalensi ~ PHBS + Kepadatan, data = Diare_model)
## test weights: listw
##
## RSerr = 0.22911, df = 1, p-value = 0.6322
##
##
## Rao's score (a.k.a Lagrange multiplier) diagnostics for spatial
## dependence
##
## data:
## model: lm(formula = Prevalensi ~ PHBS + Kepadatan, data = Diare_model)
## test weights: listw
##
## RSlag = 0.14934, df = 1, p-value = 0.6992
##
##
## Rao's score (a.k.a Lagrange multiplier) diagnostics for spatial
## dependence
##
## data:
## model: lm(formula = Prevalensi ~ PHBS + Kepadatan, data = Diare_model)
## test weights: listw
##
## adjRSerr = 0.27935, df = 1, p-value = 0.5971
##
##
## Rao's score (a.k.a Lagrange multiplier) diagnostics for spatial
## dependence
##
## data:
## model: lm(formula = Prevalensi ~ PHBS + Kepadatan, data = Diare_model)
## test weights: listw
##
## adjRSlag = 0.19957, df = 1, p-value = 0.6551
##
##
## Rao's score (a.k.a Lagrange multiplier) diagnostics for spatial
## dependence
##
## data:
## model: lm(formula = Prevalensi ~ PHBS + Kepadatan, data = Diare_model)
## test weights: listw
##
## SARMA = 0.42869, df = 2, p-value = 0.8071
Model SAR, juga disebut Spatial Lag Model, mengasumsikan bahwa nilai variabel dependen di suatu lokasi dipengaruhi oleh nilai variabel dependen di lokasi tetangga, selain faktor independen.
Secara matematis, model SAR dinyatakan sebagai:
\(Y = \rho WY + X\beta + \varepsilon\)
dimana: - \(Y\) adalah vektor nilai variabel dependen - \(\rho\) adalah parameter autoregresif spasial - \(W\) adalah matriks bobot spasial - \(WY\) adalah spatial lag dari Y - \(X\) adalah matriks variabel independen - \(\beta\) adalah vektor koefisien parameter - \(\varepsilon\) adalah vektor error (diasumsikan \(\varepsilon \sim N(0, \sigma^2I)\))
Interpretasi parameter dalam model SAR:
Dalam model SAR, efek marginal tidak langsung diperoleh dari bentuk tereduksi model:
\(Y = (I - \rho W)^{-1}X\beta + (I - \rho W)^{-1}\varepsilon\)
Ini berarti perubahan variabel independen di satu lokasi memengaruhi variabel dependen di semua lokasi (dengan efek yang berkurang seiring jarak), sehingga menghasilkan efek:
sar.Diare <- lagsarlm(Prevalensi ~ PHBS + Kepadatan, data=Diare_model, listw=listw_clean, zero.policy=TRUE)
summary(sar.Diare)
##
## Call:lagsarlm(formula = Prevalensi ~ PHBS + Kepadatan, data = Diare_model,
## listw = listw_clean, zero.policy = TRUE)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.02698 -0.56529 -0.12428 0.30811 3.21625
##
## Type: lag
## Coefficients: (asymptotic standard errors)
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 2.8112361 1.0066961 2.7925 0.00523
## PHBS -0.0138353 0.0104439 -1.3247 0.18526
## Kepadatan -0.0033585 0.0022850 -1.4698 0.14163
##
## Rho: -0.097136, LR test value: 0.14535, p-value: 0.70302
## Asymptotic standard error: 0.26437
## z-value: -0.36743, p-value: 0.7133
## Wald statistic: 0.135, p-value: 0.7133
##
## Log likelihood: -36.8056 for lag model
## ML residual variance (sigma squared): 0.67957, (sigma: 0.82436)
## Number of observations: 30
## Number of parameters estimated: 5
## AIC: 83.611, (AIC for lm: 81.757)
## LM test for residual autocorrelation
## test value: 0.15074, p-value: 0.69783
sar2sls.Diare <- stsls(Prevalensi ~ PHBS + Kepadatan, data=Diare_model, listw=listw_clean, zero.policy=TRUE)
summary(sar2sls.Diare)
##
## Call:stsls(formula = Prevalensi ~ PHBS + Kepadatan, data = Diare_model,
## listw = listw_clean, zero.policy = TRUE)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.95775 -0.86809 -0.14850 0.79392 3.03386
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## Rho -2.4145328 3.1173479 -0.7745 0.4386
## (Intercept) 7.1811683 6.0915490 1.1789 0.2384
## PHBS -0.0337948 0.0321396 -1.0515 0.2930
## Kepadatan -0.0041641 0.0040115 -1.0380 0.2992
##
## Residual variance (sigma squared): 1.9444, (sigma: 1.3944)
## Anselin-Kelejian (1997) test for residual autocorrelation
## test value: 0.52093, p-value: 0.47044
Diare_model$Diare.ols.res <- resid(Diare.ols)
Diare_model$Diare.sar.res <- resid(sar.Diare)
Bandung@data <- Diare_model
spplot(Bandung, "Diare.ols.res",
at=seq(min(Bandung$Diare.ols.res, na.rm=TRUE),
max(Bandung$Diare.ols.res, na.rm=TRUE), length=12),
col.regions=rev(brewer.pal(11, "RdBu")))
spplot(Bandung, "Diare.sar.res",
at=seq(min(Bandung$Diare.sar.res, na.rm=TRUE),
max(Bandung$Diare.sar.res, na.rm=TRUE), length=12),
col.regions=rev(brewer.pal(11, "RdBu")))
impacts(sar.Diare, listw=listw_clean)
## Impact measures (lag, exact):
## Direct Indirect Total
## PHBS -0.013864508 0.0012541191 -0.012610389
## Kepadatan -0.003365544 0.0003044315 -0.003061113
Model SEM mengasumsikan bahwa dependensi spasial hanya terjadi pada komponen error, bukan pada variabel dependen. Ini dapat terjadi ketika faktor yang tidak teramati atau terukur memiliki pola spasial.
Secara matematis, model SEM dinyatakan sebagai:
\(Y = X\beta + u\) \(u = \lambda Wu + \varepsilon\)
dimana: - \(Y\) adalah vektor nilai variabel dependen - \(X\) adalah matriks variabel independen - \(\beta\) adalah vektor koefisien parameter - \(u\) adalah vektor error terspasialkan - \(\lambda\) adalah parameter error spasial - \(W\) adalah matriks bobot spasial - \(\varepsilon\) adalah vektor error (diasumsikan \(\varepsilon \sim N(0, \sigma^2I)\))
Bentuk tereduksi dari model SEM:
\(Y = X\beta + (I - \lambda W)^{-1}\varepsilon\)
Interpretasi parameter dalam model SEM:
errorsalm.Diare <- errorsarlm(Prevalensi ~ PHBS + Kepadatan, data=Diare_model, listw=listw_clean, zero.policy=TRUE)
summary(errorsalm.Diare)
##
## Call:errorsarlm(formula = Prevalensi ~ PHBS + Kepadatan, data = Diare_model,
## listw = listw_clean, zero.policy = TRUE)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.04284 -0.55891 -0.12354 0.30761 3.19555
##
## Type: error
## Coefficients: (asymptotic standard errors)
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 2.7387708 0.9262401 2.9569 0.003108
## PHBS -0.0147006 0.0101926 -1.4423 0.149221
## Kepadatan -0.0032921 0.0022216 -1.4819 0.138376
##
## Lambda: -0.1277, LR test value: 0.23418, p-value: 0.62845
## Asymptotic standard error: 0.27122
## z-value: -0.47083, p-value: 0.63776
## Wald statistic: 0.22168, p-value: 0.63776
##
## Log likelihood: -36.76118 for error model
## ML residual variance (sigma squared): 0.67652, (sigma: 0.82251)
## Number of observations: 30
## Number of parameters estimated: 5
## AIC: 83.522, (AIC for lm: 81.757)
fgls.Diare <- GMerrorsar(Prevalensi ~ PHBS + Kepadatan, data=Diare_model, listw=listw_clean, zero.policy=TRUE)
summary(fgls.Diare)
##
## Call:GMerrorsar(formula = Prevalensi ~ PHBS + Kepadatan, data = Diare_model,
## listw = listw_clean, zero.policy = TRUE)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.015843 -0.583648 -0.099188 0.305259 3.221005
##
## Type: GM SAR estimator
## Coefficients: (GM standard errors)
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 2.6857318 0.9368412 2.8668 0.004147
## PHBS -0.0138851 0.0103359 -1.3434 0.179148
## Kepadatan -0.0033074 0.0022558 -1.4661 0.142613
##
## Lambda: -0.063722 (standard error): 0.48559 (z-value): -0.13123
## Residual variance (sigma squared): 0.67996, (sigma: 0.8246)
## GM argmin sigma squared: 0.69511
## Number of observations: 30
## Number of parameters estimated: 5
Pada bagian ini, kita akan membuat data simulasi untuk 30 kecamatan di Kota Bandung. Dataset ini akan mencakup:
Data spasial (shapefile sederhana) untuk representasi geografis kecamatan
# Set seed untuk reproduksibilitas
set.seed(1234)
# Membaca data peta Bandung
Indo_Kec <- readRDS('gadm36_IDN_3_sp.rds')
Bandung <- Indo_Kec[Indo_Kec$NAME_2 == "Kota Bandung",]
plot(Bandung, main = "Peta Kota Bandung dengan 30 Kecamatan")
# Membuat matriks pembobot queen contiguity
W <- poly2nb(Bandung, row.names=rownames(Bandung), queen=TRUE)
WB <- nb2mat(W, style='B', zero.policy = TRUE)
WL <- nb2listw(W)
# Menampilkan 5x5 pertama dari matriks bobot
WB[1:5,1:5]
## [,1] [,2] [,3] [,4] [,5]
## 6199 0 0 0 1 1
## 6210 0 0 1 0 0
## 6221 0 1 0 0 0
## 6223 1 0 0 0 0
## 6224 1 0 0 0 0
# Informasi tentang matriks bobot
WL
## Characteristics of weights list object:
## Neighbour list object:
## Number of regions: 30
## Number of nonzero links: 140
## Percentage nonzero weights: 15.55556
## Average number of links: 4.666667
##
## Weights style: W
## Weights constants summary:
## n nn S0 S1 S2
## W 30 900 30 13.81692 123.3523
plot(Bandung, border = "gray", main = "Visualisasi Queen")
coords <- coordinates(Bandung)
plot(W, coords, add = TRUE, col = "blue", lwd = 1)
points(coords, pch = 20, col = "red")
text(coords, labels = 1:nrow(Bandung), cex = 0.6, pos = 3)
# Jumlah observasi (kecamatan)
n <- length(Bandung)
# Membuat variabel independen
X1 <- rnorm(n, mean = 50, sd = 10) # Misalnya: tingkat pendidikan
X2 <- rnorm(n, mean = 30, sd = 5) # Misalnya: sarana kesehatan
X3 <- rnorm(n, mean = 40, sd = 8) # Misalnya: tingkat kepadatan penduduk
# Parameter untuk dependensi spasial
beta0 <- 10 # Intercept
beta1 <- 0.5 # Koefisien X1
beta2 <- 0.8 # Koefisien X2
beta3 <- -0.3 # Koefisien X3
rho <- 0.6 # Parameter autoregresif spasial (untuk SAR)
lambda <- 0.5 # Parameter error spasial (untuk SEM)
# Matriks pembobot row-standardized untuk simulasi
Wrs <- nb2listw(W, style = "W", zero.policy = TRUE)
W_mat <- listw2mat(Wrs)
# Membuat error dengan dependensi spasial (untuk SEM)
error <- rnorm(n, mean = 0, sd = 5)
error_spatial <- solve(diag(n) - lambda * W_mat) %*% error
# Membuat variabel dependen dengan efek lag spasial (untuk SAR)
X <- cbind(rep(1, n), X1, X2, X3)
beta <- c(beta0, beta1, beta2, beta3)
mu <- X %*% beta
# Y dengan efek SAR
I_mat <- diag(n)
Y_SAR <- solve(I_mat - rho * W_mat) %*% (mu + rnorm(n, mean = 0, sd = 3))
# Data simulasi final
data_sim <- data.frame(
Y = as.numeric(Y_SAR),
X1 = X1,
X2 = X2,
X3 = X3
)
# Menambahkan data simulasi ke objek spasial
Bandung@data <- cbind(Bandung@data, data_sim)
# Rangkuman data simulasi
summary(data_sim)
## Y X1 X2 X3
## Min. : 97.04 Min. :26.54 Min. :19.10 Min. :28.87
## 1st Qu.:103.74 1st Qu.:41.23 1st Qu.:24.46 1st Qu.:36.85
## Median :108.00 Median :44.99 Median :26.29 Median :39.25
## Mean :109.04 Mean :47.04 Mean :27.24 Mean :41.11
## 3rd Qu.:111.71 3rd Qu.:52.42 3rd Qu.:28.31 3rd Qu.:45.24
## Max. :124.42 Max. :74.16 Max. :38.24 Max. :60.39
# Visualisasi sebaran data Y
spplot(Bandung, "Y", main = "Sebaran Nilai Y di Kota Bandung")
# Uji Moran untuk variabel Y
Global_Moran <- moran.test(Bandung$Y, WL)
Global_Moran
##
## Moran I test under randomisation
##
## data: Bandung$Y
## weights: WL
##
## Moran I statistic standard deviate = 0.42819, p-value = 0.3343
## alternative hypothesis: greater
## sample estimates:
## Moran I statistic Expectation Variance
## 0.01414324 -0.03448276 0.01289631
# Visualisasi Moran Scatterplot
moran.plot(Bandung$Y, WL, labels=as.character(1:n),
xlab="Y", ylab="Spasial Lag Y")
# Model OLS
model_ols <- lm(Y ~ X1 + X2 + X3, data = Bandung@data)
summary(model_ols)
##
## Call:
## lm(formula = Y ~ X1 + X2 + X3, data = Bandung@data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -7.307 -2.099 -0.267 1.639 5.800
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 77.46768 4.94827 15.655 9.43e-15 ***
## X1 0.50361 0.06761 7.449 6.56e-08 ***
## X2 0.96776 0.12640 7.656 3.99e-08 ***
## X3 -0.44939 0.07979 -5.632 6.39e-06 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 3.16 on 26 degrees of freedom
## Multiple R-squared: 0.805, Adjusted R-squared: 0.7825
## F-statistic: 35.77 on 3 and 26 DF, p-value: 2.236e-09
# Uji Moran pada residual model OLS
moran.test(residuals(model_ols), WL)
##
## Moran I test under randomisation
##
## data: residuals(model_ols)
## weights: WL
##
## Moran I statistic standard deviate = 1.1415, p-value = 0.1268
## alternative hypothesis: greater
## sample estimates:
## Moran I statistic Expectation Variance
## 0.09449947 -0.03448276 0.01276763
# Diagnostik efek spasial untuk model OLS
lm.LMtests(model_ols, WL, test = c("LMerr", "LMlag", "RLMerr", "RLMlag", "SARMA"))
## Please update scripts to use lm.RStests in place of lm.LMtests
##
## Rao's score (a.k.a Lagrange multiplier) diagnostics for spatial
## dependence
##
## data:
## model: lm(formula = Y ~ X1 + X2 + X3, data = Bandung@data)
## test weights: listw
##
## RSerr = 0.58169, df = 1, p-value = 0.4457
##
##
## Rao's score (a.k.a Lagrange multiplier) diagnostics for spatial
## dependence
##
## data:
## model: lm(formula = Y ~ X1 + X2 + X3, data = Bandung@data)
## test weights: listw
##
## RSlag = 6.4255, df = 1, p-value = 0.01125
##
##
## Rao's score (a.k.a Lagrange multiplier) diagnostics for spatial
## dependence
##
## data:
## model: lm(formula = Y ~ X1 + X2 + X3, data = Bandung@data)
## test weights: listw
##
## adjRSerr = 1.049, df = 1, p-value = 0.3057
##
##
## Rao's score (a.k.a Lagrange multiplier) diagnostics for spatial
## dependence
##
## data:
## model: lm(formula = Y ~ X1 + X2 + X3, data = Bandung@data)
## test weights: listw
##
## adjRSlag = 6.8929, df = 1, p-value = 0.008654
##
##
## Rao's score (a.k.a Lagrange multiplier) diagnostics for spatial
## dependence
##
## data:
## model: lm(formula = Y ~ X1 + X2 + X3, data = Bandung@data)
## test weights: listw
##
## SARMA = 7.4746, df = 2, p-value = 0.02382
# Model SAR
model_sar <- lagsarlm(Y ~ X1 + X2 + X3, data = Bandung@data, listw = WL)
summary(model_sar, Nagelkerke = TRUE)
##
## Call:lagsarlm(formula = Y ~ X1 + X2 + X3, data = Bandung@data, listw = WL)
##
## Residuals:
## Min 1Q Median 3Q Max
## -5.006991 -1.640506 0.073295 1.809233 5.935851
##
## Type: lag
## Coefficients: (asymptotic standard errors)
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 31.498506 15.819331 1.9911 0.04647
## X1 0.525711 0.055483 9.4751 < 2.2e-16
## X2 1.027520 0.106246 9.6711 < 2.2e-16
## X3 -0.430536 0.065382 -6.5850 4.55e-11
##
## Rho: 0.38813, LR test value: 6.6643, p-value: 0.0098362
## Asymptotic standard error: 0.13009
## z-value: 2.9835, p-value: 0.0028498
## Wald statistic: 8.9012, p-value: 0.0028498
##
## Log likelihood: -71.60571 for lag model
## ML residual variance (sigma squared): 6.6769, (sigma: 2.584)
## Nagelkerke pseudo-R-squared: 0.84382
## Number of observations: 30
## Number of parameters estimated: 6
## AIC: 155.21, (AIC for lm: 159.88)
## LM test for residual autocorrelation
## test value: 0.37813, p-value: 0.53861
# Menghitung efek tanpa menggunakan impacts() yang mungkin menyebabkan error
# Menampilkan koefisien dan parameter spasial secara langsung
coefficients_sar <- coefficients(model_sar)
rho_value <- model_sar$rho
# Membuat tabel koefisien model SAR
coef_table <- data.frame(
Variable = names(coefficients_sar),
Coefficient = as.numeric(coefficients_sar)
)
print("Koefisien Model SAR:")
## [1] "Koefisien Model SAR:"
print(coef_table)
## Variable Coefficient
## 1 rho 0.3881319
## 2 (Intercept) 31.4985060
## 3 X1 0.5257108
## 4 X2 1.0275197
## 5 X3 -0.4305362
print(paste("Parameter spasial (rho):", rho_value))
## [1] "Parameter spasial (rho): 0.388131896104829"
# Jika ingin menghitung efek secara manual (tanpa impacts function)
# Ini adalah pendekatan sederhana tanpa menggunakan impacts()
X_names <- names(coefficients_sar)[-1] # Mengabaikan intercept
X_coef <- coefficients_sar[-1] # Koefisien X tanpa intercept
# Menghitung direct effect sederhana (perkiraan)
direct_effect <- X_coef
# Menghitung total effect sederhana (perkiraan)
total_effect <- X_coef / (1 - rho_value)
# Menghitung indirect effect sederhana (perkiraan)
indirect_effect <- total_effect - direct_effect
# Membuat tabel efek sederhana
simple_impacts <- data.frame(
Variable = X_names,
Direct = direct_effect,
Indirect = indirect_effect,
Total = total_effect
)
print("Efek Langsung, Tidak Langsung, dan Total (Pendekatan Sederhana):")
## [1] "Efek Langsung, Tidak Langsung, dan Total (Pendekatan Sederhana):"
print(simple_impacts)
## Variable Direct Indirect Total
## (Intercept) (Intercept) 31.4985060 19.980736 51.4792417
## X1 X1 0.5257108 0.333479 0.8591898
## X2 X2 1.0275197 0.651796 1.6793157
## X3 X3 -0.4305362 -0.273106 -0.7036422
# Model SEM
model_sem <- errorsarlm(Y ~ X1 + X2 + X3, data = Bandung@data, listw = WL)
summary(model_sem, Nagelkerke = TRUE)
##
## Call:errorsarlm(formula = Y ~ X1 + X2 + X3, data = Bandung@data, listw = WL)
##
## Residuals:
## Min 1Q Median 3Q Max
## -6.93233 -2.06613 -0.27223 1.63591 5.68268
##
## Type: error
## Coefficients: (asymptotic standard errors)
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 77.921094 4.200444 18.5507 < 2.2e-16
## X1 0.493585 0.061052 8.0847 6.661e-16
## X2 0.917909 0.110942 8.2738 2.220e-16
## X3 -0.416691 0.069617 -5.9855 2.157e-09
##
## Lambda: 0.29218, LR test value: 0.89327, p-value: 0.34459
## Asymptotic standard error: 0.2309
## z-value: 1.2654, p-value: 0.20574
## Wald statistic: 1.6012, p-value: 0.20574
##
## Log likelihood: -74.49123 for error model
## ML residual variance (sigma squared): 8.2316, (sigma: 2.8691)
## Nagelkerke pseudo-R-squared: 0.81069
## Number of observations: 30
## Number of parameters estimated: 6
## AIC: 160.98, (AIC for lm: 159.88)
Berdasarkan hasil analisis di atas: