Pengenalan R

  • R merupakan serangkaian fasilitas software yang terintegrasi untuk memanipulasi data, perhitungan, dan tampilan grafik.

  • Open Source

  • Analisis statistika di R berupa serangkaian steps dengan hasil yang disimpan dalam suatu objek.

Objek Data dalam R

  • Vektor

  • Matriks

  • Array

  • Factor

  • List

  • Data Frame

Vektor

Vektor merupakan tipe sederhana dari objek dan setiap elemen memiliki mode yang sama.

Contoh:

a <- c(2, 4)
b <- c("laki-laki", "perempuan")

Perintah dalam vektor:

#rep (pengulangan)
rep(a, 2)
## [1] 2 4 2 4
rep(a, each = 2)
## [1] 2 2 4 4
#seq (membuat suatu urutan)
seq(from = 3, to = 1)
## [1] 3 2 1
seq(from = 1, to = 2, by = 0.5)
## [1] 1.0 1.5 2.0
#is.vector (memeriksa suatu objek termasuk dalam vektor)
#as.vector (mengubah objek menjadi vektor)
#operator (+, -, /, ^, %, dll)

Akses elemen ke-i dalam suatu vektor

Contoh:

angka <- c(2, 3, 4, 1)
angka
## [1] 2 3 4 1
names(angka) <- c("a", "b", "c", "d")

Untuk mengakses 2 dapat menggunakan syntax angka[“a] atau angka[1]

angka[2:3]
## b c 
## 3 4
angka[c(1, 4)]
## a d 
## 2 1
angka[angka < 2]
## d 
## 1
angka[-2]
## a c d 
## 2 4 1

Matriks

Matriks umumnya dibuat melalui vektor

Contoh:

Data <- matrix(c(1, 2, 1, 100, 102, 103), nrow = 2,
               ncol = 3, byrow = TRUE,
               dimnames = list(c("row1", "row2"), c("C.1", "C.2", "C.3")))
Data
##      C.1 C.2 C.3
## row1   1   2   1
## row2 100 102 103

Perintah dalam vektor:

#dim (mengetahui ukuran matriks)
#rbind (menggabungkan terhadap baris)
a <- c(2, 3, 4)
b <- c(1, 0, 1)
rbind(a, b)
##   [,1] [,2] [,3]
## a    2    3    4
## b    1    0    1
#cbind (menggabungkan terhadap kolom)
a <- c(2, 3, 4)
b <- c(1, 0, 1)
cbind(a, b)
##      a b
## [1,] 2 1
## [2,] 3 0
## [3,] 4 1

Akses elemen dalam suatu matriks

Contoh:

Data[1, 3]
## [1] 1
Data[, 1]
## row1 row2 
##    1  100
Data[-1, -2]
## C.1 C.3 
## 100 103

Faktor

Faktor merupakan bentuk khusus dari vektor dengan elemen kategorik dan memiliki level.

Perintah dalam vektor:

#factor (Konversi & mengatur level serta label)
x <- c("apple", "banana", "apple", "orange")
factor_x <- factor(x, levels = c("apple", "banana", "orange"), labels = c("A", "B", "C"))
print(factor_x)
## [1] A B A C
## Levels: A B C
#as.factor (Konversi vektor menjadi faktor)
x <- c("apple", "banana", "apple", "orange")
factor_x <- as.factor(x)
print(factor_x)
## [1] apple  banana apple  orange
## Levels: apple banana orange
#is.factor (Memeriksa data apakah faktor)
#Membuat vektor karakter
colors <- c("red", "green", "blue")

#Memeriksa apakah objek adalah faktor
is_colors_factor <- is.factor(colors)
print(is_colors_factor)
## [1] FALSE

List

List merupakan struktur data yang dapat menyimpan berbagai jenis data dalam satu wadah.

a <- c(2, 3, 4)
dt <- c("b", "a", "a")
Data <- matrix(c(1, 2, 1, 100, 102, 103), nrow = 2,
               ncol = 3, byrow = FALSE,
               dimnames = list(c("row1", "row2"), c("C.1", "C.2", "C.3")))
list(a, dt, Data)
## [[1]]
## [1] 2 3 4
## 
## [[2]]
## [1] "b" "a" "a"
## 
## [[3]]
##      C.1 C.2 C.3
## row1   1   1 102
## row2   2 100 103

Data Frame

Merupakan bentuk khusus dari list untuk menyimpan data dari berbagai tipe dalam bentuk matriks.

Perintah yang umum digunakan dalam data frame:

data.frame() -> Membuat data frame baru dari vektor atau list

as.data.frame() -> Mengkonversi objek menjadi data frame

read.table() -> Membaca data dari file teks

Contoh:

