1. Memanggil data Starwars

Memanggil dataset starwars pada library dplyr

library(dplyr) 
## Warning: package 'dplyr' was built under R version 4.3.3
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
data <- starwars 
head(data)
## # A tibble: 6 × 14
##   name      height  mass hair_color skin_color eye_color birth_year sex   gender
##   <chr>      <int> <dbl> <chr>      <chr>      <chr>          <dbl> <chr> <chr> 
## 1 Luke Sky…    172    77 blond      fair       blue            19   male  mascu…
## 2 C-3PO        167    75 <NA>       gold       yellow         112   none  mascu…
## 3 R2-D2         96    32 <NA>       white, bl… red             33   none  mascu…
## 4 Darth Va…    202   136 none       white      yellow          41.9 male  mascu…
## 5 Leia Org…    150    49 brown      light      brown           19   fema… femin…
## 6 Owen Lars    178   120 brown, gr… light      blue            52   male  mascu…
## # ℹ 5 more variables: homeworld <chr>, species <chr>, films <list>,
## #   vehicles <list>, starships <list>

2. Buang amatan tidak terpakai

Buang amatan yang memiliki missing value

data = data %>% na.omit()

Ambil data nama, height, dan mass saja dengan menggunakan select()

data_selected <- data %>% select("name", "height", "mass")
head(data_selected)
## # A tibble: 6 × 3
##   name               height  mass
##   <chr>               <int> <dbl>
## 1 Luke Skywalker        172    77
## 2 Darth Vader           202   136
## 3 Leia Organa           150    49
## 4 Owen Lars             178   120
## 5 Beru Whitesun Lars    165    75
## 6 Biggs Darklighter     183    84

3. Eksplorasi Data

a. Memeriksa sebaran data

#mengambil masing-masing data height dan mass untuk dilakukan analisis
height <- as.numeric(data_selected$height)
mass <- as.numeric(data_selected$mass)
#menghitung rata-rata dari height dan mass
rata_h <- mean(height)
rata_m <- mean(mass)

rata_h
## [1] 178.6552
rata_m
## [1] 77.77241
#menhitung simpangan baku dari height dan mass
sd_h <- sd(height)
sd_m <- sd(mass)

sd_h
## [1] 22.39942
sd_m
## [1] 23.08585
#membuat histogram untuk melihat sebaran data
hist(height)

hist(mass)

#memeriksa apakah data mengikuti sebaran normal
qqnorm(height, col = 'blue') 
qqline(height)

qqnorm(mass, col = 'blue') 
qqline(mass)

#memeriksa apakah data mengikuti sebaran normal, jika p-value kurang dari 0,05 maka data tidak mengikuti sebaran normal

#untuk height, rata-ratanya 178,66 dan simpangan bakunya 22,40
ks.test(height, "pnorm", 178.66, 22.40)
## Warning in ks.test.default(height, "pnorm", 178.66, 22.4): ties should not be
## present for the Kolmogorov-Smirnov test
## 
##  Asymptotic one-sample Kolmogorov-Smirnov test
## 
## data:  height
## D = 0.21159, p-value = 0.149
## alternative hypothesis: two-sided
#untuk mass, rata-ratanya 77,77 dan simpangan bakunya 23,09
ks.test(mass, "pnorm", 77.77, 23.09)
## Warning in ks.test.default(mass, "pnorm", 77.77, 23.09): ties should not be
## present for the Kolmogorov-Smirnov test
## 
##  Asymptotic one-sample Kolmogorov-Smirnov test
## 
## data:  mass
## D = 0.25572, p-value = 0.04506
## alternative hypothesis: two-sided

Kesimpulannya, pada taraf nyata 5%, data height menyebar dengan sebaran normal sementara data mass tidak menyebar dengan sebaran normal.

#memerikas apkaah data mass mengikuti sebaran chi~squared dengan menggunakan KS Test
ks.test(mass, "pchisq", 77.77)
## Warning in ks.test.default(mass, "pchisq", 77.77): ties should not be present
## for the Kolmogorov-Smirnov test
## 
##  Asymptotic one-sample Kolmogorov-Smirnov test
## 
## data:  mass
## D = 0.19067, p-value = 0.2424
## alternative hypothesis: two-sided

Kesimpulannya, pada taraf nyata 5%, data mass menyebar dengan sebaran chi-square. ## b. pendeteksian pencilan

#membuat boxplot dari data height dan mass
boxplot(height, main = "Boxplot dari height")

boxplot(mass, main = "Boxplot dari mass")

#mencari pencilan pada daata height dengan menggunakan IQR
boxplot.stats(height)$out
## [1] 228  88
order.out =  boxplot.stats(height)$out
pencicilan = which(height %in% c(order.out))
pencicilan
## [1]  9 18

