##BAB 2 #2.1
x <- c(10.4, 5.6, 3.1, 6.4, 21.7)
assign("x", c(10.4, 5.6, 3.1, 6.4, 21.7))
c(10.4, 5.6, 3.1, 6.4, 21.7)
## [1] 10.4 5.6 3.1 6.4 21.7
1/x
## [1] 0.09615385 0.17857143 0.32258065 0.15625000 0.04608295
y <- c(x,0,x)
#2.2 Vectors and assignment
x <- c(1, 2, 3, 4)
y <- c(10, 20, 30, 40)
2*x + y + 1
## [1] 13 25 37 49
Chanpter 2; Simple manipulation; numbers and vectors
sum ((x-mean(x))^2)/(length(x)-1)
## [1] 1.666667
sqrt(-17)
## Warning in sqrt(-17): NaNs produced
## [1] NaN
sqrt(-17+0i)
## [1] 0+4.123106i
#2.3 Generating regular sequences
Opertor Titik dua
1:30
## [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
## [26] 26 27 28 29 30
30:1
## [1] 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6
## [26] 5 4 3 2 1
Fungsi seq()
seq(from = -5, to =5, by = 0.2)
## [1] -5.0 -4.8 -4.6 -4.4 -4.2 -4.0 -3.8 -3.6 -3.4 -3.2 -3.0 -2.8 -2.6 -2.4 -2.2
## [16] -2.0 -1.8 -1.6 -1.4 -1.2 -1.0 -0.8 -0.6 -0.4 -0.2 0.0 0.2 0.4 0.6 0.8
## [31] 1.0 1.2 1.4 1.6 1.8 2.0 2.2 2.4 2.6 2.8 3.0 3.2 3.4 3.6 3.8
## [46] 4.0 4.2 4.4 4.6 4.8 5.0
seq(from = 5, length = 51)
## [1] 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
## [26] 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
## [51] 55
Fungsi rep()
rep(x, times = 5)
## [1] 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4
rep(x, each = 5)
## [1] 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 4 4 4 4 4
#2.4 Logical vectors
x <- c(10, 15, 8, 20)
x >12
## [1] FALSE TRUE FALSE TRUE
z <- c(1, 2, NA, 4, 0/0)
is.na(z)
## [1] FALSE FALSE TRUE FALSE TRUE
is.nan(z)
## [1] FALSE FALSE FALSE FALSE TRUE
Sifat Dasar
x <- c(1, 2, NA, 4)
x + 5
## [1] 6 7 NA 9
cek nilai yang ilang
z <- c(1, 2, NA, 4)
is.na (z)
## [1] FALSE FALSE TRUE FALSE
Perbedaan NA vs NoN
y <- c(0/0, NA)
is.na(y)
## [1] TRUE TRUE
is.nan(y)
## [1] TRUE FALSE
#2.7 Index vectors; selecting and modifying subsets of a data set
(Logical vector)
y <- x[!is.na(x)]
z <- (x+1)[(!is.na(x)) & (x+1 > 0)]
Vector of positive integers
x[1:6]
## [1] 1 2 NA 4 NA NA
c("x", "y")[rep(c(1, 2), 10)]
## [1] "x" "y" "x" "y" "x" "y" "x" "y" "x" "y" "x" "y" "x" "y" "x" "y" "x" "y" "x"
## [20] "y"
Vector of negative integers
y <- x[-(1:5)]
Vector of character strings
fruit <- c(5, 10, 1, 20)
names(fruit) <- c("orange", "banana", "apple", "peach")
lunch <- fruit[c("apple", "orange")]
##BAB 3 #3.1 Intrinsic attributes: mode and length
# 1. Memeriksa Mode dan Length
x <- c(10.4, 5.6, 3.1, 6.4, 21.7)
mode(x)
## [1] "numeric"
length(x)
## [1] 5
# 2. Vektor Kosong (Panjang 0, tetapi tetap memiliki mode)
e <- numeric(0)
length(e)
## [1] 0
mode(e)
## [1] "numeric"
# 3. Konversi Otomatis (Implicit Coercion)
# Angka dan karakter digabung dalam satu vektor atomic:
campuran <- c(1, 2, "tiga", 4)
mode(campuran)
## [1] "character"
# 4. Konversi Manual (Explicit Coercion)
z <- 0:9 # Vektor integer dari 0 sampai 9
mode(z)
## [1] "numeric"
# Mengubah numeric menjadi character
digits <- as.character(z)
digits
## [1] "0" "1" "2" "3" "4" "5" "6" "7" "8" "9"
mode(digits)
## [1] "character"
# Mengubah angka menjadi logical (0 menjadi FALSE, selain 0 menjadi TRUE)
d <- as.logical(z)
d
## [1] FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
#3.2 Changing the length of an object Menambah Panjang Objek secara Otomatis
e <- numeric()
e[3] <- 17
e
## [1] NA NA 17
Memotong Ukuran Objek
alpha <- 1:10 # Vektor berisi 1 sampai 10 (panjang 10)
# Memotong dengan mengambil posisi genap saja (2, 4, 6, 8, 10)
alpha <- alpha[2 * 1:5]
alpha
## [1] 2 4 6 8 10
# Memotong secara langsung menggunakan fungsi length()
length(alpha) <- 3
alpha
## [1] 2 4 6
Perpanjangan Manual Menggunakan
# Memperbesar panjang vektor alpha dari 3 menjadi 6
length(alpha) <- 6
alpha
## [1] 2 4 6 NA NA NA
#3.3 Getting and setting attributes
# 1. Membuat vektor biasa
z <- 1:10
# Memeriksa seluruh atribut
attributes(z)
## NULL
# 2. Menambahkan atribut dimensi ("dim") menggunakan attr()
attr(z, "dim") <- c(2, 5)
# 3. Memeriksa kembali objek z dan atributnya
# Sekarang R memperlakukan z sebagai matriks 2 baris x 5 kolom
z
## [,1] [,2] [,3] [,4] [,5]
## [1,] 1 3 5 7 9
## [2,] 2 4 6 8 10
attributes(z)
## $dim
## [1] 2 5
# Hasil:
# $dim
# [1] 2 5
# 4. Mengambil atribut spesifik
attr(z, "dim")
## [1] 2 5
#3.4 The class of an object
# 1. Mengetahui kelas dari suatu objek
x <- c(10, 20, 30)
class(x)
## [1] "numeric"
# 2. Membuat Data Frame (Objek dengan class khusus "data.frame")
df <- data.frame(id = 1:2, nama = c("A", "B"))
class(df)
## [1] "data.frame"
# 3. Pengaruh Class pada Fungsi Generik seperti summary()
summary(df)
## id nama
## Min. :1.00 Length:2
## 1st Qu.:1.25 Class :character
## Median :1.50 Mode :character
## Mean :1.50
## 3rd Qu.:1.75
## Max. :2.00
# Menampilkan ringkasan berbentuk tabel statistik khusus data frame
# 4. Menggunakan unclass() untuk melihat struktur asli objek
# Mengubah data frame kembali menjadi list biasa
unclass(df)
## $id
## [1] 1 2
##
## $nama
## [1] "A" "B"
##
## attr(,"row.names")
## [1] 1 2
##BAB 4 #4.1 A specific example
# 1. Membuat vektor karakter berisi nama negara bagian/wilayah
state <- c("tas", "sa", "qld", "nsw", "nsw", "nt", "wa", "wa",
"qld", "vic", "nsw", "vic", "qld", "qld", "sa", "tas",
"sa", "nt", "wa", "vic", "qld", "nsw", "nsw", "wa",
"sa", "act", "nsw", "vic", "vic", "act")
# 2. Mengubah vektor karakter menjadi objek Factor
statef <- factor(state)
# 3. Menampilkan objek factor
statef
## [1] tas sa qld nsw nsw nt wa wa qld vic nsw vic qld qld sa tas sa nt wa
## [20] vic qld nsw nsw wa sa act nsw vic vic act
## Levels: act nsw nt qld sa tas vic wa
# 4. Memeriksa atribut levels secara spesifik
levels(statef)
## [1] "act" "nsw" "nt" "qld" "sa" "tas" "vic" "wa"
#4.2 The function tapply() and ragged arrays
# 1. Objek Factor kelompok wilayah (statef)
statef <- factor(c("tas", "sa", "qld", "nsw", "nsw", "nt", "wa", "wa",
"qld", "vic", "nsw", "vic", "qld", "qld", "sa", "tas",
"sa", "nt", "wa", "vic", "qld", "nsw", "nsw", "wa",
"sa", "act", "nsw", "vic", "vic", "act"))
# 2. Vektor data pendapatan individual (incomes)
incomes <- c(60, 49, 40, 61, 64, 60, 59, 54,
62, 69, 70, 42, 56, 61, 61, 61,
58, 51, 48, 65, 49, 49, 41, 48,
52, 46, 59, 46, 58, 43)
# 3. Menghitung rata-rata pendapatan untuk setiap wilayah menggunakan tapply()
incmeans <- tapply(incomes, statef, mean)
incmeans
## act nsw nt qld sa tas vic wa
## 44.50000 57.33333 55.50000 53.60000 55.00000 60.50000 56.00000 52.25000
# 4. Menghitung standar deviasi sampel tiap wilayah
incster <- tapply(incomes, statef, sd)
incster
## act nsw nt qld sa tas vic
## 2.1213203 10.5577775 6.3639610 9.1815031 5.4772256 0.7071068 11.7260394
## wa
## 5.3150729
#4.3 Ordered factors
# 1. Membuat vektor karakter dengan nilai ordinal
status_pendidikan <- c("SMA", "S1", "SMP", "S2", "SMA", "S1", "SMP")
# 2. Mengubah menjadi Ordered Factor menggunakan fungsi ordered()
# Menentukan urutan hirarki dari yang terendah ke tertinggi via parameter levels
edu_ordered <- ordered(status_pendidikan, levels = c("SMP", "SMA", "S1", "S2"))
# Menampilkan objek ordered factor
edu_ordered
## [1] SMA S1 SMP S2 SMA S1 SMP
## Levels: SMP < SMA < S1 < S2
# 3. Melakukan Perbandingan Antar Elemen
# Memeriksa apakah elemen pertama (SMA) lebih rendah tingkatannya dari elemen kedua (S1)
edu_ordered[1] < edu_ordered[2]
## [1] TRUE
# 4. Cara Alternatif Menggunakan fungsi factor()
edu_ordered2 <- factor(status_pendidikan,
levels = c("SMP", "SMA", "S1", "S2"),
ordered = TRUE)
class(edu_ordered2)
## [1] "ordered" "factor"
##BAB 5 #5.1 Arrays
# 1. Membuat vektor data bernilai 1 sampai 24 (24 elemen)
z <- 1:24
# 2. Mengubah vektor menjadi Array 3-Dimensi (ukuran: 3 baris x 4 kolom x 2 matriks)
dim(z) <- c(3, 4, 2)
# 3. Menampilkan objek array
z
## , , 1
##
## [,1] [,2] [,3] [,4]
## [1,] 1 4 7 10
## [2,] 2 5 8 11
## [3,] 3 6 9 12
##
## , , 2
##
## [,1] [,2] [,3] [,4]
## [1,] 13 16 19 22
## [2,] 14 17 20 23
## [3,] 15 18 21 24
# 4. Memeriksa atribut dimensi secara eksplisit
dim(z)
## [1] 3 4 2
#5.2 Array indexing. Subsections of an array
# 1. Membuat array 3D berukuran (3 baris x 4 kolom x 2 matriks)
a <- array(1:24, dim = c(3, 4, 2))
# 2. Mengakses elemen tunggal pada baris ke-2, kolom ke-4, matriks ke-2
a[2, 4, 2]
## [1] 23
# 3. Mengambil subseksi: Baris ke-2 dari seluruh kolom dan matriks
sub_a <- a[2, , ]
sub_a
## [,1] [,2]
## [1,] 2 14
## [2,] 5 17
## [3,] 8 20
## [4,] 11 23
# 4. Mengakses menggunakan satu indeks tunggal (Vector-style Indexing)
a[5]
## [1] 5
#5.3 Index matrices
contoh misal ada matriks X berukuran 4 X 5, dan ingin di ekstrak dan diubah nilai pada posisi (1,3), (2,2), dan (3,1):
# 1. Membuat matriks x berukuran 4 baris x 5 kolom
x <- array(1:20, dim = c(4, 5))
x
## [,1] [,2] [,3] [,4] [,5]
## [1,] 1 5 9 13 17
## [2,] 2 6 10 14 18
## [3,] 3 7 11 15 19
## [4,] 4 8 12 16 20
# 2. Membuat matriks indeks i (3 baris x 2 kolom)
# Mengacu pada pasangan posisi: (1,3), (2,2), dan (3,1)
i <- array(c(1, 3, 2, 2, 3, 1), dim = c(3, 2))
i
## [,1] [,2]
## [1,] 1 2
## [2,] 3 3
## [3,] 2 1
# 3. Mengekstrak elemen-elemen spesifik berdasarkan matriks indeks
x[i]
## [1] 5 11 2
# 4. Mengubah nilai pada posisi-posisi spesifik tersebut menjadi 0
x[i] <- 0
x
## [,1] [,2] [,3] [,4] [,5]
## [1,] 1 0 9 13 17
## [2,] 0 6 10 14 18
## [3,] 3 7 0 15 19
## [4,] 4 8 12 16 20
#5.4 The array() function
# 1. Membuat matriks x berukuran 4 baris x 5 kolom
x <- array(1:20, dim = c(4, 5))
x
## [,1] [,2] [,3] [,4] [,5]
## [1,] 1 5 9 13 17
## [2,] 2 6 10 14 18
## [3,] 3 7 11 15 19
## [4,] 4 8 12 16 20
# 2. Membuat matriks indeks i (3 baris x 2 kolom)
# Mengacu pada pasangan posisi: (1,3), (2,2), dan (3,1)
i <- array(c(1, 3, 2, 2, 3, 1), dim = c(3, 2))
i
## [,1] [,2]
## [1,] 1 2
## [2,] 3 3
## [3,] 2 1
# 3. Mengekstrak elemen-elemen spesifik berdasarkan matriks indeks
x[i]
## [1] 5 11 2
# Hasil: 9 6 3
# 4. Mengubah nilai pada posisi-posisi spesifik tersebut menjadi 0
x[i] <- 0
x
## [,1] [,2] [,3] [,4] [,5]
## [1,] 1 0 9 13 17
## [2,] 0 6 10 14 18
## [3,] 3 7 0 15 19
## [4,] 4 8 12 16 20
#5.4.1 Mixed vector and array arithmetic.
# 1. Membuat Matriks A berukuran 3 baris x 4 kolom (total 12 elemen)
A <- array(1:12, dim = c(3, 4))
# 2. Operasi Campuran: Array + Vektor Skalar (Panjang 1)
# Skalar 5 didaur ulang sebanyak 12 kali
A + 5
## [,1] [,2] [,3] [,4]
## [1,] 6 9 12 15
## [2,] 7 10 13 16
## [3,] 8 11 14 17
# 3. Operasi Campuran: Array + Vektor Pendek (Panjang 3)
# Vektor v (panjang 3) didaur ulang 4 kali untuk mencukupi 12 elemen matriks A
v <- c(10, 20, 30)
hasil <- A + v
hasil
## [,1] [,2] [,3] [,4]
## [1,] 11 14 17 20
## [2,] 22 25 28 31
## [3,] 33 36 39 42
# 4. Contoh Kasus Error: Vektor Lebih Panjang dari Array
v_panjang <- 1:15
# A + v_panjang
# Error: Vektor operand lebih panjang dari array
#5.5 The outer product of two arrays
# 1. Perkalian Luar Dua Vektor Menggunakan Operator %o%
x <- 1:3
y <- 1:4
# Menghasilkan matriks berukuran 3 x 4 (tabel perkalian)
p_luar <- x %o% y
p_luar
## [,1] [,2] [,3] [,4]
## [1,] 1 2 3 4
## [2,] 2 4 6 8
## [3,] 3 6 9 12
# 2. Perkalian Luar Menggunakan Fungsi outer() dengan Operasi Penjumlahan
p_tambah <- outer(x, y, FUN = "+")
p_tambah
## [,1] [,2] [,3] [,4]
## [1,] 2 3 4 5
## [2,] 3 4 5 6
## [3,] 4 5 6 7
# 3. Menggunakan Fungsi Kustom pada outer()
f <- function(x, y) cos(y) / (1 + x^2)
z <- outer(x, y, f)
z
## [,1] [,2] [,3] [,4]
## [1,] 0.27015115 -0.20807342 -0.49499625 -0.32682181
## [2,] 0.10806046 -0.08322937 -0.19799850 -0.13072872
## [3,] 0.05403023 -0.04161468 -0.09899925 -0.06536436
#5.6 Generalized transpose of an array
# 1. Kasus Matriks 2D (Sama dengan transpos biasa)
A <- array(1:6, dim = c(2, 3)) # Matriks 2 baris x 3 kolom
# Transpos matriks menggunakan aperm() menukar dimensi 1 dan 2
A_transpos <- aperm(A, c(2, 1))
A_transpos
## [,1] [,2]
## [1,] 1 2
## [2,] 3 4
## [3,] 5 6
# Membuktikan kesamaan dengan fungsi t()
identical(A_transpos, t(A))
## [1] TRUE
# 2. Kasus Array 3D Multidimensi
# Membuat array 3D berukuran 2 x 3 x 4 (2 baris, 3 kolom, 4 lapisan)
arr <- array(1:24, dim = c(2, 3, 4))
# Menukar posisi dimensi: Dimensi ke-3 jadi ke-1, dimensi ke-1 jadi ke-2, dimensi ke-2 jadi ke-3
arr_perm <- aperm(arr, c(3, 1, 2))
# Memeriksa dimensi baru
dim(arr_perm)
## [1] 4 2 3
#5.7 Matrix facilities
# 1. Membuat Matriks Bujursangkar 2x2
A <- matrix(c(2, 3, 1, 4), nrow = 2, ncol = 2)
A
## [,1] [,2]
## [1,] 2 1
## [2,] 3 4
# 2. Transpos, Jumlah Baris, dan Jumlah Kolom
t(A)
## [,1] [,2]
## [1,] 2 3
## [2,] 1 4
nrow(A)
## [1] 2
ncol(A)
## [1] 2
# 3. Perkalian Matriks ( Matrix Multiplication %*% )
B <- matrix(c(1, 0, 2, 1), nrow = 2, ncol = 2)
C <- A %*% B
C
## [,1] [,2]
## [1,] 2 5
## [2,] 3 10
# 4. Invers Matriks dan Determinan
inv_A <- solve(A) # Invers matriks A
inv_A
## [,1] [,2]
## [1,] 0.8 -0.2
## [2,] -0.6 0.4
det_A <- det(A) # Determinan matriks A (2*4 - 1*3 = 5)
det_A
## [1] 5
# 5. Menyelesaikan Sistem Persamaan Linier Ax = b
b <- c(5, 10)
x <- solve(A, b) # Mencari nilai vektor x
x
## [1] 2 1
# 6. Nilai Eigen dan Vektor Eigen
e <- eigen(A)
e$values # Nilai Eigen
## [1] 5 1
e$vectors # Vektor Eigen
## [,1] [,2]
## [1,] -0.3162278 -0.7071068
## [2,] -0.9486833 0.7071068
#5.7.1 Matrix multiplication
# 1. Perkalian Elemen-demi-Elemen (*) vs Perkalian Matriks (%*%)
A <- matrix(c(1, 2, 3, 4), nrow = 2)
B <- matrix(c(2, 0, 1, 3), nrow = 2)
# Perkalian elemen-demi-elemen
A * B
## [,1] [,2]
## [1,] 2 3
## [2,] 0 12
# Perkalian aljabar linier matriks
A %*% B
## [,1] [,2]
## [1,] 2 10
## [2,] 4 14
# 2. Perkalian Bentuk Kuadratik dengan Vektor (x %*% A %*% x)
x <- c(1, 2)
x %*% A %*% x
## [,1]
## [1,] 27
# 3. Menggunakan Fungsi crossprod() untuk Efisiensi
crossprod(A, B) # Ekuivalen dengan t(A) %*% B
## [,1] [,2]
## [1,] 2 7
## [2,] 6 15
# 4. Penggunaan Fungsi diag()
# a. Ekstrak diagonal utama dari matriks A
diag(A)
## [1] 1 4
# b. Buat matriks diagonal dari vektor
diag(c(5, 10, 15))
## [,1] [,2] [,3]
## [1,] 5 0 0
## [2,] 0 10 0
## [3,] 0 0 15
# c. Buat matriks identitas berukuran 3x3
diag(3)
## [,1] [,2] [,3]
## [1,] 1 0 0
## [2,] 0 1 0
## [3,] 0 0 1
#5.7.2 Linear equations and inversion
# 1. Membuat Matriks Koefisien A (2x2) dan Vektor Hasil b
A <- matrix(c(2, 1, 1, 3), nrow = 2, ncol = 2)
b <- c(8, 9)
# Matriks A mewakili sistem persamaan:
# 2x1 + 1x2 = 8
# 1x1 + 3x2 = 9
# 2. Menyelesaikan Sistem Persamaan Linier Ax = b
x <- solve(A, b)
x
## [1] 3 2
# Membuktikan kebenaran solusi: A %*% x harus sama dengan b
A %*% x
## [,1]
## [1,] 8
## [2,] 9
# 3. Mencari Invers Matriks A
A_inv <- solve(A)
A_inv
## [,1] [,2]
## [1,] 0.6 -0.2
## [2,] -0.2 0.4
# Membuktikan bahwa A %*% A_inv menghasilkan Matriks Identitas
A %*% A_inv
## [,1] [,2]
## [1,] 1.000000e+00 0
## [2,] -1.110223e-16 1
#5.7.3 Eigenvalues and eigenvectors
# 1. Membuat Matriks Simetris A (2x2)
A <- matrix(c(4, 2, 2, 3), nrow = 2, ncol = 2)
A
## [,1] [,2]
## [1,] 4 2
## [2,] 2 3
# 2. Menghitung Nilai Eigen dan Vektor Eigen
hasil_eigen <- eigen(A)
hasil_eigen
## eigen() decomposition
## $values
## [1] 5.561553 1.438447
##
## $vectors
## [,1] [,2]
## [1,] -0.7882054 0.6154122
## [2,] -0.6154122 -0.7882054
# 3. Mengakses Nilai Eigen dan Vektor Eigen secara Terpisah
val <- hasil_eigen$values # Mengambil nilai eigen saja
vec <- hasil_eigen$vectors # Mengambil matriks vektor eigen
# 4. Menghitung Nilai Eigen Saja (Lebih Cepat)
eigen(A, only.values = TRUE)$values
## [1] 5.561553 1.438447
#5.7.4 Singular value decomposition and determinants
# 1. Membuat Matriks M (2x2)
M <- matrix(c(3, 1, 2, 4), nrow = 2, ncol = 2)
M
## [,1] [,2]
## [1,] 3 2
## [2,] 1 4
# 2. Melakukan Singular Value Decomposition (SVD)
hasil_svd <- svd(M)
hasil_svd
## $d
## [1] 5.116673 1.954395
##
## $u
## [,1] [,2]
## [1,] -0.6407474 -0.7677517
## [2,] -0.7677517 0.6407474
##
## $v
## [,1] [,2]
## [1,] -0.5257311 -0.8506508
## [2,] -0.8506508 0.5257311
# 3. Rekonstruksi Matriks Asli M = U %*% diag(d) %*% t(V)
U <- hasil_svd$u
D <- diag(hasil_svd$d)
V <- hasil_svd$v
U %*% D %*% t(V)
## [,1] [,2]
## [1,] 3 2
## [2,] 1 4
# Hasil Output: Persis kembali ke matriks M semula
# 4. Menghitung Nilai Mutlak Determinan
# Menggunakan perkalian nilai singular (prod(svd(M)$d))
prod(hasil_svd$d)
## [1] 10
# Hasil: 10
# Bandingkan dengan nilai mutlak dari fungsi det()
abs(det(M))
## [1] 10
# Hasil: 10
#5.7.5 Least squares fitting and the QR decomposition
# 1. Menyiapkan Data Matriks Prediktor (X) dan Vektor Respon (y)
X <- matrix(c(1, 2, 3, 4, 5, 2, 1, 4, 3, 6), ncol = 2) # Matriks 5x2
y <- c(5, 7, 11, 13, 17) # Vektor respon (5 elemen)
# 2. Menggunakan fungsi lsfit() untuk Analisis Regresi
fit <- lsfit(X, y)
# Menampilkan estimasi koefisien (Intercept dan Slope tiap variabel X)
fit$coefficients
## Intercept X1 X2
## 1.5 2.5 0.5
# Menampilkan nilai residual
fit$residuals
## [1] 1.271706e-15 -8.988815e-16 -1.644531e-15 8.988815e-16 3.728249e-16
# 3. Menggunakan Dekomposisi QR dengan qr()
qr_X <- qr(X)
# Mengekstrak koefisien regresi secara langsung dari hasil QR
qr.coef(qr_X, y)
## [1] 2.849624 0.556391
# Mengekstrak nilai prediksi (fitted values) dan residual menggunakan fungsi QR
y_hat <- qr.fitted(qr_X, y)
res <- qr.resid(qr_X, y)
#5.8 Forming partitioned matrices
# 1. Menyiapkan Dua Vektor
x <- c(1, 2, 3)
y <- c(10, 20, 30)
# 2. Menggabungkan Secara Horizontal dengan cbind() (Menjadi Kolom)
m_col <- cbind(x, y)
m_col
## x y
## [1,] 1 10
## [2,] 2 20
## [3,] 3 30
# 3. Menggabungkan Secara Vertikal dengan rbind() (Menjadi Baris)
m_row <- rbind(x, y)
m_row
## [,1] [,2] [,3]
## x 1 2 3
## y 10 20 30
# 4. Menggabungkan Matriks dengan Vektor Tambahan
A <- matrix(1:4, nrow = 2) # Matriks 2x2
v <- c(99, 100)
# Menambahkan vektor v sebagai kolom baru di kanan matriks A
cbind(A, v)
## v
## [1,] 1 3 99
## [2,] 2 4 100
#5.9 The concatenation function
# 1. Membuat Matriks 2x2
A <- matrix(1:4, nrow = 2, ncol = 2)
A
## [,1] [,2]
## [1,] 1 3
## [2,] 2 4
# 2. Menggabungkan Matriks dengan c() (Menjadi Vektor Tunggal)
v_c <- c(A)
v_c
## [1] 1 2 3 4
# 3. Menggabungkan Dua Matriks Menggunakan c()
B <- matrix(5:8, nrow = 2)
gabungan <- c(A, B)
gabungan
## [1] 1 2 3 4 5 6 7 8
# 4. Cara Resmi Mengubah Matriks Kembali Menjadi Vektor (as.vector)
vec_A <- as.vector(A)
is.matrix(vec_A)
## [1] FALSE
#5.10 Frequency tables from factors
# 1. Menyiapkan Dua Faktor
# Faktor 1: Wilayah
wilayah <- factor(c("Jawa", "Sumatra", "Jawa", "Bali", "Jawa", "Sumatra"))
# Faktor 2: Kategori Pendapatan
pendapatan <- factor(c("Tinggi", "Sedang", "Tinggi", "Rendah", "Sedang", "Rendah"))
# 2. Tabel Frekuensi Satu Arah (One-Way)
table(wilayah)
## wilayah
## Bali Jawa Sumatra
## 1 3 2
# 3. Tabel Frekuensi Dua Arah / Tabel Kontingensi (Two-Way)
tab_2arah <- table(pendapatan, wilayah)
tab_2arah
## wilayah
## pendapatan Bali Jawa Sumatra
## Rendah 1 0 1
## Sedang 0 1 1
## Tinggi 0 2 0
# Tinggi 0 2 0