Czy wzrost rodziców wpływa na płeć dziecka?

  • Post author:

Albo chociaż koreluje z nią? Wątpię. W takim razie nie warto uwzględniać takich informacji w modelu przewidującym płeć? Przeciwnie.

Jednym z błędów przy selekcji zmiennych do modelu jest pomijanie tych, które nie korelują ze zmienną celu. Mimo że dla wielu osób jest jasne, że po dorzuceniu pewnych cech inne mogą okazać się niepotrzebne (współliniowość), to druga strona medalu jest mniej intuicyjna.

Dane

Sprawdźmy na rzeczywistych danych, jak przewidywać płeć na podstawie wzrostu rodziców. Wykorzystam dość popularne dane zebrane pod koniec XIX wieku przez angielskiego statystyka Francisa Galtona (interesowało go, jak silna jest zależność między wzrostem rodziców a ich dzieci). Może je pobrać np. stąd, choć w mojej wersji wzrosty już są przekształcone na centymetry.

Dane są bardzo proste, pierwsze wiersze wyglądają następująco:

rodzinawzrost_ojcawzrost_matkiplecliczba_dzieciwzrost_dziecka
1199.39170.18M4185.93
1199.39170.18K4175.77
1199.39170.18K4175.26
1199.39170.18K4175.26
2191.77168.91M4186.69
2191.77168.91M4184.15
2191.77168.91K4166.37
2191.77168.91K4166.37

Uwaga, wzrost_dziecka to wzrost już dorosłej osoby. I druga uwaga: gdy Galton dotarł do jakiejś rodziny, mierzył wszystkie dzieci — stąd wzrosty rodziców się powtarzają. Także mamy tutaj pewną wewnętrzną korelację i jeśli interesowałoby nas wnioskowanie statystyczne, powinniśmy to uwzględnić, dopasowując np. model mieszany (mixed model). Żeby nie komplikować sprawy, użyję zwykłej regresji logistycznej, szczególnie że bardziej interesuje mnie prognozowanie.

Model podstawowy

Zacznijmy od podstawowego modelu, w którym przewidujemy płeć dziecka na podstawie jego wzrostu:

płeć ~ wzrost_dziecka.

Kod dostępny jest tutaj, w tym artykule pokazuję tylko wyniki:

termestimatestd.errorstatisticp.value
(Intercept)-52.953.40-15.56< 0.0001
wzrost_dziecka0.310.0215.56< 0.0001

Modelujemy tu prawdopodobieństwo, że dana osoba jest mężczyzną. Przy wzroście dziecka współczynnik jest dodatni, co oczywiście jest logiczne, bo im wyższe dziecko, tym większe prawdopodobieństwo, że jest mężczyzną. Dokładność modelu wynosi 84,4%. Wszystkich obserwacji jest 897, model popełnił w sumie 140 błędów (tzn. przewidział złą płeć).

Czy da się lepiej?

Chcę teraz zbudować lepszy model, uwzględniając dodatkowe zmienne, które mam w danych: wzrost ojca i matki. Pytanie, czy jest sens? Spójrzmy na relację między płcią a wzrostem rodzica:

Regresja logistyczna statystyka

Nie widać żadnej zależności. Potwierdźmy to, rozpatrując model

płeć ~ wzrost_matki + wzrost_ojca.

Poniżej podsumowanie:

termestimatestd.errorstatisticp.value
(Intercept)3.342.551.310.191
wzrost_ojca-0.010.01-0.750.454
wzrost_matki-0.010.01-1.000.320

Jak można było się domyślić, obie zmienne są nieistotne. Nie mamy żadnego powodu przypuszczać, że wzrosty rodziców są powiązane z płcią dziecka.

Model rozszerzony

Mimo wszystko dorzućmy te wzrosty do pierwszego modelu:

płeć ~ wzrost_dziecka + wzrost_matki + wzrost_ojca.

termestimatestd.errorstatisticp.value
(Intercept)-17.684.63-3.82< 0.0001
wzrost_dziecka0.430.0314.91< 0.0001
wzrost_ojca-0.180.02-8.39< 0.0001
wzrost_matki-0.150.02-6.73< 0.0001

Nagle obie zmienne są istotne i nie ma co do tego wątpliwości. Jak to możliwe?

Weźmy dziecko o wzroście 175 cm. To kobieta czy mężczyzna? Oczywiście nie wiem, ale rozsądnie przyjąć większe prawdopodobieństwo, że mężczyzna. A jeśli wiem, że jego/jej matka ma 200 cm? Być może wciąż z większym prawdopodobieństwem jest to mężczyzna — ale na pewno się ono zmniejszy.

Jest to jeden z moich ulubionych przykładów, czym jest kontrola zmiennych.

Spójrzmy jeszcze na współczynniki. Przy wzroście dziecka współczynnik wciąż jest dodatni, natomiast przy wzrostach rodziców współczynniki są ujemne. Działa to jak pewna korekta: jeśli wiemy, że rodzice są wysocy, nasza pewność, że wysoka osoba jest mężczyzną, zmniejsza się (ewentualnie jeśli dziecko jest niskie i ma wysokich rodziców, zwiększa się pewność, że jest kobietą).

A na ile zwiększyła się dokładność modelu? Wynosi teraz 88,5% (czyli 4 punkty procentowe więcej). Może nie jest to spektakularne, ale weźmy pod uwagę, jak z pozoru kiepskie cechy dorzuciliśmy do modelu. Co więcej, te 4% wiąże się z tym, że liczba błędów zmniejszyła się ze 140 do 103.

Ale po co?

Zastanówmy się jeszcze, po co nam taki model? Przecież jeśli znam już wzrost dziecka, to chyba płeć też? W dobie ML może się wydawać, że modele służą tylko prognozowaniu przyszłych wartości. Ale pomijając zupełnie inne zastosowania (np. wyjaśnianie zmienności interesującej nas cechy), to w tym kontekście można powiedzieć szerzej, że modele służą do przewidywania NIEZNANYCH wartości.

Taki model można użyć np. do imputacji braków danych. Tak naprawdę na prognozowanie Y też można spojrzeć jak na imputację (z pewnymi zastrzeżeniami). Model przewidujący płeć (nie mówię, że konkretnie ten) mógłby też zostać użyty przez detektywa do stworzenia portretu sprawcy. Albo przez historyka, gdy o danej postaci wiemy niewiele.


Jeśli moje teksty są dla Ciebie wartościowe, na podany niżej adres email mogę przesłać Ci wiadomość, gdy pojawią się nowe. Zapraszam też na mój kanał na youtube.