Słownik metodologiczny · Analizy wielowymiarowe

Odległość Gowera – jak mierzyć podobieństwo przy danych mieszanych typów?

Odległość Gowera łączy zmienne liczbowe, nominalne i porządkowe w jednej mierze niepodobieństwa od 0 do 1. Pokazujemy wzór, przykład obliczony ręcznie i w R (cluster::daisy), zastosowania w analizie skupień i pułapki.

Strona główna / Słownik / Odległość Gowera
W skrócie: Odległość Gowera to miara niepodobieństwa obiektów opisanych zmiennymi różnych typów. Dla każdej zmiennej liczy odległość od 0 do 1 (różnica przez rozstęp albo zgodność kategorii) i uśrednia je, dzięki czemu nadaje się do analizy skupień danych ankietowych.

Co to jest odległość Gowera?

Odległość Gowera (ang. Gower distance) to miara niepodobieństwa dwóch obiektów opisanych zmiennymi różnych typów: liczbowymi, nominalnymi, porządkowymi i dychotomicznymi. Gower (1971) zaproponował ogólny współczynnik podobieństwa, który łączy takie zmienne w jednej mierze; odległość to 1 minus to podobieństwo. Przydaje się w ankietach, w których obok wieku i dochodu są płeć, miejsce zamieszkania i wykształcenie, a zwykła odległość euklidesowa traci sens.

Jak się ją liczy

Dla każdej zmiennej liczy się odległość cząstkową od 0 do 1, a wynik to ich średnia (zwykła lub ważona):

  • zmienna liczbowa: |xi − xj| / R, gdzie R to rozstęp zmiennej w próbie;
  • nominalna: 0, gdy kategorie są takie same, 1, gdy różne;
  • porządkowa: numery kategorii (rangi) traktowane jak liczby i dzielone przez rozstęp – rozszerzenie dla takich zmiennych opisał Podani (1999);
  • brak danych: składowa jest pomijana, a średnia liczona z pozostałych.

Dzięki dzieleniu przez rozstęp żadna zmienna nie dominuje tylko dlatego, że ma dużą skalę. W R odległość liczy funkcja daisy() z pakietu cluster, wywodzącego się z podręcznika Kaufmana i Rousseeuwa (1990).

Przykład

Sześć osób (dane symulowane) opisano wiekiem, dochodem, płcią, regionem i wykształceniem (trzy poziomy). Dla osób 1 i 2 składowe wynoszą: wiek 9/16 = 0.562, dochód 3500/4500 = 0.778, płeć 0, region 1, wykształcenie (wyższe a podstawowe) 1. Odległość Gowera to średnia: 3.340 / 5 = 0.668. Najbardziej podobne są osoby 2 i 4 (0.057). Odległość euklidesowa na samym wieku i dochodzie uznałaby osoby 1 i 3 za niemal identyczne (16 jednostek, bo mają ten sam dochód), choć różnią się regionem i wykształceniem; w danych Gowera dzieli je 0.500.

Do czego jej używać

Macierz odległości Gowera trafia do hierarchicznej analizy skupień lub do metody k-medoidów (PAM), a podział ocenia się wskaźnikiem sylwetki. Można ją też zobrazować skalowaniem wielowymiarowym. Klasyczna metoda k-średnich jej nie przyjmuje, bo liczy średnie w przestrzeni euklidesowej – zob. segmentację respondentów. Odległość Mahalanobisa uwzględnia korelacje, ale tylko między zmiennymi liczbowymi, a indeks Braya–Curtisa służy do liczebności.

Na co uważać

  • Rozstęp zależy od próby. Jedna skrajna wartość ściska pozostałe odległości; przy dochodzie rozważ logarytm.
  • Równe wagi. Zmienna binarna liczy się tyle samo co ciągła. Wagi (weights) trzeba uzasadnić merytorycznie.
  • Typ zmiennej. Zmienną porządkową zapisz jako ordered; zwykły factor zostanie potraktowany jak nominalny.
Przykład reprodukowalny

Odległość Gowera w R

Kod tworzy sześć osób z pięcioma zmiennymi różnych typów, liczy macierz odległości Gowera w daisy(), sprawdza jedną odległość ręcznie i porównuje ją z odległością euklidesową.

Macierz odległości Gowera dla danych mieszanych

Dane wejściowe: 6 osób: wiek, dochód (liczbowe), płeć, region (nominalne), wykształcenie (porządkowe); dane symulowane, set.seed(3591).

Co odczytać: macierz odległości, pięć składowych dla osób 1 i 2 oraz ich średnią (0.668) i odległości euklidesowe dla par 1–2, 1–3, 1–4.

