# Importowanie niezbędnych pakietów
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.2 ✔ readr 2.1.4
## ✔ forcats 1.0.0 ✔ stringr 1.5.0
## ✔ ggplot2 3.4.2 ✔ tibble 3.2.1
## ✔ lubridate 1.9.2 ✔ tidyr 1.3.0
## ✔ purrr 1.0.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(ggpubr)
library(rstatix)
##
## Dołączanie pakietu: 'rstatix'
##
## Następujący obiekt został zakryty z 'package:stats':
##
## filter
library(ISLR) # Pakiet zawierający zbiór danych ISLR
library(emmeans)
# Wczytanie danych z pakietu ISLR
data("Default")
# Tworzenie histogramu zmiennej balance
ggplot(Default, aes(x = balance)) +
geom_histogram(bins = 10) +
labs(title = "Histogram of Balance", x = "Balance", y = "Frequency") +
theme_classic()
Wykres histogramu dla zmiennej “balance” pokazuje rozkład sald klientów w zbiorze danych “Default”. Na podstawie wykresu można zauważyć, że większość klientów ma saldo w okolicy niższych wartości, a rozkład jest nieco skośny w prawo.
# Tworzenie wykresu pudełkowego zmiennych balance i default
ggboxplot(Default, y = "balance", x = "default", color = "default") +
labs(title = "Boxplot of Balance by Default", x = "Default", y = "Balance") +
theme_classic()
Wykres pudełkowy przedstawia porównanie salda (“balance”) między klientami, którzy zalegają z płatnościami (“default”) a tymi, którzy nie zalegają. Na podstawie wykresu można zauważyć, że mediana salda dla klientów zalegających jest nieco niższa niż dla klientów niemających zaległości, a także, że występują wartości odstające (outliers) w obu grupach.
# Przeprowadzenie testu t-parysowego między grupami default
pairwise_t_test(Default, balance ~ default, p.adjust.method = "bonferroni")
## # A tibble: 1 × 9
## .y. group1 group2 n1 n2 p p.signif p.adj p.adj.signif
## * <chr> <chr> <chr> <int> <int> <dbl> <chr> <dbl> <chr>
## 1 balance No Yes 9667 333 2.77e-286 **** 2.77e-286 ****
Test t-parysowy między grupami “default” pozwala porównać średnie wartości salda (“balance”) między klientami zalegającymi i niemających zaległości. Wyniki testu wskazują, czy istnieje istotna statystycznie różnica między tymi grupami. Na podstawie wyników testu można stwierdzić, czy średnie wartości salda różnią się znacząco między grupami.
# Tworzenie modelu regresji logistycznej
model <- glm(default ~ balance + income, data = Default, family = "binomial")
summary(model)
##
## Call:
## glm(formula = default ~ balance + income, family = "binomial",
## data = Default)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -2.4725 -0.1444 -0.0574 -0.0211 3.7245
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -1.154e+01 4.348e-01 -26.545 < 2e-16 ***
## balance 5.647e-03 2.274e-04 24.836 < 2e-16 ***
## income 2.081e-05 4.985e-06 4.174 2.99e-05 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 2920.6 on 9999 degrees of freedom
## Residual deviance: 1579.0 on 9997 degrees of freedom
## AIC: 1585
##
## Number of Fisher Scoring iterations: 8
Model regresji logistycznej jest tworzony w celu przewidywania zalegania z płatnościami (“default”) na podstawie wartości salda (“balance”) i dochodu (“income”). Współczynniki estymowane dla zmiennych “balance” i “income” wskazują na ich wpływ na prawdopodobieństwo wystąpienia zaległości. Dla przykładu, współczynnik estymowany dla zmiennej “balance” wynosi 0.0056, co oznacza, że z każdym jednostkowym wzrostem salda, wzrasta logarytmarytmetyczne prawdopodobieństwo zaległości o 0.0056 jednostki. Liczba iteracji dla modelu regresji logistycznej wskazuje, ile razy algorytm iteracyjny został wykonany w celu osiągnięcia optymalnego dopasowania modelu do danych. W tym przypadku, liczba iteracji wynosi 8, co sugeruje, że algorytm wykonał 8 iteracji w procesie dopasowania modelu.
7.Tworzenie macierzy kontyngencji: Tworzymy macierz kontyngencji, która przedstawia liczbę obserwacji dla różnych kombinacji zmiennych “default” i “student”.
# Tworzenie macierzy kontyngencji
table(Default$default, Default$student)
##
## No Yes
## No 6850 2817
## Yes 206 127
# Przeprowadzenie testu chi-kwadrat między zmiennymi default i student
chisq.test(Default$default, Default$student)
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: Default$default and Default$student
## X-squared = 12.117, df = 1, p-value = 0.0004997
Test chi-kwadrat między zmiennymi “default” i “student” ma na celu sprawdzenie, czy istnieje zależność między tymi zmiennymi. Wynik testu wskazuje, czy zmienne są niezależne od siebie. Wyniki testu chi-kwadrat Pearsona z korektą ciągłości Yatesa dla danych “Default\(default" (zmiennej zalegania z płatnościami) i "Default\)student” (zmiennej studenta) są następujące: -X-squared = 12: Statystyka testu chi-kwadrat (X-kwadrat) wynosi 12. Im większa wartość statystyki X-kwadrat, tym większa jest różnica między obserwowanymi a oczekiwanymi wartościami w macierzy kontyngencji.
-df = 1: Stopnie swobody (degrees of freedom) wynoszą 1. Stopnie swobody określają liczbę niezależnych elementów danych, które można dowolnie manipulować w kontekście testu statystycznego.
-p-value = 0.0005: Wartość p (p-value) wynosi 0.0005. Jest to wartość pomiędzy 0 a 1, która określa istotność statystyczną testu. Im mniejsza wartość p, tym silniejsze dowody mamy na odrzucenie hipotezy zerowej.
Na podstawie tych wyników można stwierdzić, że istnieje istotna statystycznie zależność między zmiennymi “Default\(default" i "Default\)student”. Wartość p-value wynosząca 0.0005 oznacza, że istnieje bardzo mała szansa, że zależność między tymi zmiennymi występuje tylko przez przypadek.
# Tworzenie wykresu regresji logistycznej
ggplot(Default, aes(x = balance, y = default)) +
geom_point() +
geom_smooth(method = "glm", method.args = list(family = "binomial"), se = FALSE) +
labs(title = "Logistic Regression", x = "Balance", y = "Default") +
theme_classic()
## `geom_smooth()` using formula = 'y ~ x'
## Warning: glm.fit: algorytm nie zbiegł się
## Warning: Computation failed in `stat_smooth()`
## Caused by error:
## ! wartości 'y' muszą być z przedziału 0 <= y <= 1
Wykres regresji logistycznej przedstawia zależność między zmiennymi “balance” a “default” w formie krzywej regresji. Na podstawie wykresu można ocenić kierunek i kształt tej zależności.
# Analiza wariancji (ANOVA)
model_anova <- lm(balance ~ default, data = Default)
results_anova <- anova(model_anova)
print(results_anova)
## Analysis of Variance Table
##
## Response: balance
## Df Sum Sq Mean Sq F value Pr(>F)
## default 1 286792390 286792390 1396.8 < 2.2e-16 ***
## Residuals 9998 2052775499 205319
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Analiza wariancji (ANOVA) została przeprowadzona dla zmiennej “balance” w zależności od zmiennej “default”. Tabela przedstawia wyniki tej analizy.
-“Response: balance”: Wskazuje, że zmienną objaśnianą w analizie wariancji jest “balance”.
-“Df” (Stopnie swobody): W analizie uwzględniono 2 stopnie swobody. Pierwszy stopień swobody odnosi się do efektu grupy “default”, a drugi stopień swobody odnosi się do reszt.
-“Sum Sq” (Suma kwadratów): Suma kwadratów dla efektu grupy “default” wynosi 286,792,390, a suma kwadratów dla reszt wynosi 2,052,775,499.
-“Mean Sq” (Średnia kwadratów): Średnia kwadratów dla efektu grupy “default” wynosi 286,792,390, a średnia kwadratów dla reszt wynosi 205,319.
-“F value” (Wartość F): Wartość F wynosi 1,397.
-“Pr(>F)” (P-wartość): P-wartość wynosi mniej niż 0,0000000000000002, co oznacza, że istnieje istotna statystycznie różnica między grupami “default” w kontekście zmiennej “balance”.
Ogólnie rzecz biorąc, wyniki analizy wariancji wskazują na istotny efekt grupy “default” na zmienną “balance”.