Regresja logistyczna

sie 2, 2017

regresja logistyczna

rstudio

Regresja logistyczna jest jedną z najpopularniejszych odmian analizy regresji. Swoją popularność zawdzięcza praktycznemu zastosowaniu w wielu dziedzinach takich jak: badania marketingowe, przemysł, mikroekonomia, czy medycyna. W artykule przedstawię kilka założeń i wskazówek dotyczących opracowania danych modelem regresji logistycznej oraz jego aplikację w pakiecie R.

Problemy, które możemy rozwiązać przy pomocy regresji logistycznej dotyczą klasyfikacji, czyli określenia prawdopodobieństwa sukcesu/porażki, pozostania/odejścia klienta, śmierci/przeżycia gatunku albo tego, czy reklama trafi/nie trafi do grupy odbiorców.

Opracujmy model w języku R korzystając z edytora Rstudio. Oba te narzędzia są bezpłatne i ogólnie dostępne w internecie.

Linki do pobrania:
https://cran.r-project.org/, 

http://www.rstudio.com/products/rstudio/download/.

Lato to gorący okres nie tylko za oknem, ale również w biurach rekrutacji do szkół i na uczelnie. Wyjaśnijmy zatem, od czego zależy prawdopodobieństwo przyjęcia kandydata na uczelnię (ADMIT) mając do dyspozycji bazę danych ze zmiennymi: GRE (liczba punktów z testu), GPA (średnia ocen)
i RANK (prestiż uczelni).

Dla zmiennej RANK największy prestiż oznaczono 1, a najmniejszy 4. Kilka początkowych wierszy z bazy, gdzie ADMIT = 1 oznacza przyjęcie kandydata, ADMIT = 0 – nieprzyjęcie:

Pierwszym krokiem jest import danych do R. Dane pochodzą z Institute for Digital Research and Education UCLA i są dostępne online:

dane <- read.csv(“https://stats.idre.ucla.edu/stat/data/binary.csv”)

W pakiecie R do implementacji modelu regresji logistycznej służy funkcja glm(), której formuła wygląda następująco:

nazwa_modelu <- glm(zmienna_objaśniana ~ zmienna_objaśniająca_1 + … + zmienna_objaśniająca_n, family = binomial())

Tworzymy model według wspomnianej formuły:

model <- glm(admit ~ gre + gpa + factor(rank), data = dane, family = “binomial”)

Nie należy zapominać o założeniach dotyczących budowania modelu regresji logistycznej, do których należy m.in.:

  • niezależność obserwacji tzn. że zmienne objaśniające nie mogą być ze sobą skorelowane,
  • dobre dopasowanie modelu do danych, tak aby w modelu występowały tylko te zmienne, które mają wpływ na wyjaśnienie zjawiska.

W przeciwnym razie model może doprowadzić do niewłaściwych wniosków.

W naszym przykładzie wszystkie zmienne (zgodnie z intuicją) są istotne, więc przejdźmy do interpretacji ich współczynników. Współczynniki modelu regresji logistycznej można interpretować jako szanse. Całą statystykę możemy przejrzeć wywołując
summary(model), jednak skupimy się tylko na pewnej jej części i jednym poleceniem pozbądźmy się trudnych w analizie logarytmów występujących w modelu: exp(coef(model)).

Na tej podstawie czytamy, że:

  • przy wzroście średniej ocen (GPA) o jeden punkt szanse na przyjęcie kandydata na uczelnię wzrastają 2,23 raza, czyli wyniosą 223:100 (pamiętając o tym, że odnosimy się do wyniku dla największego prestiżu uczelni, 1 – kategoria referencyjna!),
  • wzrost o jeden punkt z testu (wartość GRE) zwiększa szansę na przyjęcie kandydata o 2‰,
  • kategorie 2, 3 i 4 prestiżu uczelni działają ograniczająco na przyjęcie kandydata (współczynniki < 1).

Na podstawie modelu możemy wygenerować wartości przewidywane i przedstawić je w formie wykresu.

Dla wszystkich wyników z testu z kolumny GRE oraz średniego wyniku średniej ocen GPA przedstawiono wartość szansy na przyjęcie kandydata na uczelnię w zależności od jej prestiżu (RANK):

a także prawdopodobieństwo przyjęcia kandydata:

Tak jak wcześniej odczytaliśmy ze statystyki, niezależnie od prestiżu uczelni kandydat z większą ilością punktów ma większą szansę na dostanie się do niej. Im mniejszy prestiż, tym wyniki przyjętych kandydatów są niższe. W ten sposób można analizować różne zjawiska określając szansę powodzenia zdarzenia.

Kod do uzyskania wykresów:

library(ggplot2)
dane_2 <- expand.grid(gre = unique(dane$gre), gpa = mean(dane$gpa), rank = factor(1:4))

dane_2$szansa_log <- predict(model, dane_2)
dane_2$szansa <- exp(dane_2[,4])
ggplot(dane_2, aes(x=gre, y=szansa, color=rank)) + xlab(“GRE”) + ylab(“Szansa”) + geom_line(size=1) + theme_bw()

dane_2$prawdop <- predict(model, dane_2, type = “response”)
ggplot(dane_2, aes(x=gre, y=prawdop, color=rank)) + xlab(“GRE”) + ylab(“Prawdopodobienstwo”) + geom_line(size=1) + theme_bw()