library(kableExtra)
list_race <- c("WHITE", "BLACK", "ASIAN", "HISPANIC", "AM", "OTHER")

1 Cel ćwiczenia

Scharakteryzowanie zróżnicowania rasowego oraz segregacji rasowej w wybranym hrabstwie w roku X.

Zadanie 1

  • Obliczenie miar segregacji rasowej (\(H\), \(D\)) oraz zróżnicowania rasowego (\(E\), \(E_{std}\)) na podstawie danych z bloków spisowych (blocks)

    • Proszę obliczyć wskaźnik \(D\) dla grup: WB – biali/czarni, WA – biali/Azjaci, WL – biali/Latynosi, BL - Czarni/Latynosi, AL - Azjaci/Latynosi, AB - Azjaci/Czarni.

Zadanie 2

  • Obliczenie miar segregacji rasowej (\(H\), \(D\)) oraz zróżnicowania rasowego (\(E\), \(E_{std}\)) na podstawie danych z obszarów spisowych (census tract)

    • Proszę obliczyć wskaźnik \(D\) dla grup: WB – biali/czarni, WA – biali/Azjaci, WL – biali/Latynosi, BL - Czarni/Latynosi, AL - Azjaci/Latynosi, AB - Azjaci/Czarni.

Zadanie 3

Proszę przedstawić raport opisujący strukturę rasowo-etniczną wybranego hrabstwa w analizowanym roku. Raport ma zawierać następujące informacje:

  • Procentowy udział poszczególnych grup rasowo-etnicznych w wybanym hrabstwie w roku X.
  • Porównanie miar segregacji rasowej oraz zróżnicowania rasowego obliczonych na podstawie bloków spisowych oraz obszarów spisowych (E, Estd, H, D)

Proszę obliczyć wskaźnik \(D\) dla grup: WB – biali/czarni, WA – biali/Azjaci, WL – biali/Latynosi, BL - Czarni/Latynosi, AL - Azjaci/Latynosi, AB - Azjaci/Czarni.

Zadanie 4 - Wynik pracy grupowej

Zadanie wymaga zestawienia wyników otrzymanych w danej grupie analizującej wybrane hrabstwo.

Uwaga! W przypadku grup 3 osobowych należy wykonać analizę dla lat 1990-2010.

Wykorzystując miary zróżnicowania oraz segregacji rasowej, proszę przeanalizować jak zmieniła się struktura rasowa w hrabstwie w latach 1990-2020. Wyniki powinny zostać zestawione w 2 tabelach. Komentarz powinien zawierać porównanie miar segregacji oraz zróżnicowania rasowego otrzymanych na podstawie bloków oraz obszarów spisowych.

  • Tabela 1. Procentowy udział poszczególnych grup rasowo-etnicznych w hrabstwie X w latach …
  • Tabela 2. Porównanie miar segregacji rasowej oraz zróżnicowania rasowego obliczonych na podstawie bloków spisowych oraz obszarów spisowych (E, Estd, H, D)
ROK POP BIALI CZARNI AZJACI RDZENNI_AMERYKANIE POZOSTALI LATYNOSI
1990
2000
2010
2020

W poniższej tabeli przyrostek “_b” oznacza miary wyliczone z danych zagregowanych do bloków spisowych, a przyrostek “_ct” z obszarów spisowych.

ROK E_b Estd_b Dwb_b Dwa_b Dwl_b H_b E_ct Estd_ct Dwb_ct Dwa_ct Dwl_ct H_ct
1990
2000
2010
2020

2 Zróżnicowanie oraz segregacja rasowa w analizowanym obszarze

Obliczenie miar segregacji rasowej wymaga podziału obszaru na mniejsze jednostki spisowe.

Rycina 1. Zróżnicowanie oraz segregacja rasowa w analizowanym obszarze (np. dla całego miasta)

3 Miary segregacji i zróżnicowania w R

W poniższym przykładzie wyliczono miary segregacji oraz zróżnicowania rasowego na podstawie danych z bloków spisowych. Obliczenia dla danego hrabstwa należy wykonać wykorzystując dane przygotowane w poprzednim ćwiczeniu i zapisane w pliku dane_attr/[nazwa_hrabstwa]_[rok]_blocks_attr.csv

Przed przystąpieniem do obliczeń należy wywołać wszystkie poniżesz funkcje.

3.1 Funkcja obliczająca entropię