R
library(cluster)
set.seed(3591)
n <- 6
d <- data.frame(
  wiek    = round(runif(n, 20, 65)),                                   # liczbowa
  dochod  = round(runif(n, 3000, 15000), -2),                          # liczbowa, inna skala
  plec    = factor(sample(c("K", "M"), n, replace = TRUE)),            # nominalna
  region  = factor(sample(c("miasto", "wies", "przedm"), n, replace = TRUE)),  # nominalna
  wykszt  = factor(sample(c("podst", "sred", "wyzsze"), n, replace = TRUE),
                   levels = c("podst", "sred", "wyzsze"), ordered = TRUE)    # porządkowa
)
d
g <- daisy(d, metric = "gower")
round(as.matrix(g), 3)
# ręcznie dla osób 1 i 2: średnia z pięciu składowych
r <- sapply(d[1:2], function(x) diff(range(x)))
s <- c(abs(d$wiek[1] - d$wiek[2]) / r["wiek"],
       abs(d$dochod[1] - d$dochod[2]) / r["dochod"],
       as.numeric(d$plec[1] != d$plec[2]),
       as.numeric(d$region[1] != d$region[2]),
       abs(as.integer(d$wykszt[1]) - as.integer(d$wykszt[2])) / diff(range(as.integer(d$wykszt))))
round(s, 3); round(mean(s), 3)
# odległość euklidesowa na surowych liczbach: decyduje dochód
round(dist(d[, c("wiek", "dochod")])[1:3], 1)
Wynik w R
  wiek dochod plec region wykszt
1   55  11000    M przedm wyzsze
2   46   7500    M   wies  podst
3   39  11000    M miasto   sred
4   45   6500    M   wies  podst
5   39   9800    K   wies  podst
6   53   6900    M miasto   sred
      1     2     3     4     5     6
1 0.000 0.668 0.500 0.725 0.853 0.507
2 0.668 0.000 0.543 0.057 0.390 0.414
3 0.500 0.543 0.000 0.575 0.553 0.357
4 0.725 0.057 0.575 0.000 0.422 0.418
5 0.853 0.390 0.553 0.422 0.000 0.804
6 0.507 0.414 0.357 0.418 0.804 0.000
  wiek dochod                      
 0.562  0.778  0.000  1.000  1.000 
[1] 0.668
[1] 3500   16 4500

Bibliografia oprogramowania

Wyniki pochodzą z uruchomienia pokazanego kodu w R 4.5.3 (pakiet cluster). W pracy podaj wersje faktycznie użytych pakietów (sessionInfo()).

  1. R: R Core Team. (2026). R: A language and environment for statistical computing (Version 4.5.3) [Computer software]. R Foundation for Statistical Computing. https://www.R-project.org/
  2. cluster (wersja 2.1.8.2): Maechler, M., Rousseeuw, P., Struyf, A., Hubert, M., & Hornik, K. (2026). cluster: Cluster analysis basics and extensions (R package version 2.1.8.2) [Computer software]. https://CRAN.R-project.org/package=cluster

Najczęstsze pytania

Czy można użyć odległości Gowera w metodzie k-średnich?

Nie wprost. Metoda k-średnich liczy średnie skupień w przestrzeni euklidesowej. Macierz odległości Gowera przekaż do metody k-medoidów (PAM) albo do hierarchicznej analizy skupień, np. pam(g, k = 3, diss = TRUE).

Jak policzyć odległość Gowera w R?

Funkcją daisy(dane, metric = "gower") z pakietu cluster. Zmienne liczbowe zapisz jako numeric, nominalne jako factor, a porządkowe jako ordered; braki danych są pomijane parami.

Czym odległość Gowera różni się od odległości Mahalanobisa?

Mahalanobis działa tylko na zmiennych liczbowych i uwzględnia ich korelacje. Gower łączy zmienne różnych typów, ale traktuje je niezależnie i każdej daje tę samą wagę.

Powiązane hasła

Poradniki, w których użyjesz tego pojęcia

Potrzebujesz wsparcia w analizie danych?

Wybierz ofertę dopasowaną do pracy dyplomowej albo profesjonalnego projektu naukowego.

Wyceń analizęOferta dla studentów

Bibliografia i dalsza literatura naukowa (APA 7)

  1. Gower, J. C. (1971). A general coefficient of similarity and some of its properties. Biometrics, 27(4), 857–871. https://doi.org/10.2307/2528823
  2. Kaufman, L., & Rousseeuw, P. J. (1990). Finding groups in data: An introduction to cluster analysis. Wiley. https://doi.org/10.1002/9780470316801
  3. Podani, J. (1999). Extending Gower’s general coefficient of similarity to ordinal characters. Taxon, 48(2), 331–340. https://doi.org/10.2307/1224438

Cytowania BibTeX

@article{gower1971general, author={Gower, John C.}, title={{A general coefficient of similarity and some of its properties}}, journal={Biometrics}, year={1971}, volume={27}, number={4}, pages={857--871}, doi={10.2307/2528823}}
@book{kaufman1990finding, author={Kaufman, Leonard and Rousseeuw, Peter J.}, title={{Finding groups in data: An introduction to cluster analysis}}, year={1990}, publisher={Wiley}, doi={10.1002/9780470316801}}
@article{podani1999extending, author={Podani, János}, title={{Extending Gower’s general coefficient of similarity to ordinal characters}}, journal={Taxon}, year={1999}, volume={48}, number={2}, pages={331--340}, doi={10.2307/1224438}}
R