dtf <- data.frame(Mahasiswa = c("Amir", "Budi", "Citra"), JK = c("L", "L", "P"))
dtf
##   Mahasiswa JK
## 1      Amir  L
## 2      Budi  L
## 3     Citra  P
dtf <- rbind(dtf, data.frame(Mahasiswa = "Intan", JK = "P"))
dtf
##   Mahasiswa JK
## 1      Amir  L
## 2      Budi  L
## 3     Citra  P
## 4     Intan  P
colnames(dtf) #untuk mengetahui nama-nama kolom
## [1] "Mahasiswa" "JK"
length(dtf) #untuk mengetahui jumlah kolom
## [1] 2
dim(dtf) #untuk mengetahui jumlah dimensi
## [1] 4 2
dtf[2] #atau dtf["JK] atau dtf$JK -> untuk mengakses semua elemen JK
##   JK
## 1  L
## 2  L
## 3  P
## 4  P
dtf[1, ] #untuk mengakses baris ke-1 semua kolom
##   Mahasiswa JK
## 1      Amir  L
dtf[2, 1] <- "Bambang"
dtf
##   Mahasiswa JK
## 1      Amir  L
## 2   Bambang  L
## 3     Citra  P
## 4     Intan  P
names(dtf)[1] <- "Nama" #mengganti nama kolom ke-1

Input Data Dalam R

  • File .txt

data <- read.table(“C:/…./namadata.txt”, header = TRUE)

Jika pemisah antar kolom (delimiter) bukan spasi maka dapat menggunakan syntax berikut

data <- read.delim(“C:/…./namadata.txt”, header = TRUE, sep = “;)

  • File .csv

data <- read.csv(“C:/…./namadata.csv”, header = TRUE)

Jika menggunakan delimiter “;” maka menggunakan read.csv2

  • File .xlsx

library(readxl)

data <- read_excel(path = “data/namadata.xlsx”, col_names = TRUE)


Korelasi dan Regresi

KORELASI REGRESI
Mengukur kekuatan atau derajat hubungan antara dua peubah Menduga rata-rata satu peubah atas dasar nilai yang tetap dari peubah-peubah lain
Dua peubah ini diperlakukan secara simetri Ada asimetri bagaimana peubah tak bebas dan peubah bebas diperlakukan
Koefisien Korelasi Populasi Koefisien Korelasi Sampel
\[ \rho = \frac{\operatorname{cov}(X, Y)}{\sqrt{[\operatorname{var}(X)\operatorname{var}(Y)]}} = \frac{\operatorname{cov}(X, Y)}{\sigma_x\sigma_y} \] \[ r = \frac{\sum x_i y_i}{\sqrt{(\sum x_i^2)(\sum y_i^2)}} \]
\[ r = \frac{n\sum X_i Y_i - (\sum X_i)(\sum Y_i)}{\sqrt{[n\sum X_i^2 - (\sum X_i)^2][n\sum Y_i^2 - (\sum Y_i)^2]}} \]

Korelasi

  • Mengukur keeratan hubungan linear antara dua peubah metrik.

  • Tidak harus menggambarkan hubungan sebab-akibat.

  • -1 ≤ r ≤ 1.

  • r mendekati 1 atau -1, semakin erat hubungan linearnya.

Kelemahan Koefisien Korelasi:

  • Sangat peka terhadap pencilan (outlier).

  • Tidak dapat mendeteksi hubungan non linear.

#Input data
harga <- c(245, 312, 279, 308, 199, 219, 405, 324, 319, 255)
luas <- c(1400, 1600, 1700, 1875, 1100, 1550, 2350, 2450, 1425, 1700)

#Membuat Scatterplot
plot(x = luas, y = harga,
     main = "Scatterplot Harga vs Luas Lantai", xlab = "Luas Lantai (m^2)",
     ylab = "Harga Rumah (RpJuta)")

#Koefisien Korelasi
cor(luas, harga, method = "pearson")
## [1] 0.7621137
#Matriks Korelasi
df <- data.frame(luas, harga)
korelasi <- cor(df)
korelasi
##            luas     harga
## luas  1.0000000 0.7621137
## harga 0.7621137 1.0000000
#install.packages("corrplot")
library(corrplot)
## corrplot 0.95 loaded
corrplot(corr = korelasi, method = "number", type = "upper")

#Uji Signifikansi Koefisien Korelasi
#Hipotesis H0: rho = 0 vs H1: rho ≠ 0
cor.test(x = luas, y = harga, alternative = "two.sided", method = "pearson", exact = NULL, conf.level = 0.95)
## 
##  Pearson's product-moment correlation
## 
## data:  luas and harga
## t = 3.3294, df = 8, p-value = 0.01039
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  0.2547085 0.9404622
## sample estimates:
##       cor 
## 0.7621137

Nilai p (p-value = 0.01039): Karena nilai p < 0.05, kita menolak hipotesis nol dan menyimpulkan bahwa ada korelasi yang signifikan antara Luas Lantai dan Harga Rumah

Analisis Regresi

Model Deterministik vs Stokhastik

Misalkan diketahui:

  • \(X = 1\), \(Y = 3\)

  • \(X = 4\), \(Y = 9\)

