2017-03-11 2 views
0

저는 QGIS에 익숙하지만 R과 어려움을 겪고 있습니다. 뉴욕시의 PUMA shapefile (55)의 중심점을 기반으로하는 일부 데이터를 사용하여 지리적으로 가중치를 회귀하는 기본적인 방법이 필요합니다. 포인트, 각 푸마마다 하나씩, 기본적으로 큰 인구 조사 지역과 같습니다).기본적인 지리적 가중 회귀

이것은 CSV에서 내 데이터입니다 : 당신이 볼 수 있듯이, 테이블의 형식은 다음과 https://www.sendspace.com/file/wbqrpb

: (아마) 필요한 경우 https://www.sendspace.com/file/pj48b5

또한, 여기에 Shape 파일 데이터입니다 :

lat   lng   variable_a 2015_median 9_yr_change 9_yr_change_new pc_change 
40.8912378 -73.9101365 6   1200  380   480    31.6666666667 
40.8901905 -73.8614272 8   1100  280   200    25.4545454545 
40.8502191 -73.8050669 11   1100  300   530    27.2727272727 
40.8561725 -73.8525618 2   1100  320   205    29.0909090909 

나는 그래서 두 변수의 기본 회귀 할 경우

는 그럼 난,하지만이 있는지 확인하기 위해 위도와 LNG 변수합니다 (무게 중심의 좌표)를 사용하여 내가 다음에하고 싶은 것은 같은 두 변수를 테스트하는 것입니다 0.42

의 제곱에 R을 얻을 이 점들의 지리적 근접성이 고려 될 때 더 강한 관계.

누구나 QGIS 또는 R에서이 작업을 수행하는 가장 쉬운 방법을 말할 수 있습니까?

답변

2

가중 회귀의 경우 먼저 위치를 기반으로 가중치를 찾아야합니다. lat/lng의 모든 그룹에 대해 variable_a 응답을 평균화하고 각 그룹의 응답 수를 계산합니다. 이 number은 평균 응답 ave_var_a에 대한 가중치가됩니다. 그런 다음 weights = numberlm 함수에 전달하여 가중 회귀를 수행하십시오.

데이터에는 위치 당 하나의 응답 만 있으므로 가중치 가중치와 가중치 회귀의 적합 결과는 같습니다. summary.aov() 기능을 사용하여 볼 수 있습니다.

아래의 가중치 부여 및 가중치 회귀를 모두 표시하고 있습니다.

가중 데이터 설정 :

df1 <- read.table(file = 's_data.csv', header = TRUE, sep = ',', stringsAsFactors = FALSE) 
head(df1) 
#  lat  lng variable_a X2015_median X9_yr_change X9_yr_change_new pc_change 
# 1 40.89124 -73.91014   6   1200   380    480 31.66667 
# 2 40.89019 -73.86143   8   1100   280    200 25.45455 
# 3 40.85022 -73.80507   11   1100   300    530 27.27273 
# 4 40.85617 -73.85256   2   1100   320    205 29.09091 
# 5 40.84518 -73.88736   21   850   260    250 30.58824 
# 6 40.86465 -73.90325   2   1000   230    300 23.00000 

library(data.table) 
setDT(df1) 

df1[, 
    j = `:=` (number = .N, # total number of responses per location 
       ave_var_a = mean(variable_a)), # average response per location 
    by = c('lat', 'lng')] 

head(df1) 
#   lat  lng variable_a X2015_median X9_yr_change X9_yr_change_new pc_change number ave_var_a 
# 1: 40.89124 -73.91014   6   1200   380    480 31.66667  1   6 
# 2: 40.89019 -73.86143   8   1100   280    200 25.45455  1   8 
# 3: 40.85022 -73.80507   11   1100   300    530 27.27273  1  11 
# 4: 40.85617 -73.85256   2   1100   320    205 29.09091  1   2 
# 5: 40.84518 -73.88736   21   850   260    250 30.58824  1  21 
# 6: 40.86465 -73.90325   2   1000   230    300 23.00000  1   2 

가 수행을 lm 비가 중 및 가중 회귀 :

# unweighted regression 
fit <- lm(variable_a ~ X9_yr_change_new, data= df1) 
summary.aov(fit) 
#     Df Sum Sq Mean Sq F value Pr(>F)  
# X9_yr_change_new 1 6537830 6537830 39.23 6.89e-08 *** 
# Residuals  53 8833855 166677      
# --- 
# Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 

# weighted regression 
weighted_fit <- lm(ave_var_a ~ X9_yr_change_new, data= df1, weights = number) 
summary.aov(weighted_fit) 
#     Df Sum Sq Mean Sq F value Pr(>F)  
# X9_yr_change_new 1 6537830 6537830 39.23 6.89e-08 *** 
# Residuals  53 8833855 166677      
# --- 
# Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 
+0

음 ... 당신이 가중 회귀 위해 일할 수있는 답변을 제공했지만 위도/경도 간의 거리를 측정 할 필요가 없으므로 지리적으로 가중 된 회귀가 아닙니다. 또한 두 회귀에서 알 수 있듯이 각 위치의 평균 금액을 계산해도 아무 것도하지 않기 때문에 동일한 응답을 제공합니다. variable_a의 데이터는 각 (고유 한) 위치에 대해 이미 계산됩니다. 그래서이 답변이 다른 일을하는 데 도움이 될 수는 있지만 제 경우에는 전혀 도움이되지 않습니다. 그럼에도 불구하고, 귀하의 노력에 감사 드리며 죄송합니다. 나는 그것을 올바르게 표시 할 수 없습니다. –

+0

문제 없습니다. 당신이 오른쪽 하나를 찾을 희망 바란다 – Sathish

+0

결국 나는 arcGIS에서 기본 GWR을 수행하는 도구를 발견했다 ... 나는 R에서 그것을하는 방법을 더 빨리 알았지 만 지금은 충분하다! –