之前我們提到用LM檢驗的方式,來判斷數據在空間上是否受到鄰近數據及其殘差的影響,但是LM檢驗是采用直接計算的方式,只關注了數據的殘差平方和,沒有數據關于依賴項的考慮,容易被結果誤導。
而LR檢驗雖然在結果上有時候跟LM的計算差不多,但是其意義和公式都是為了考慮鄰近數據對數據原本的影響,且更靈活,他在多出來的考慮項外多出一個系數用于判斷是否真的受到鄰近數據的影響(當然最好是先進行Moran'sI檢驗,對空間溢出性做判斷,這樣更嚴謹,因為有時候只對模型本身參數做計算檢驗會有幻覺,出現模型本身擬合很好,但是空間溢出性不顯著的結果)。
以下是LR-lag和LR-error的例子:
# 加載必要的包
library(spdep)
library(splm)# 生成模擬空間數據(示例)
set.seed(123)
n <- 100 # 100個觀測點
coords <- cbind(runif(n), runif(n)) # 隨機生成坐標
knn <- knn2nb(knearneigh(coords, k = 4)) # 基于KNN構建空間權重矩陣
W <- nb2listw(knn, style = "W") # 行標準化權重矩陣# 生成解釋變量和被解釋變量
X <- rnorm(n)
rho <- 0.5 # 空間自回歸系數(模擬真實存在空間滯后效應)
y <- solve(diag(n) - rho * listw2mat(W)) %*% (X * 1.5 + rnorm(n, sd = 0.5))# 估計 SAR 模型(含空間滯后項)
sar_model <- lagsarlm(y ~ X, listw = W, method = "eigen")# 估計 OLS 模型(無空間滯后項)
ols_model <- lm(y ~ X)# LR-lag 檢驗(比較 SAR 和 OLS)
LR_lag <- 2 * (logLik(sar_model) - logLik(ols_model))
p_value <- pchisq(LR_lag, df = 1, lower.tail = FALSE) # 自由度df=1(因為只檢驗rho是否=0)cat("LR-lag 統計量:", LR_lag, "\nP值:", p_value, "\n")
# 如果 P < 0.05,說明空間滯后項顯著,SAR 比 OLS 更好# 繼續使用之前生成的數據# 估計 SEM 模型(含空間誤差項)
sem_model <- errorsarlm(y ~ X, listw = W, method = "eigen")# 估計 OLS 模型(無空間誤差項)
ols_model <- lm(y ~ X)# LR-error 檢驗(比較 SEM 和 OLS)
LR_error <- 2 * (logLik(sem_model) - logLik(ols_model))
p_value <- pchisq(LR_error, df = 1, lower.tail = FALSE) # 自由度df=1(檢驗λ是否=0)cat("LR-error 統計量:", LR_error, "\nP值:", p_value, "\n")
# 如果 P < 0.05,說明空間誤差項顯著,SEM 比 OLS 更好
輸出:
LR-lag 統計量: 88.36325
P值: 5.447355e-21
LR-error 統計量: 56.78365
P值: 4.864945e-14
這里的輸出顯示兩個p值都小于,結果顯著,推翻原假設,即不能退化為SAR或SEM模型,要用SDM,即杜賓模型去擬合數據。不過要特別注意的是,有時候會出現Wald檢驗與LR-lag沖突的現象,建議先看樣本量,如果樣本量較小(<100),那么優先考慮LR-lag,并檢查空間權重矩陣是否合理,用其他的空間權重矩陣驗證結果。