Dosen Pengampu : Prof. Dr. Suhartono, M.Kom
Lembaga : Universitas Islam Negeri Maulana Malik Ibrahim Malang
Jurusan : Teknik Informatika
Fakultas : Sains dan Teknologi
Pada bagian ini kita akan membahas tentang persamaan-persamaan matematika yang menjadi dasar suatu uji statistik.
Kita dapat melakukan import data dalam berbagai format pada R. Namun, pada sub-chapter ini hanya akan dibahas bagaimana cara mengimport data dari file dengan format .csvdan .txt. Secara umum fungsi-fungsi yang digunakan untuk membaca data pada file dengan format tersebut adalah sebagai berikut:
read.table(file, header = FALSE, sep = "“, dec =”.", stringsAsFactors = default.stringsAsFactors())
read.csv(file, header = TRUE, sep = “,”, dec = “.”)
read.csv2(file, header = TRUE, sep = “;”, dec = “,”)
read.delim(file, header = TRUE, sep = “, dec =”.")
read.delim2(file, header = TRUE, sep = “, dec =”,")
Catatan :
- file : lokasi dan nama file yang akan dibaca diakhiri dengan format file. Secara default fungsi akan membaca file yang ada pada working directory. Untuk mengetahui lokasi working directory, jalankan fungsi getwd(). Salin file yang akan dibaca pada lokasi working directory.
- header : nilai logik yang menunjukkan apakah baris pertama pada file yang dibaca akan dibaca sebagai nama kolom.
- sep : simbol yang menujukkan pemisah antar data. Pemisah antar data dapat berupa ““,”;“,”.", dll.
- dec : simbol yang menujukkan desimal. Pemisah desimal dapat berupa “.” atau “,”.
- stringsAsFactors : nilai logik yang menunjukkan apakah jenis data string akan dikonversi menjadi factor.
Kelima fungsi tersebut digunakan untuk membaca data tabular atau data yang disusun kedalam format tabel. Fungsi read.table() merupakan bentuk umum dari keempat fungsi lainnya. Fungsi tersebut dapat digunakan untuk membaca data dalam kedua format yang telah disebutkan sebelumnya. Fungsi lainnya lebih spesifi, dimana fungsi read.csv() dan read.csv2() digunakan untuk membaca data dengan ekstensi .csv, sedangkan read.delim() dan read.delim2() untuk membaca data dengan ekstensi .txt. Berikut adalah contoh bagaimana cara membaca data dengan nama data.csv yang ada pada working directory dengan pemisah antar data berupa ; dan tanda koma berupa ,:
data <- read.table(file=“data.csv”, sep=“;”, dec=“,”)
Untuk keperluan pendidikan atau pengujian sebuah fungsi biasanya dalam sebuah library disediakan dataset yang siap digunakan. R melalui library datasets menyediakan sejumlah data yang dapat digunakan untuk berlatih menggunakan R. Berikut adalah fungsi yang digunakan untuk mengecek dataset apa saja yang tersedia pada sebuah library:
data(package=.packages(all.available = TRUE))
Catatan :
- package: nama library yang hendak dicek dataset yang tersedia.
Berikut adalah contoh cara melakukan pengecekan pada dataset yang tersedia pada library datasets:
data(package="datasets")
# cek seluruh dataset dari seluruh library yg telah dimuat
data()
Terdapat sejumlah fungsi yang akan pembaca sering gunakan untuk mengecek dataset yang akan pembaca analisa. Fungsi-fungsi tersebut antara lain:
- head(): mengecek n (default 6) observasi teratas.
- tail(): mengecek n (default 6) observasi terbawah.
- str(): mengecek struktur data atau jenis data pada masing-masing kolom. Jenis data yang ada pada R dapat berupa num (numerik), int (integer), Factor(factor), date (tanggal), dan chr (karakter atau string).
- summary(): ringkasan data.
Berikut adalah contoh penerapan fungsi-fungsi tersebut pada dataset iris:
# cek 10 observasi teratas
head(iris, 10)
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1 5.1 3.5 1.4 0.2 setosa
## 2 4.9 3.0 1.4 0.2 setosa
## 3 4.7 3.2 1.3 0.2 setosa
## 4 4.6 3.1 1.5 0.2 setosa
## 5 5.0 3.6 1.4 0.2 setosa
## 6 5.4 3.9 1.7 0.4 setosa
## 7 4.6 3.4 1.4 0.3 setosa
## 8 5.0 3.4 1.5 0.2 setosa
## 9 4.4 2.9 1.4 0.2 setosa
## 10 4.9 3.1 1.5 0.1 setosa
# cek 10 observasi terbawah
tail(iris, 10)
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 141 6.7 3.1 5.6 2.4 virginica
## 142 6.9 3.1 5.1 2.3 virginica
## 143 5.8 2.7 5.1 1.9 virginica
## 144 6.8 3.2 5.9 2.3 virginica
## 145 6.7 3.3 5.7 2.5 virginica
## 146 6.7 3.0 5.2 2.3 virginica
## 147 6.3 2.5 5.0 1.9 virginica
## 148 6.5 3.0 5.2 2.0 virginica
## 149 6.2 3.4 5.4 2.3 virginica
## 150 5.9 3.0 5.1 1.8 virginica
# cek struktur data
str(iris)
## 'data.frame': 150 obs. of 5 variables:
## $ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
## $ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
## $ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
## $ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
## $ Species : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
# ringkasan data
summary(iris)
## Sepal.Length Sepal.Width Petal.Length Petal.Width
## Min. :4.300 Min. :2.000 Min. :1.000 Min. :0.100
## 1st Qu.:5.100 1st Qu.:2.800 1st Qu.:1.600 1st Qu.:0.300
## Median :5.800 Median :3.000 Median :4.350 Median :1.300
## Mean :5.843 Mean :3.057 Mean :3.758 Mean :1.199
## 3rd Qu.:6.400 3rd Qu.:3.300 3rd Qu.:5.100 3rd Qu.:1.800
## Max. :7.900 Max. :4.400 Max. :6.900 Max. :2.500
## Species
## setosa :50
## versicolor:50
## virginica :50
##
##
##
Fungsi-fungsi lainnya yang dapat digunakan untuk melakukan analisis statistika deskriptif adalah sebagai berikut:
- mean() : menghitung nilai rata-rata variabel numerik.
- sd() : menghitung simpangan baku variabel numerik.
- var() : menghitung varians variabel numerik.
- median() : menghitung median suatu variabel numerik.
- range() : memperoleh nilai minimum dan maksimum suatu variabel numerik.
- IQR() : memperoleh nilai jarak antar kuartil.
- quantile() : memperoleh kuantil variabel numerik.
Berikut adalah contoh penerapan fungsi-fungsi tersebut:
attach(airquality)
# rata-rata konsentrasi ozon
mean(Ozone, na.rm = TRUE)
## [1] 42.12931
# median konsentrasi ozon
median(Ozone, na.rm = TRUE)
## [1] 31.5
# simpangan baku konsentrasi ozon
sd(Ozone, na.rm = TRUE)
## [1] 32.98788
# varians konsentrasi ozon
var(Ozone, na.rm = TRUE)
## [1] 1088.201
# range konsentrasi ozon
range(Ozone, na.rm = TRUE)
## [1] 1 168
# IQR konsentrasi ozon
IQR(Ozone, na.rm = TRUE)
## [1] 45.25
# kuartil 1, 2 dan 3 konsentrasi ozon
quantile(Ozone, probs = c(0.25, 0.5, 0.75), na.rm = TRUE)
## 25% 50% 75%
## 18.00 31.50 63.25
detach(airquality)
Metode uji normalitas yang sering digunakan pada R adalah metode Shapiro-Wilk. Metode ini merupakan metode uji yang memiliki power yang besar khusunya untuk ukuran sampel yang relatif kecil. Versi awal metode ini terbatas dengan jumlah sampel 3 sampai 50 sampel. Versi selanjutnya mengalami modifikasi sehingga dapat menangani sampel sampai dengan 5000 sampel bahkan lebih.
Untuk melakukan uji SHapiro-Wilk pada R, pembaca dapat menggunakan fungsi shapiro.test(). Format fungsi tersebut adalah sebagai berikut:
shapiro.test(x)
shapiro.test(airquality$Ozone)
##
## Shapiro-Wilk normality test
##
## data: airquality$Ozone
## W = 0.87867, p-value = 2.79e-08
Catatan:
- x : vektor numerik.
Berdasarkan hasil uji diperoleh nilai p-value < 0,05, sehingga H0 ditolak dan dapat disimpulkan bahwa distribusi konsentrasi ozon tidak mengikuti distribusi normal. Untuk lebih memahami prosedur pengujian normalitas distribusi suatu data pembaca dapat membaca lebih lanjut pada tautan Environmental Data Modelin.
Uji rata-rata satu sampel merupakan uji statistik untuk menguji apakah rata-rata suatu sampel berasal dari suatu populasi yang telah diketahui nilai rata-ratanya. Sedangkan uji rata-rata untuk dua populasi dilakukan untuk menguji apakah kedua selisis rata-rata populasi tersebut bernilai nol yang menujukkan bahwa kedua populasi tersebut memiliki nilai rata-rata yang sama. Uji rata-rata dua populasi dapat dilakukan untuk sampel independen (contoh: uji rata-rata performa dua buah IPAL) dan berpasangan (contoh: uji rata-rata input dan output IPAL).
Untuk melakukan uji rata-rata pada R dapat digunakan fungsi t.test() untuk uji parametrik dan wilcox.test() untuk melakukan uji non-parametrik sign rank test. Format fungsi-fungsi tersebut adalah sebagai berikut:
t.test(x, y = NULL, alternative = c(“two.sided”, “less”, “greater”), mu = 0, paired = FALSE, var.equal = FALSE, conf.level = 0.95, …)
wilcox.test(x, y = NULL, alternative = c(“two.sided”, “less”, “greater”), mu = 0, paired = FALSE, conf.level = 0.95, …)
Catatan:
- x,y : vektor numerik. Jika argumen x dan y diisikan maka uji hipotesis dilakukan untuk dua buah populasi.
- alternative: digunakan untuk menentukan jenis uji hipotesis apakah satu sisi(“less” dan “greater”), atau dua sisi (“two.sided”).
- mu : nilai rata-rata populasi atau nilai rata-rata selisih antar populasi jika dilakukan uji hipotesis terhadap dua populasi. Secara default nilainya 0.
- paired : nilai logikal yang menentukan apakah uji dua populasi digunakan untuk sampel berpasangan (TRUE) atau tidak (FALSE).
- var.equal : nilai logikal yang menunjukkan apakah varians kedua populasi diasumsikan sama atau berbeda.
- conf.level : tingkat kepercayaan. Secara default tingkat kepercayaan yang digunakan adalah 95%.
Berikut adalah contoh penerapan fungsi tersebut untuk uji hipotesis satu dan dua populasi:
# Uji hipotesis konsentrasi ozon = 40 ppm
# parametrik
t.test(x=airquality$Ozone, alternative = "two.sided",
mu = 40)
##
## One Sample t-test
##
## data: airquality$Ozone
## t = 0.69521, df = 115, p-value = 0.4883
## alternative hypothesis: true mean is not equal to 40
## 95 percent confidence interval:
## 36.06240 48.19622
## sample estimates:
## mean of x
## 42.12931
# nonparametrik
wilcox.test(x=airquality$Ozone, alternative = "two.sided",
mu = 40)
##
## Wilcoxon signed rank test with continuity correction
##
## data: airquality$Ozone
## V = 3188, p-value = 0.6826
## alternative hypothesis: true location is not equal to 40
# Uji hipotesis dua populasi
dni3 <- dimnames(iris3)
ii <- data.frame(matrix(aperm(iris3, c(1,3,2)), ncol = 4,
dimnames = list(NULL, sub(" L.",".Length",
sub(" W.",".Width", dni3[[2]])))),
Species = gl(3, 50, labels = sub("S", "s", sub("V", "v", dni3[[3]]))))
# parametrik
t.test(x=iris$Sepal.Length[iris$Species=="setosa"],
y=ii$Sepal.Length[iris$Species=="versicolor"])
##
## Welch Two Sample t-test
##
## data: iris$Sepal.Length[iris$Species == "setosa"] and ii$Sepal.Length[iris$Species == "versicolor"]
## t = -10.521, df = 86.538, p-value < 2.2e-16
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## -1.1057074 -0.7542926
## sample estimates:
## mean of x mean of y
## 5.006 5.936
# nonparametrik
wilcox.test(x=iris$Sepal.Length[iris$Species=="setosa"],
y=ii$Sepal.Length[iris$Species=="versicolor"])
##
## Wilcoxon rank sum test with continuity correction
##
## data: iris$Sepal.Length[iris$Species == "setosa"] and ii$Sepal.Length[iris$Species == "versicolor"]
## W = 168.5, p-value = 8.346e-14
## alternative hypothesis: true location shift is not equal to 0
Fungsi t.test() akan menghasilkan output berupa nilai t uji, derajat kebebasan (df), nilai p-value, rentang estimasi nilai rata-rata berdasarkan tingkat kepercayaan yang digunakan, serta estimasi nilai rata-rata sampel. Fungsi wilcox.test() akan menghasilkan dua buah output yaitu nilai W dan p-value berdasarkan nilai W yang dihasilkan.
Pengamatan adanya korelasi antar variabel dapat dilakukan melalui visualisasi menggunakan scatterplot dan perhitungan matematis menggunakan metode Pearson untuk metode parametrik dan metode rangking Spearman dan Kendall untuk metode non-parametrik. Pada Chapter ini kita akan berfokus untuk melakukan uji korelasi menggunakan R menggunakan metode matematis.
Pada R uji korelasi dapat dilakukan dengan menggunakan fungsi cor.test(). Format fungsi tersebut adalah sebagai berikut:
cor.test(x, y, alternative = c(“two.sided”, “less”, “greater”), method = c(“pearson”, “kendall”, “spearman”), conf.level = 0.95)
Catatan
- x,y : vektor numerik.
- alternative: digunakan untuk menentukan jenis uji hipotesis apakah satu sisi(“less” dan “greater”), atau dua sisi (“two.sided”).
- method : metode perhitungan korelasi yang digunakan.
- conf.level : tingkat kepercayaan. Secara default tingkat kepercayaan yang digunakan adalah 95%.
Berikut adalah penerapan fungsi cor.test() berdasarkan metode-metode yang telah disediakan pada fungsi tersebut:
# Pearson
cor.test(x = airquality$Ozone, y = airquality$Solar.R,
alternative = "two.sided",
method = "pearson")
##
## Pearson's product-moment correlation
##
## data: airquality$Ozone and airquality$Solar.R
## t = 3.8798, df = 109, p-value = 0.0001793
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.173194 0.502132
## sample estimates:
## cor
## 0.3483417
# Kendall
cor.test(x = airquality$Ozone, y = airquality$Solar.R,
alternative = "two.sided",
method = "kendall")
##
## Kendall's rank correlation tau
##
## data: airquality$Ozone and airquality$Solar.R
## z = 3.7096, p-value = 0.0002076
## alternative hypothesis: true tau is not equal to 0
## sample estimates:
## tau
## 0.2403194
# Spearman
cor.test(x = airquality$Ozone, y = airquality$Solar.R,
alternative = "two.sided",
method = "spearman")
## Warning in cor.test.default(x = airquality$Ozone, y = airquality$Solar.R, :
## Cannot compute exact p-value with ties
##
## Spearman's rank correlation rho
##
## data: airquality$Ozone and airquality$Solar.R
## S = 148561, p-value = 0.0001806
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
## rho
## 0.3481865
Berdasarkan output yang dihasilkan, metode Pearson menghasilkan output berupa nilai t uji, derajat kebebasan, nilai p-value, rentang estimasi nilai korelasi berdasarkan tingkat kepercayaan, dan estimasi nilai korelasi. Metode Kendall dan Spearman disisi lai menghasilkan output berupa nilai z uji dan S untuk masing-masing metode serta nilai p-value berdasarkan nilai statistika uji dan estimasi koefisien korelasi.
Untuk menganalisa apakah variasi perlakuan pada kelompok sampel akan memberikan hasil yang berbeda-beda pada rata-rata tiap grup atau tidak diperlukan analisis varians untuk menganilisa variasi perlakuan atau faktor pada masing-masing grup. Analisis varians dapat dilakukan baik untuk satu faktor maupun dua faktor atau lebih. Untuk melakukannya pada R, kita dapat menggunakan fungsi aov() untuk analisis varians dengan metode parametrik dan kruskal.test() untuk analisis varians dengan menggunakan metode nonparametrik. Berikut adalah format kedua fungsi tersebut:
aov(formula, data = NULL)
kruskal.test(formula, data)
Catatan:
- formula : formula model yang digunakan.
- data: dataset yang akan digunakan.
Berikut adalah contoh penerapan kedua fungsi tersebut untuk melihat apakah terdapat beda pada rata-rata konsentrasi bulanan ozon menggunakan dataset airquality:
summary(aov(Ozone~Month, airquality))
## Df Sum Sq Mean Sq F value Pr(>F)
## Month 1 3387 3387 3.171 0.0776 .
## Residuals 114 121756 1068
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 37 observations deleted due to missingness
kruskal.test(Ozone~Month, airquality)
##
## Kruskal-Wallis rank sum test
##
## data: Ozone by Month
## Kruskal-Wallis chi-squared = 29.267, df = 4, p-value = 6.901e-06
Berdasarkan hasil yang diperoleh diketahui bahwa rata-rata konsentrasi bulanan ozon tidak sama tiap bulannya atau minimal terdapat satu bulan dimana konsentrasi ozonnya berbeda secara signifikan dengan konsentrasi ozon pada bulan-bulan lainnya. Untuk lebih memahami terkait analisis varians pada R dan cara membaca output kedua fungsi tersebut, pembaca dapat membaca tulisan pada halaman situs sthda.
Analisis komponen utama menggunakan transformasi ortogonal (umumnya nilai singular atau dekomposisi nilai eigen) untuk mengubah seperangkat variabel pengamatan yang mungkin berkorelasi menjadi seperangkat variabel tidak berkorelasi (ortogonal) yang disebut komponen utama.Dalam R, analisis komponen utama umumnya dilakukan dengan fungsi prcomp (). Format fungsi tersebut adalah sebagai berikut:
prcomp(x, retx = TRUE, center = TRUE, scale. = FALSE, tol = NULL)
Catatan:
- x : data frame atau matriks kompleks numerik.
- retx : nilai logik yang mengindikasikan apakah variabel hasil rotasi perlu ditampilkan.
- center : nilai logik yang mengidikasikan apakah variabel perlu dilakukan pergeseran sehingga nilai rata-ratanya berpusat pada nilai nol. scale : nilai logik yang mengidikasikan apakah variabel perlu dilakukan penskalaan sebelum dilakukan analisis.
- tol : nilai toleransi yang menunjukkan batas nilai bagi komponen yang akan dipertahankan. Komponen yang dihilangkan jika simpangan bakunya kurang dari atau sama dengan tol x simpangan baku pc1
Untuk memahami penerapan fungsi tersebut, kita akan melakukan simulasi menggunakan dataset iris. Output yang dihasilkan di bawah ini menunjukkan bagaimana empat variabel numerik ditransformasikan menjadi empat komponen utama. Penskalaan data mungkin tidak diperlukan dalam kasus ini, karena keempat pengukuran memiliki unit yang sama dan besarnya sama. Namun, penskalaan umumnya merupakan praktik yang baik.
iris_use <- iris[,-5] # menghilangkan variabel non-numerik
iris_pca <- prcomp(iris_use, scale. = TRUE)
iris_pca
## Standard deviations (1, .., p=4):
## [1] 1.7083611 0.9560494 0.3830886 0.1439265
##
## Rotation (n x k) = (4 x 4):
## PC1 PC2 PC3 PC4
## Sepal.Length 0.5210659 -0.37741762 0.7195664 0.2612863
## Sepal.Width -0.2693474 -0.92329566 -0.2443818 -0.1235096
## Petal.Length 0.5804131 -0.02449161 -0.1421264 -0.8014492
## Petal.Width 0.5648565 -0.06694199 -0.6342727 0.5235971
Fungsi summary memberikan proporsi varians total yang dikaitkan dengan masing-masing komponen utama, dan proporsi kumulatif ketika masing-masing komponen ditambahkan. Kita melihat bahwa dua komponen pertama berperan lebih dari 95% dari total varians.
summary(iris_pca)
## Importance of components:
## PC1 PC2 PC3 PC4
## Standard deviation 1.7084 0.9560 0.38309 0.14393
## Proportion of Variance 0.7296 0.2285 0.03669 0.00518
## Cumulative Proportion 0.7296 0.9581 0.99482 1.00000
Histogram (hasil plot dalam analisis prcomp) secara grafis merekapitulasi proporsi varian yang disumbangkan oleh masing-masing komponen utama, sementara biplot menunjukkan bagaimana variabel awal diproyeksikan pada dua komponen utama pertama (Gambar 11.1). Ini juga menunjukkan koordinat dari masing-masing sampel dalam ruang (PC1, PC2). Satu spesies iris (yang berubahmenjadi setosa dari analisis kluster di bawah ini) secara jelas dipisahkan dari dua spesies lain dalam ruang koordinat ini.
This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see http://rmarkdown.rstudio.com.
When you click the Knit button a document will be generated that includes both content as well as the output of any embedded R code chunks within the document. You can embed an R code chunk like this:
summary(cars)
## speed dist
## Min. : 4.0 Min. : 2.00
## 1st Qu.:12.0 1st Qu.: 26.00
## Median :15.0 Median : 36.00
## Mean :15.4 Mean : 42.98
## 3rd Qu.:19.0 3rd Qu.: 56.00
## Max. :25.0 Max. :120.00
You can also embed plots, for example:
Note that the echo = FALSE
parameter was added to the code chunk to prevent printing of the R code that generated the plot.