library(readr)
library(dplyr)
library(ggplot2)
library(car)
| Pada tahap awal, dilakukan pemanggilan beberapa library yang
dibutuhkan dalam proses analisis data. Library readr digunakan untuk
membaca dataset, dplyr untuk manipulasi data, ggplot2 untuk visualisasi,
serta car untuk mendukung analisis statistik multivariat seperti MANOVA
dan MANCOVA. |
# Import dataset
data <- read.csv("insurance.csv")
# Lihat struktur data
str(data)
## 'data.frame': 1338 obs. of 7 variables:
## $ age : int 19 18 28 33 32 31 46 37 37 60 ...
## $ sex : chr "female" "male" "male" "male" ...
## $ bmi : num 27.9 33.8 33 22.7 28.9 ...
## $ children: int 0 1 3 0 0 0 1 3 2 0 ...
## $ smoker : chr "yes" "no" "no" "no" ...
## $ region : chr "southwest" "southeast" "southeast" "northwest" ...
## $ charges : num 16885 1726 4449 21984 3867 ...
# Ringkasan data
summary(data)
## age sex bmi children
## Min. :18.00 Length:1338 Min. :15.96 Min. :0.000
## 1st Qu.:27.00 Class :character 1st Qu.:26.30 1st Qu.:0.000
## Median :39.00 Mode :character Median :30.40 Median :1.000
## Mean :39.21 Mean :30.66 Mean :1.095
## 3rd Qu.:51.00 3rd Qu.:34.69 3rd Qu.:2.000
## Max. :64.00 Max. :53.13 Max. :5.000
## smoker region charges
## Length:1338 Length:1338 Min. : 1122
## Class :character Class :character 1st Qu.: 4740
## Mode :character Mode :character Median : 9382
## Mean :13270
## 3rd Qu.:16640
## Max. :63770
| Selanjutnya, dataset diimpor ke dalam R menggunakan fungsi
read.csv(). Setelah data berhasil dimuat, dilakukan pengecekan struktur
data menggunakan str() untuk mengetahui tipe masing-masing variabel,
serta summary() untuk melihat ringkasan statistik awal dari data yang
akan dianalisis. |
# Mengubah variabel kategorik menjadi factor
data$sex <- as.factor(data$sex)
data$smoker <- as.factor(data$smoker)
data$region <- as.factor(data$region)
# Cek ulang struktur
str(data)
## 'data.frame': 1338 obs. of 7 variables:
## $ age : int 19 18 28 33 32 31 46 37 37 60 ...
## $ sex : Factor w/ 2 levels "female","male": 1 2 2 2 2 1 1 1 2 1 ...
## $ bmi : num 27.9 33.8 33 22.7 28.9 ...
## $ children: int 0 1 3 0 0 0 1 3 2 0 ...
## $ smoker : Factor w/ 2 levels "no","yes": 2 1 1 1 1 1 1 1 1 1 ...
## $ region : Factor w/ 4 levels "northeast","northwest",..: 4 3 3 2 2 3 3 2 1 2 ...
## $ charges : num 16885 1726 4449 21984 3867 ...
| Pada tahap ini dilakukan proses preprocessing dengan mengubah
variabel kategorik seperti sex, smoker, dan region menjadi tipe factor.
Hal ini penting karena analisis MANOVA membutuhkan variabel independen
dalam bentuk kategori sebagai pembeda antar kelompok |
summary(data[, c("charges", "bmi", "age")])
## charges bmi age
## Min. : 1122 Min. :15.96 Min. :18.00
## 1st Qu.: 4740 1st Qu.:26.30 1st Qu.:27.00
## Median : 9382 Median :30.40 Median :39.00
## Mean :13270 Mean :30.66 Mean :39.21
## 3rd Qu.:16640 3rd Qu.:34.69 3rd Qu.:51.00
## Max. :63770 Max. :53.13 Max. :64.00
| Analisis statistik deskriptif dilakukan untuk mengetahui gambaran
umum dari variabel utama, yaitu charges, bmi, dan age. Hasil ini
memberikan informasi mengenai nilai minimum, maksimum, rata-rata, serta
distribusi awal data. |
# Histogram charges
ggplot(data, aes(x = charges)) +
geom_histogram(bins = 30, fill = "red", alpha = 0.7)

# Histogram BMI
ggplot(data, aes(x = bmi)) +
geom_histogram(bins = 30, fill = "green", alpha = 0.7)

# Boxplot charges berdasarkan smoker
ggplot(data, aes(x = smoker, y = charges)) +
geom_boxplot(fill = "orange")

# Boxplot BMI berdasarkan region
ggplot(data, aes(x = region, y = bmi)) +
geom_boxplot(fill = "blue")