Diberikan fungsi deterministik:

\[ f(X) = 1 + 2X \]

Pertanyaan:

  • Berapa \(Y\) jika \(X = 2\)? → Pasti \(Y = 5\)

  • Berapa \(Y\) jika \(X = 3\)? → Pasti \(Y = 7\)

100% kita percaya bahwa nilai \(Y = 5\) dan \(Y = 7\) adalah satu-satunya nilai untuk \(X = 2\) dan \(X = 3\).

  • \(Y\) nilainya pasti, bebas dari error
  • \(Y\) bukan peubah acak

Untuk setiap dosis pupuk yang dicobakan, banyaknya padi yang dihasilkan diamati sebanyak 3 kali. Hasilnya pada tabel di samping.

X Y
1 3.0
1 3.4
1 2.8
2 5.0
2 5.4
2 4.7
3 7.0
3 7.3
3 6.6
4 9.0
4 9.3
4 8.5

Ternyata hasilnya (Y) tidak pasti.

→ mengandung error

→ Y Peubah Acak.

MODEL STOKHASTIK

\[ Y = 1 + 2x + \varepsilon, \, \varepsilon = \text{error} \]

\[ y_i = 1 + 2x_i + \varepsilon_i, \, \varepsilon_i = \text{error ke-} i \]

data <- data.frame(
  X = c(1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4),
  Y = c(3, 3.4, 2.8, 5, 5.4, 4.7, 7, 7.3, 6.6, 9, 9.3, 8.5)
)

# Scatterplot
ggplot(data, aes(x = X, y = Y)) +
  geom_point() +
  geom_smooth(method = "lm", se = FALSE, color = "red") +
  labs(
    x = "X",
    y = "Y",
    title = "Scatterplot of Y vs X"
  ) +
  theme_minimal()
## `geom_smooth()` using formula = 'y ~ x'

Latihan Soal

Diduga ada hubungan antara jumlah halaman buku yang digunakan dengan harga jual bukunya. Untuk menjawab dugaan tersebut dipilih sampel dari delapan buku yang dijual di toko tersebut.


Pertanyaan:

  1. Buatlah scatterplot dan hitung koefisien korelasinya!

  2. Apakah korelasi tersebut signifikan? Jelaskan!


Data:

Book Page Price ($)
Intro to History 500 84
Basic Algebra 700 75
Intro to Psyc 800 99
Intro to Sociology 600 72
Bus. Mngt 400 69
Intro to Biology 500 81
Fund. of Jazz 600 63
Princ. of Nursing 800 93
#Data
buku <- data.frame(
  Book = c("Intro to History", "Basic Algebra", "Intro to Psyc", 
           "Intro to Sociology", "Bus. Mngt", "Intro to Biology",
           "Fund. of Jazz", "Princ. of Nursing"),
  Page = c(500, 700, 800, 600, 400, 500, 600, 800),
  Price = c(84, 75, 99, 72, 69, 81, 63, 93)
)
buku
##                 Book Page Price
## 1   Intro to History  500    84
## 2      Basic Algebra  700    75
## 3      Intro to Psyc  800    99
## 4 Intro to Sociology  600    72
## 5          Bus. Mngt  400    69
## 6   Intro to Biology  500    81
## 7      Fund. of Jazz  600    63
## 8  Princ. of Nursing  800    93
#Scatterplot
ggplot(buku, aes(x = Page, y = Price)) +
  geom_point(color = "blue", size = 3) +
  geom_smooth(method = "lm", se = FALSE, color = "red") +
  labs(title = "Hubungan Jumlah Halaman dan Harga Buku",
       x = "Jumlah Halaman",
       y = "Harga ($)") +
  theme_minimal()
## `geom_smooth()` using formula = 'y ~ x'

#Koefisien Korelasi
cor_coef <- cor(buku$Page, buku$Price, method = "pearson")
cat("Koefisien Korelasi Pearson =", round(cor_coef, 3))
## Koefisien Korelasi Pearson = 0.614

Hasil:

Koefisien korelasi Pearson sebesar r round(cor_coef, 3) menunjukkan hubungan positif antara jumlah halaman dan harga buku.

#Uji Signifikansi Koefisien Korelasi
cor_test <- cor.test(buku$Page, buku$Price)
cat("Hasil Uji Korelasi:\n")
## Hasil Uji Korelasi:
cat("t-value =", round(cor_test$statistic, 3), "\n")
## t-value = 1.905
cat("p-value =", format.pval(cor_test$p.value, eps = 0.001), "\n")
## p-value = 0.10546
cat("Derajat Kebebasan (df) =", cor_test$parameter)
## Derajat Kebebasan (df) = 6

Interpretasi:

Dengan p-value r format.pval(cor_test$p.value, digits = 3) (> 0.05), kita gagal menolak hipotesis nol. Artinya, korelasi antara jumlah halaman dan harga buku tidak signifikan secara statistik pada tingkat kepercayaan 95%.