terdapat pencilan di data height pada indeks 9 dan 18 dengan nilai 228 dan 88

#mencari pencilan pada daata mass dengan menggunakan IQR
boxplot.stats(mass)$out
##  [1] 136.0  49.0 120.0 112.0 113.0  20.0  45.0  55.0  56.2  50.0
order.out =  boxplot.stats(mass)$out
pencicilan = which(mass %in% c(order.out))
pencicilan
##  [1]  2  3  4  9 14 18 19 22 26 27

terdapat pencilan di data mass pada indeks 2, 3, 4, 9, 14, 18, 19, 22, 26, dan 27 dengan nilai 136.0, 49.0, 120.0, 112.0, 113.0, 20.0, 45.0, 55.0, 56.2, 50.0

c. statistik kekar untuk ukuran pemusatan

#memanggil lubrary datawizard
library(datawizard)
## Warning: package 'datawizard' was built under R version 4.3.3
#mencari rata-rata menggunakan winsorized
win.height=winsorize(
  height,
  threshold = 0.15,
  method = "percentile",
  robust = FALSE,
  verbose = TRUE)
cat("\nSesudah : ",win.height)
## 
## Sesudah :  172 193 170 178 170 183 182 188 193 180 170 170 183 190 177 175 180 170 185 193 175 178 188 193 188 170 170 193 183
win.mass=winsorize(
  mass,
  threshold = 0.15,
  method = "percentile",
  robust = FALSE,
  verbose = TRUE)
cat("\nSesudah : ",win.mass)
## 
## Sesudah :  77 84 55 84 75 84 77 84 84 80 77 75 78.2 84 79 79 83 55 55 66 80 55 84 82 80 56.2 55 80 79
mean(winsorize(win.height))
## [1] 180.1724
mean(winsorize(win.mass))
## [1] 74.91034
#mencari rata-rata menggunakan Trimmed mean
mean(height, trim=0.15)
## [1] 180.381
mean(mass, trim=0.15)
## [1] 76.68571

Hasil rata-rata menggunakan winsorized dan trimmed mean tidak berbeda jauh. kedua rata-rata data mass terpangkas sama sama lebih kecil jika dibandingkan dengan rata-rata aslinya. sedangkan kedua rata-rata data height terpangkas lebih besar jika dibandingkan dengan rata-rata aslinya. Menurut saya lebih baik menggunakan winsorized mean pada kasus ini karena datanya tidak terlalu terpengaruh dengan data outlier di pagar batas atas (winsorized mean<trimeed mean)

d. menambahkan data baru

menambahkan amatan baru dengan height 200 dan mass 100

keterangan : menggunakan c, tidak menggunakan rbind. karena pada proses eksplorasi data height dan mass sudah terlanjur dipisah

#menambahkan amatan baru menggunakan rbind()
height_baru <- c(height, 210)
mass_baru <- c(mass, 100)
height_baru
##  [1] 172 202 150 178 165 183 182 188 228 180 170 170 183 190 177 175 180  88 185
## [20] 196 175 178 188 198 188 170 166 193 183 210
#mencari pencilan dari height
Q1 <- quantile(height_baru, 0.25)
Q3 <- quantile(height_baru, 0.75)
IQR_value <- IQR(height_baru)
lower_bound <- Q1 - 1.5 * IQR_value
upper_bound <- Q3 + 1.5 * IQR_value

outliers <- height_baru[height_baru < lower_bound | height_baru > upper_bound]
outliers
## [1] 228  88
mass_baru
##  [1]  77.0 136.0  49.0 120.0  75.0  84.0  77.0  84.0 112.0  80.0  77.0  75.0
## [13]  78.2 113.0  79.0  79.0  83.0  20.0  45.0  66.0  80.0  55.0  84.0  82.0
## [25]  80.0  56.2  50.0  80.0  79.0 100.0
#mencari pencilan dari mass
Q1 <- quantile(mass_baru, 0.25)
Q3 <- quantile(mass_baru, 0.75)
IQR_value <- IQR(mass_baru)
lower_bound <- Q1 - 1.5 * IQR_value
upper_bound <- Q3 + 1.5 * IQR_value

outliers <- mass_baru[mass_baru < lower_bound | mass_baru > upper_bound]
outliers
##  [1] 136.0  49.0 120.0 112.0 113.0  20.0  45.0  55.0  56.2  50.0 100.0

Kesimpulan dari penambahan amatan

Setelah ditelusuri menggunakan IQR, ternyata amatan baru pada height (210) tidak termasuk pencilan. sedangkan amatan baru pada mass (100) termasuk pencilan.