2017-03-11 3 views
0

Ich bin mit QGIS vertraut, kämpfe aber hier mit R, und ich hätte gerne Hilfe bei einer grundlegenden geographisch gewichteten Regression mit einigen Daten, die auf den Schwerpunktpunkten des New Yorker PUMA-Shapefiles basieren (55 Punkte, eine für jeden PUMA, die im Grunde wie eine große Volkszählung ist).Grundlegende geographisch gewichtete Regression

Dies ist meine Daten in csv: https://www.sendspace.com/file/pj48b5

auch, falls erforderlich (wahrscheinlich nicht), hier sind die Shape-Datei Daten: https://www.sendspace.com/file/wbqrpb

Wie Sie sehen können, die Tabelle in folgendem Format ist :

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 

Wenn ich die grundlegende Regression von zwei Variablen zu tun, als so:

fit <- lm(variable_a ~ X9_yr_change_new, data=s_data) 
summary(fit) 

Dann bekomme ich eine R-Quadrat von 0,42

Was will ich als nächstes zu tun ist, die gleichen zwei Variablen zu testen, aber durch das lat und lng Variablen (Koordinaten der Schwerpunkte), um zu sehen, ob es eine stärkere Beziehung, wenn die geografische Nähe dieser Punkte berücksichtigt wird.

Kann mir jemand den einfachsten Weg sagen, dies entweder in QGIS oder in R zu tun?

Antwort

2

Für die gewichtete Regression müssen Sie zuerst die Gewichte anhand des Standorts ermitteln. Es kann durchgeführt werden, indem die variable_a Antwort für jede Gruppe von lat/lng gemittelt wird und die Anzahl der Antworten in jeder Gruppe gezählt wird. Diese number wird die Gewichte für die durchschnittliche Antwort von ave_var_a werden. Führen Sie dann eine gewichtete Regression durch, indem Sie weights = number an die lm-Funktion übergeben.

Da Ihre Daten nur eine Antwort pro Standort haben, sind die angepassten Ergebnisse sowohl der ungewichteten als auch der gewichteten Regression gleich. Es kann unter Verwendung summary.aov() Funktion gesehen werden.

Ich zeige sowohl ungewichtete als auch gewichtete Regression unten.

gewichtete Daten einrichten:

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 

Perform lm ungewichtete und gewichtete Regression:

# 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

Nun ... Sie eine Antwort zur Verfügung gestellt haben, die für die gewichtete Regression funktionieren könnte aber nicht für die geographisch gewichtete Regression, da keine Berechnung der Abstände zwischen dem Breitengrad und dem Längengrad erfolgt. Wie Sie aus den beiden Regressionen sehen können, geben sie die gleiche Antwort, da das Zählen der durchschnittlichen Menge an jedem Ort nichts bewirkt - die Daten von Variable_a werden bereits für jeden (eindeutigen) Ort gezählt. Während diese Antwort dazu dienen könnte, andere Dinge zu tun, hilft das in meinem Fall überhaupt nicht. Trotzdem, danke für deine Mühe und Entschuldigung, ich kann es nicht als richtig bezeichnen. –

+0

kein Problem. Ich hoffe, Sie finden die richtige – Sathish

+0

am Ende fand ich ein Werkzeug in ArcGIS, um eine grundlegende GWR zu tun ... Ich würde eher wissen, wie es in R zu tun, aber das reichte für jetzt! –