#proportions - wektor zawierający odsetek poszczególnych ras w ogólnej liczbie ludności (wartości od 0 do 1)
#base - podstawa logarytmu, domyslnie exp(1) oznacza obliczenie logarytmu naturalnego 
entropy_fnc = function(proportions, base = exp(1)) {
  entr = -sum(ifelse(proportions > 0, proportions * log(proportions, base = base), 0))
  return(entr)
}

3.2 Funkcja obliczająca standaryzowaną entropię

entropy_std_fnc = function(proportions, base = exp(1)) {
  entr = -sum(ifelse(proportions > 0, proportions * log(proportions, base = base), 0)) #obliczenie entropii
  entr_std = entr/log(length(proportions), base = base) #standaryzacja
  return(entr_std)
}

3.3 Funkcja obliczająca wskaźnik teorii informacji H.

hindex <- function(races) {
#races_all to liczba osob w calym obszarze w podziale na grupy rasowo-etniczne
races_all = apply(races, 2, sum, na.rm=TRUE)

#liczba osob w calym obszarze
pop = sum(races_all, na.rm=TRUE)

#liczba osob w kazdej jednostce spisowej
pop_i = apply(races, 1, sum, na.rm=TRUE)

#odsetek osob w danej grupy rasowo-etnicznej w kazdej jednostce spisowej
proportions = races/pop_i

#odsetek osob w danej grupy rasowo-etnicznej w calym obszarze
proportions_all = races_all/sum(races_all, na.rm = TRUE)

#entropia dla kazdej jednostki spisowej
ent_i = apply(proportions, 1, entropy_fnc)

#entropia dla calego obszaru
ent = entropy_fnc(proportions_all) 

#obliczenie H
hind = sum(pop_i*(ent-ent_i)/(ent*pop), na.rm=TRUE)
return(hind)
}

3.4 Funkcja obliczająca wskaźnik niepodobieństwa D

# a - liczba osob grupy 1 w jednostce spisowej, b - liczba osob gruy 2 w jednostce spisowej
d_ind = function(a, b) {
  d = 0.5*sum(abs(a/sum(a, na.rm=TRUE) - b/sum(b, na.rm=TRUE)))
  return(d)
}

4 Miary segregacji oraz zróżnicowania rasowego - dane dla bloków spisowych.

Tabela przedstawia dane dotyczące struktury rasowo-etnicznej dla 16 bloków spisowych dla 6 kategorii rasowo-etnicznych (WHITE, BLACK, ASIAN, HISPANIC, NATIVE AMERICAN, OTHER RACE). Dane te można zagregować do dwóch obszarów spisowych (pole TRACTA -> 12301 oraz 12302).

dat <- read.csv("data/cw2/ex.csv")
Struktura rasowo-etniczna na poziomie bloków spisowych - 2010 rok
GISJOIN GISJOIN_T COUNTY_CODE STATEA COUNTYA TRACTA BLOCKA WHITE BLACK ASIAN AM OTHER HISPANIC POP
G06007500123011000 G0600750012301 6075 6 75 12301 1000 28 11 25 2 2 5 73
G06007500123011001 G0600750012301 6075 6 75 12301 1001 0 0 0 0 0 0 0
G06007500123011002 G0600750012301 6075 6 75 12301 1002 22 8 90 1 5 2 128
G06007500123011003 G0600750012301 6075 6 75 12301 1003 5 2 4 0 0 4 15
G06007500123011004 G0600750012301 6075 6 75 12301 1004 1 2 0 0 0 1 4
G06007500123011005 G0600750012301 6075 6 75 12301 1005 395 211 234 7 37 258 1142
G06007500123011006 G0600750012301 6075 6 75 12301 1006 43 10 93 0 4 9 159
G06007500123012000 G0600750012301 6075 6 75 12301 2000 372 72 401 6 41 321 1213
G06007500123021000 G0600750012302 6075 6 75 12302 1000 453 55 259 11 46 118 942
G06007500123021001 G0600750012302 6075 6 75 12302 1001 368 72 220 3 42 116 821
G06007500123022000 G0600750012302 6075 6 75 12302 2000 0 0 0 0 0 0 0
G06007500123022001 G0600750012302 6075 6 75 12302 2001 60 18 31 0 4 26 139
G06007500123022002 G0600750012302 6075 6 75 12302 2002 123 13 269 1 8 34 448
G06007500123022003 G0600750012302 6075 6 75 12302 2003 111 9 36 1 7 27 191
G06007500123022004 G0600750012302 6075 6 75 12302 2004 134 71 136 5 10 35 391
G06007500123022005 G0600750012302 6075 6 75 12302 2005 58 4 60 1 2 16 141