| Visualisasi data dilakukan untuk melihat pola distribusi dan
perbedaan antar kelompok. Histogram digunakan untuk melihat distribusi
variabel numerik seperti charges dan bmi, sedangkan boxplot digunakan
untuk membandingkan distribusi data berdasarkan kelompok seperti smoker
dan region. |
shapiro.test(data$charges)
##
## Shapiro-Wilk normality test
##
## data: data$charges
## W = 0.81469, p-value < 2.2e-16
shapiro.test(data$bmi)
##
## Shapiro-Wilk normality test
##
## data: data$bmi
## W = 0.99389, p-value = 2.605e-05
cor(data$charges, data$bmi)
## [1] 0.198341
| Pengujian asumsi dilakukan sebelum analisis utama. Uji normalitas
menggunakan Shapiro-Wilk test bertujuan untuk mengetahui apakah data
berdistribusi normal. Selain itu, dilakukan uji korelasi antar variabel
dependen untuk memastikan tidak terjadi hubungan yang terlalu kuat yang
dapat mempengaruhi hasil analisis MANOVA. |
boxplot(charges ~ smoker, data = data)

boxplot(bmi ~ region, data = data)

# Model MANOVA
manova_model <- manova(cbind(charges, bmi) ~ smoker + region, data = data)
# Hasil MANOVA
summary(manova_model)
## Df Pillai approx F num Df den Df Pr(>F)
## smoker 1 0.64523 1211.29 2 1332 < 2.2e-16 ***
## region 3 0.08708 20.23 6 2666 < 2.2e-16 ***
## Residuals 1333
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# Hasil ANOVA per variabel
summary.aov(manova_model)
## Response charges :
## Df Sum Sq Mean Sq F value Pr(>F)
## smoker 1 1.2152e+11 1.2152e+11 2175.8631 <2e-16 ***
## region 3 1.0752e+08 3.5841e+07 0.6417 0.5882
## Residuals 1333 7.4447e+10 5.5849e+07
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Response bmi :
## Df Sum Sq Mean Sq F value Pr(>F)
## smoker 1 1 0.70 0.0204 0.8864
## region 3 4064 1354.72 39.5537 <2e-16 ***
## Residuals 1333 45655 34.25
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
| Analisis MANOVA dilakukan untuk menguji pengaruh variabel
independen, yaitu smoker dan region, terhadap dua variabel dependen
secara simultan, yaitu charges dan bmi. Output yang dihasilkan digunakan
untuk mengetahui apakah terdapat perbedaan yang signifikan antar
kelompok. |
# Model MANCOVA (dengan covariate age)
mancova_model <- manova(cbind(charges, bmi) ~ smoker + region + age, data = data)
# Hasil MANCOVA
summary(mancova_model)
## Df Pillai approx F num Df den Df Pr(>F)
## smoker 1 0.71114 1638.36 2 1331 < 2.2e-16 ***
## region 3 0.08738 20.28 6 2664 < 2.2e-16 ***
## age 1 0.27098 247.37 2 1331 < 2.2e-16 ***
## Residuals 1332
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# ANOVA detail
summary.aov(mancova_model)
## Response charges :
## Df Sum Sq Mean Sq F value Pr(>F)
## smoker 1 1.2152e+11 1.2152e+11 2970.6621 <2e-16 ***
## region 3 1.0752e+08 3.5841e+07 0.8762 0.4528
## age 1 1.9959e+10 1.9959e+10 487.9181 <2e-16 ***
## Residuals 1332 5.4488e+10 4.0907e+07
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Response bmi :
## Df Sum Sq Mean Sq F value Pr(>F)
## smoker 1 1 0.70 0.0207 0.8857
## region 3 4064 1354.72 40.0669 < 2.2e-16 ***
## age 1 619 618.60 18.2955 2.027e-05 ***
## Residuals 1332 45037 33.81
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
| Analisis MANCOVA merupakan pengembangan dari MANOVA dengan
menambahkan variabel age sebagai kovariat. Tujuannya adalah untuk
mengontrol pengaruh usia terhadap variabel dependen, sehingga hasil
analisis menjadi lebih akurat dan mencerminkan kondisi yang lebih
nyata. |
# Korelasi lengkap
cor(data[, c("charges", "bmi", "age")])
## charges bmi age
## charges 1.0000000 0.1983410 0.2990082
## bmi 0.1983410 1.0000000 0.1092719
## age 0.2990082 0.1092719 1.0000000
# Rata-rata charges per smoker
aggregate(charges ~ smoker, data = data, mean)
## smoker charges
## 1 no 8434.268
## 2 yes 32050.232
# Rata-rata BMI per region
aggregate(bmi ~ region, data = data, mean)
## region bmi
## 1 northeast 29.17350
## 2 northwest 29.19978
## 3 southeast 33.35599
## 4 southwest 30.59662
| Analisis tambahan dilakukan untuk melihat rata-rata nilai charges
berdasarkan status merokok serta rata-rata bmi berdasarkan wilayah.
Hasil ini membantu memperkuat interpretasi dalam pembahasan |