SPREMENLJIVKE:
VIRI PODATKOV : Choi, M. (2017). Medical Cost Personal Datasets. Pridobljeno 23. 12. 2023 s https://www.kaggle.com/datasets/mirichoi0218/insurance
UVOZ IN UREJANJE SEKUNDARNIH PODATKOV:
podatki <- read.table("./insurance.csv",
header = TRUE,
sep = ",",
dec = ".") #Uvozim podatke v Coma-separated values obliki
colnames(podatki) <- c("Starost", "Spol", "BMI", "StOtrok", "Kadilec", "Regija", "Stroski")
#Spremenljivkam določim imena
podatki$ID <- seq(1, nrow(podatki)) #Dodam ID-je posameznim enotam
head(podatki) #Izpišem prvih šest vrednosti
## Starost Spol BMI StOtrok Kadilec Regija Stroski ID
## 1 19 female 27.900 0 yes southwest 16884.924 1
## 2 18 male 33.770 1 no southeast 1725.552 2
## 3 28 male 33.000 3 no southeast 4449.462 3
## 4 33 male 22.705 0 no northwest 21984.471 4
## 5 32 male 28.880 0 no northwest 3866.855 5
## 6 31 female 25.740 0 no southeast 3756.622 6
podatki$SpolF <- factor(podatki$Spol, #Spremenljivko Spol pretvorim v faktor
levels = c( "male", "female"),
labels = c("M", "Z"));
podatki$KadilecF <- factor(podatki$Kadilec, #Spremenljivko Kadilec pretvorim v faktor
levels = c( "yes", "no"),
labels = c("DA", "NE"));
podatki$RegijaF <- factor(podatki$Regija, #Spremenljivko regija pretvorim v faktor
levels = c("southeast", "southwest", "northeast", "northwest"),
labels = c("JV", "JZ", "SV", "SZ"));
str(podatki) #Preverim strukturo posameznih spremenljivk
## 'data.frame': 1338 obs. of 11 variables:
## $ Starost : int 19 18 28 33 32 31 46 37 37 60 ...
## $ Spol : chr "female" "male" "male" "male" ...
## $ BMI : num 27.9 33.8 33 22.7 28.9 ...
## $ StOtrok : int 0 1 3 0 0 0 1 3 2 0 ...
## $ Kadilec : chr "yes" "no" "no" "no" ...
## $ Regija : chr "southwest" "southeast" "southeast" "northwest" ...
## $ Stroski : num 16885 1726 4449 21984 3867 ...
## $ ID : int 1 2 3 4 5 6 7 8 9 10 ...
## $ SpolF : Factor w/ 2 levels "M","Z": 2 1 1 1 1 2 2 2 1 2 ...
## $ KadilecF: Factor w/ 2 levels "DA","NE": 1 2 2 2 2 2 2 2 2 2 ...
## $ RegijaF : Factor w/ 4 levels "JV","JZ","SV",..: 2 1 1 4 4 1 1 4 3 4 ...
set.seed(1700) #določim seme, da vedno delam na istih podatkih
podatki <- podatki[sample(nrow(podatki), 150), ] #Ker gre za obširen dataset umetno zmanjšam vzorec na n = 150
OPIS PODATKOV:
summary(podatki[colnames(podatki) %in% c("Starost", "SpolF", "BMI", "StOtrok", "KadilecF", "RegijaF", "Stroski")])
## Starost BMI StOtrok Stroski SpolF KadilecF
## Min. :18.0 Min. :17.20 Min. :0.00 Min. : 1136 M:75 DA: 35
## 1st Qu.:27.0 1st Qu.:25.80 1st Qu.:0.00 1st Qu.: 5016 Z:75 NE:115
## Median :40.5 Median :30.30 Median :1.00 Median :10097
## Mean :40.0 Mean :30.33 Mean :1.12 Mean :14190
## 3rd Qu.:53.0 3rd Qu.:34.27 3rd Qu.:2.00 3rd Qu.:19359
## Max. :64.0 Max. :45.54 Max. :4.00 Max. :48173
## RegijaF
## JV:40
## JZ:40
## SV:32
## SZ:38
##
##
#izpišem opisno stat. s pomočjo funkcije summary, da lahko med drugim preverim tudi frekvence v faktorjih
RAZLAGA ZA SPREM. STAROST IN FAKTOR SPOL: Najmlajša oseba zajeta v vzorec je bila stara 18 let, najstarejša pa 64 let. Prvi kvantil predstavlja 27 let, tretji kvantil pa 53 let. Mediana starosti je znašala 40,5 let - natanko polovica enot je mlajša ali stara natanko 40,5 let, ostale enote so starejše od 40,5 let. Aritmetična sredina znaša natanko 40 let. V vzorec je zajetih 75 moških in 75 žensk.
library(psych)
describe(podatki [, c(-2, -5, -6, -8, -9, -10, -11)]) #izpisem opisno statistko s pomočjo funkcije describe,
## vars n mean sd median trimmed mad min max
## Starost 1 150 40.00 14.12 40.50 39.97 20.02 18.0 64.00
## BMI 2 150 30.33 5.93 30.30 30.39 6.41 17.2 45.54
## StOtrok 3 150 1.12 1.09 1.00 1.01 1.48 0.0 4.00
## Stroski 4 150 14190.36 12430.02 10096.53 12071.05 8624.74 1136.4 48173.36
## range skew kurtosis se
## Starost 46.00 -0.01 -1.26 1.15
## BMI 28.34 -0.06 -0.56 0.48
## StOtrok 4.00 0.57 -0.75 0.09
## Stroski 47036.96 1.32 0.75 1014.91
#smiselno iz izpisa odstranim faktorje in ID-je
RAZLAGA ZA SPREMENLJIVKO STROŠKI: V vzorec je zajetih 150 oseb, aritmetična sredina enkratnih stroškov zdravstvene obravnave znaša 14190,36 $, standardni odklon znaša 12430, 02 $, mediana znaša 10096, 53 $, aritmetična sredina brez ekstremnih vrednosti znaša 12071, 05 $, mediana absolutne deviacije znaša 8624, 74 $, najnižja vrednost stroškov znaša 1136, 40 $, najvišja vrednost stroškov znaša 48173, 36 $, variacijski razmik znaša 47036, 96 $, porazdelitev stroškov zdravstvene obravnave je asimetrična v desno ter pretežno koničasta, standardna napaka znaša 1014, 91 $.
BodyMI <- hist(podatki$Stroski, #Prikažem histogram porazdelitve stroškov zdravstvenih storitev
main = "Porazdelitev stroškov zdravstvene oskrbe ",
xlab = "Stroški zdravstvene oskrbe ($) ",
ylab = "Frekvenca",
freq=TRUE,
breaks = 20,
col="darkmagenta", #polnilo
border="black") #obroba
RAZLAGA: Glede na grafični prikaz lahko sklepam,
da je porazdelitev stroškov asimetrična v desno ter pretežno koničasta.
Gre za pričakovano obliko porazdelitve.
CILJI ANALIZE: Na podlagi sekundarnih vzorčnih podatkov analizirati ali se indeks telesne teže v ZDA razlikuje med posameznimi regijami/območji.
library(psych)
describeBy(podatki$BMI, podatki$RegijaF) #describe opisna statistika, grupirano po posameznih regijah
##
## Descriptive statistics by group
## group: JV
## vars n mean sd median trimmed mad min max range skew kurtosis se
## X1 1 40 32.36 5.93 33.33 32.41 6.6 21.12 45.54 24.42 -0.06 -0.8 0.94
## ------------------------------------------------------------
## group: JZ
## vars n mean sd median trimmed mad min max range skew kurtosis se
## X1 1 40 31.74 5.78 33.4 31.93 6.08 17.4 42.9 25.5 -0.34 -0.48 0.91
## ------------------------------------------------------------
## group: SV
## vars n mean sd median trimmed mad min max range skew kurtosis se
## X1 1 32 28.03 6.21 27.55 27.84 6.83 17.2 39.71 22.52 0.19 -1.03 1.1
## ------------------------------------------------------------
## group: SZ
## vars n mean sd median trimmed mad min max range skew kurtosis se
## X1 1 38 28.65 4.81 28.88 28.76 4.23 17.39 37.72 20.33 -0.32 -0.2 0.78
RAZLAGA: Na podlagi primerjave centralnih tendenc med posameznimi področji ugotavljam, da lahko pričakujem statistično značilne razlike med posameznimi področji. Iz opisanega sledi, da je razlike smiselno statistično preveriti. Vsebinsko pričakujem, da se bo od drugih regij razlikovala predvsem jugovzhodna regija, saj so zvezdni državi Florida in Georgia, ki so del le te eni izmed vodilnih držav v povezavi z prekomerno telesno težo.
#install.packages('dplyr')
#install.packages('rstatix')
library(rstatix)
library(dplyr)
podatki %>%
group_by(RegijaF) %>% #Izvedem test normalnosti BMI-ja na posameznem območju s pomočjo Shapiro-Wilkovega testa normalnosti
shapiro_test(BMI)
## # A tibble: 4 × 4
## RegijaF variable statistic p
## <fct> <chr> <dbl> <dbl>
## 1 JV BMI 0.976 0.551
## 2 JZ BMI 0.977 0.588
## 3 SV BMI 0.967 0.409
## 4 SZ BMI 0.976 0.574
RAZLAGA: Shapirov test normalnost: H0 = podatki sledijo normalni porazdelitvi, H1 = podatki ne sledijo normalni porazdelitvi. Na podlagi Shapiro-Wilkovega testa sklepam, da se spremenljivka BMI v vseh štirih področjih porazdeljuje normalno (p > 0,05 v vseh štirih skupinah).
#install.packages("tidyverse")
#install.packages('ggplot2')
library(ggplot2) #aktiviram knjižnico ggplot2
JugoV <- ggplot(podatki[podatki$RegijaF == "JV", ], aes(x = BMI)) + #Jugovzhodno področje
theme_linedraw() +
geom_histogram(binwidth = 3, color="#F4DF4EFF",
fill="#949398FF", linewidth = 1.2) +
geom_density(alpha = 0.5, fill="#FF6655") +
xlab("Indeks telesne mase")+
ylab("Frekvenca") +
ggtitle("Porazdelitev BMI-ja na jugovzhodu")
JugoZ <- ggplot(podatki[podatki$RegijaF == "JZ", ], aes(x = BMI)) + #Jugozadhodno področje
theme_linedraw() +
geom_histogram(binwidth = 3, color="#F4DF4EFF",
fill="#949398FF", linewidth = 1.2) +
geom_density(alpha = 0.5, fill="#FF6655") +
xlab("Indeks telesne mase")+
ylab("Frekvenca") +
ggtitle("Porazdelitev BMI-ja na jugozahodu")
SeveroV <- ggplot(podatki[podatki$RegijaF == "SV", ], aes(x = BMI)) + #Severovzhodna regija
theme_linedraw() +
geom_histogram(binwidth = 3, color="#E69A8DFF",
fill="#5F4B8BFF", linewidth = 1.2) +
geom_density(alpha = 0.5, fill="#FF6655") +
xlab("Indeks telesne mase")+
ylab("Frekvenca") +
ggtitle("Porazdelitev BMI-ja na severovzhodu")
SeveroZ <- ggplot(podatki[podatki$RegijaF == "SZ", ], aes(x = BMI)) + #Severozahodna regija
theme_linedraw() +
geom_histogram(binwidth = 3, color="#E69A8DFF",
fill="#5F4B8BFF", linewidth = 1.2) +
geom_density(alpha = 0.5, fill="#FF6655") +
xlab("Indeks telesne mase")+
ylab("Frekvenca") +
ggtitle("Porazdelitev BMI-ja na severozahodu")
#install.packages('ggpubr')
library(ggpubr)
ggarrange(JugoV, JugoZ, SeveroV, SeveroZ, #grafične prikaze postavim v dve vrsti in dva stolpca
ncol = 2, nrow = 2)
RAZLAGA: Na podlagi grafičnega prikaza sklepam, da porazdlitve BMI-ja vizualno izgledajo dokaj normalne na vseh štirih področjih.Vizualno je še najbolj problematična porazdelitev severovzhodnega predela. Kljub temu Shapiro-Wilkov test potrjuje normalnost v vseh skupinah zato smatram, da je predpostavka o normalni porazdlitvi obravnavane spremenljivke znotraj raziskovanih skupin izpolnjena.
#install.packages('car')
library(car)
leveneTest(podatki$BMI, podatki$RegijaF) #Izvedem Levene-ov test homogenosti varianc glede na štiri področja
## Levene's Test for Homogeneity of Variance (center = median)
## Df F value Pr(>F)
## group 3 1.3915 0.2478
## 146
RAZLAGA: Levene-ov test homogenosti varianc: H0 = variance so homogene, H1 = variance niso homogene. Na podlagi rezultata testa zaključim, da je predpostavka o homoskedastičnosti izpolnjena (F = 1.3915, p > 0.05)
rezultatiAOV <- aov(BMI ~ RegijaF, #na vzorčnih podatkov izvedem parametrični test analize varianc ANOVA
data = podatki)
summary (rezultatiAOV) #izpis povzetka
## Df Sum Sq Mean Sq F value Pr(>F)
## RegijaF 3 521 173.76 5.367 0.00156 **
## Residuals 146 4727 32.38
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#install.packages('effectsize')
library(effectsize) #Preverim velikost učinka
eta_squared(rezultatiAOV)
## # Effect Size for ANOVA
##
## Parameter | Eta2 | 95% CI
## -------------------------------
## RegijaF | 0.10 | [0.03, 1.00]
##
## - One-sided CIs: upper bound fixed at [1.00].
interpret_eta_squared(0.10, rules = "cohen1992") #interpretacija velikost učinka
## [1] "small"
## (Rules: cohen1992)
RAZLAGA: Na podlagi parametričnega testa analize varianc ugotavljam, da med področji/regijami v ZDA pri indeksu telesne mase prihaja do statistično značilnih razlik (vsaj ena izmed primerjanih aritmetičnih sredin se razlikuje od ostalih) (p < 0,002). Razlike so vsebinsko majhne (Eta2 = 0.10).
library(rstatix)
pairwise_t_test(BMI ~ RegijaF, #Izvedem Post hoc test, da ugotovim med katerimi skupinami prihaja do razlik
paired = FALSE, #gre za skupine
p.adjust.method ="bonferroni", #uporabim Bonferronijev popravek, da se izognem napihnjenim p-jem
data = podatki)
## # A tibble: 6 × 9
## .y. group1 group2 n1 n2 p p.signif p.adj p.adj.signif
## * <chr> <chr> <chr> <int> <int> <dbl> <chr> <dbl> <chr>
## 1 BMI JV JZ 40 40 0.621 ns 1 ns
## 2 BMI JV SV 40 32 0.00163 ** 0.00975 **
## 3 BMI JZ SV 40 32 0.00682 ** 0.0409 *
## 4 BMI JV SZ 40 38 0.00452 ** 0.0271 *
## 5 BMI JZ SZ 40 38 0.0179 * 0.107 ns
## 6 BMI SV SZ 32 38 0.652 ns 1 ns
RAZLAGA: Na podlagi Post-Hoc testov ugotavljam, da do statistično značilnih razlik med indeksom telesne mase prihaja med jugovzhodnim predelom ter severnovzhodnim predelom (p < 0,01 ), med jugozahodnim ter severozahodnim predelom (p < 0,005) ter med jugovzhodnim in severozahodnim predelom (p < 0,03). Razlike med ostalimi tremi pari so statistično neznačilne.
kruskal.test(BMI ~ RegijaF, #Opravim alternativni neparametrični Kruskal-Wallisov test
data = podatki)
##
## Kruskal-Wallis rank sum test
##
## data: BMI by RegijaF
## Kruskal-Wallis chi-squared = 14.145, df = 3, p-value = 0.002715
library(effectsize)
kruskal_effsize(BMI ~ RegijaF, #Ponovno ocenim velikost učinka
data = podatki)
## # A tibble: 1 × 5
## .y. n effsize method magnitude
## * <chr> <int> <dbl> <chr> <ord>
## 1 BMI 150 0.0763 eta2[H] moderate
RAZLAGA: Na podlagi Kruskal-Wallisovega testa lahko trdim, da med BMI-jem med posameznimi regijami prihaja do statistično značilnih razlik (vsaj ena preučevana lokacija porazdelitve se razlikuje od preostalih) (Chi squared = 14,145, p < 0.003 ). Razlike so vsebinsko gledano srednje velike (Eta2 = 0.0763).
library(rstatix)
wilcox_test(BMI ~ RegijaF, #Post hoc test, da lahko opredelim razlike med posameznimi skupinami
paired = FALSE, #gre za skupine
p.adjust.method = "bonferroni", #Bonferronijev popravek, da se izognem napaki prve vrste
data = podatki)
## # A tibble: 6 × 9
## .y. group1 group2 n1 n2 statistic p p.adj p.adj.signif
## * <chr> <chr> <chr> <int> <int> <dbl> <dbl> <dbl> <chr>
## 1 BMI JV JZ 40 40 840. 0.707 1 ns
## 2 BMI JV SV 40 32 878 0.007 0.043 *
## 3 BMI JV SZ 40 38 1038 0.006 0.033 *
## 4 BMI JZ SV 40 32 868 0.01 0.06 ns
## 5 BMI JZ SZ 40 38 1007 0.014 0.082 ns
## 6 BMI SV SZ 32 38 560. 0.579 1 ns
RAZLAGA: Na podlagi Wilcox Post-Hoc testa ugotavljam, da do statistično značilnih razlik pri indeksih telesne mase prihaja med jugovzhodnim in severovzdhodnim predelom ZDA (p < 0.05) ter med jugovzhodnim predelom in severozahodnim predelom ZDA (p < 0.04).
Ker predpostavki o normalnosti obravnavane spremenljivke znotraj
skupin ter o homogenosti varianc niso bile kršene, obravnavana
spremenljivka pa je bila številska in ni vsebovala osamelcev, kot bolj
relevantne rezultate vidim tiste, ki jih ponujajo parametrični testi
(saj imajo le ti v temu primeru večjo statistično moč). Na podlagi
vzorčnih podatkov sem s pomočjo analize varianc (ANOVA) potrdil, da med
skupinami (predeli ZDA) prihaja do statistično značilnih razlik (vsaj
ena aritmetična sredina se je razlikovala od ostalih) (p < 0,02, F =
5.367). Velikost učinka je bila majhna (Eta2 = 0.10). Nadaljno sem na
podlagi vzorčnih podatkov uspel s pomočjo Post-Hoc parametričnih testov
statistično potrdil, da do statistično značilnih razlik pri indeksu
telesne mase prihaja med jugovzhodnim predelom ter severnovzhodnim
predelom ZDA (p < 0,01 ), med jugozahodnim ter severozahodnim
predelom ZDA (p < 0,005) ter med jugovzhodnim in severozahodnim
predelom ZDA (p < 0,03). Razlike med ostalimi tremi pari so
statistično neznačilne. S slednjim sem uspešno odgovoril na zastavljeno
raziskovalno vprašanje - razlike v indeksu telesne mase so med
nekaterimi področji v ZDA prisotne. Prav tako so ugotovitve v skladu z
pričakovanji.