5 Analiza struktury rasowo-etnicznej dla całego obszaru

list_race <- c("WHITE", "BLACK", "ASIAN", "HISPANIC", "AM", "OTHER")

5.1 Liczba ludności w podziale na grupy rasowo-etniczne w analizowanym obszarze w 2010 roku.

races_all  <- apply(dat[,list_race], 2, sum, na.rm = TRUE)
races_all
##    WHITE    BLACK    ASIAN HISPANIC       AM    OTHER 
##     2173      558     1858      972       38      208

5.2 Liczba ludności w analizowanym obszarze w 2010 roku.

pop = sum(races_all)

5.3 Procentowy udział poszczególnych grup rasowo-etnicznych w analizowanym obszarze w 2010 roku.

perc_all <- races_all/sum(races_all)
round(perc_all*100, 2)
##    WHITE    BLACK    ASIAN HISPANIC       AM    OTHER 
##    37.42     9.61    32.00    16.74     0.65     3.58

6 Analiza zróżnicowania rasowego oraz segregacji rasowej na podstawie danych z bloków spisowych

6.1 Zróżnicowanie rasowe - obliczenie entropii na podstawie obszarów spisowych

Entropia jest miarą zróżnicowania całego obszaru (np. hrabstwa). Musimy zatem najpierw zsumować dane dotyczące struktury rasowo-etnicznej całego obszaru, a następnie obliczyć odsetek poszczególnych ras w ogólnej liczbie ludności.

races_all  <- apply(dat[,list_race], 2, sum, na.rm = TRUE) #races_all zawiera liczbę osob wg ras dla całego obszaru
perc <- races_all/sum(races_all) #Odseted osob poszczegolnych ras dla calego obszaru
perc <- perc[list_race] #wybierz tylko wartosci dla ras
perc
##       WHITE       BLACK       ASIAN    HISPANIC          AM       OTHER 
## 0.374203547 0.096090925 0.319958671 0.167384191 0.006543826 0.035818839

Wektor perc zawiera dane, które należy podstawić do obliczenia entropii.

ent  <- entropy_fnc(perc)
ent
## [1] 1.408882

6.2 Obliczenie entropii standaryzowanej na podstawie bloków spisowych

ent_std <- entropy_std_fnc(perc)
ent_std
## [1] 0.7863122

6.3 Obliczanie wskaźnika teorii informacji H

races = dat[, list_race]
h = hindex(races)
h
## [1] 0.04788728

6.4 Wskaźnik niepodobieństwa D

d_wb <- d_ind(dat$WHITE, dat$BLACK)
d_wa <- d_ind(dat$WHITE, dat$ASIAN)
d_wl <- d_ind(dat$WHITE, dat$HISPANIC)

6.5 Podsumowanie miar segregacji na poziomie bloków spisowych

out_ct <- round(c(entropia = ent, entropia_std = ent_std, H = h, Dwb = d_wb, Dwa = d_wa, Dwl = d_wl), 3)
out_ct
##     entropia entropia_std            H          Dwb          Dwa          Dwl 
##        1.409        0.786        0.048        0.282        0.219        0.245

7 Zapisanie wyników analiz do plików tekstowych

Wyniki zostaną zapisane w pliku tekstowym, w folderze results. Proszę nazwać plik [nazwa_habstwa]_[rok]seg_div_metric_block.txt lub [nazwa_habstwa][rok]_seg_div_metric_ct.txt dla obszarów spisowych.

sink('results/seg_div_metric_block.txt')
perc_all
##       WHITE       BLACK       ASIAN    HISPANIC          AM       OTHER 
## 0.374203547 0.096090925 0.319958671 0.167384191 0.006543826 0.035818839
races_all
##    WHITE    BLACK    ASIAN HISPANIC       AM    OTHER 
##     2173      558     1858      972       38      208
out_ct
##     entropia entropia_std            H          Dwb          Dwa          Dwl 
##        1.409        0.786        0.048        0.282        0.219        0.245
sink()

Proszę samodzielnie powtórzyć powyższe obliczenia używając danych zaagregowanych do obszarów spisowych (dane w ćwiczeniu 2 zapisane w pliku dane_attr/[nazwa_hrabstwa]_[rok]_tracts_attr.csv)