# Data awal
mahasiswa <- data.frame(
Nama = c("Ani", "Budi", "Carli", "Elon", "Fajar", "Gani", "Haidar"),
Asal = c("Sukabumi", "Jogja", "Depok", "Jakarta", "Surabaya", "Purwokerto", "Jombang")
)
# Tampilkan data
print(mahasiswa)
## Nama Asal
## 1 Ani Sukabumi
## 2 Budi Jogja
## 3 Carli Depok
## 4 Elon Jakarta
## 5 Fajar Surabaya
## 6 Gani Purwokerto
## 7 Haidar Jombang
Bagian ini membuat sebuah data frame berisi 7 mahasiswa, masing-masing dengan nama dan asal daerahnya.
# Menyisipkan Duta dari Purworejo ke baris ke-4
mahasiswa <- rbind(
mahasiswa[1:3, ],
data.frame(Nama = "Duta", Asal = "Purworejo"),
mahasiswa[4:nrow(mahasiswa), ]
)
# Tampilkan data
print(mahasiswa)
## Nama Asal
## 1 Ani Sukabumi
## 2 Budi Jogja
## 3 Carli Depok
## 4 Duta Purworejo
## 41 Elon Jakarta
## 5 Fajar Surabaya
## 6 Gani Purwokerto
## 7 Haidar Jombang
Bagian ini menyisipkan mahasiswa baru bernama Duta dari Purworejo ke
baris ke-4 dalam data. Untuk itu, data dipisah menjadi dua bagian:
sebelum dan sesudah baris ke-4, lalu digabung kembali dengan
rbind().
# Ringkasan numerik
summary(mahasiswa)
## Nama Asal
## Length:8 Length:8
## Class :character Class :character
## Mode :character Mode :character
# Frekuensi asal daerah mahasiswa
table(mahasiswa$Asal)
##
## Depok Jakarta Jogja Jombang Purwokerto Purworejo Sukabumi
## 1 1 1 1 1 1 1
## Surabaya
## 1
Setelah menyisipkan mahasiswa bernama Duta dari Purworejo, total mahasiswa menjadi 8 orang.
Terdapat 8 daerah asal yang berbeda, di mana frekuensi tiap asal = 1.
Penambahan mahasiswa dari Purworejo menambah representasi daerah di tabel.
ozone <- c(2.29, 2.62, 2.84, 2.67, 2.00, 2.51, 2.22, 2.41, 3.44, 3.30)
temp <- c(74, 62, 65, 59, 61, 69, 66, 68, 67, 72)
ozone
## [1] 2.29 2.62 2.84 2.67 2.00 2.51 2.22 2.41 3.44 3.30
temp
## [1] 74 62 65 59 61 69 66 68 67 72
Membuat dua vektor numerik yang menampilkan 10 nilai kadar ozone dan 10 nilai temperatur.
X <- cbind(1, temp)
Y <- matrix(ozone, ncol=1)
X
## temp
## [1,] 1 74
## [2,] 1 62
## [3,] 1 65
## [4,] 1 59
## [5,] 1 61
## [6,] 1 69
## [7,] 1 66
## [8,] 1 68
## [9,] 1 67
## [10,] 1 72
Y
## [,1]
## [1,] 2.29
## [2,] 2.62
## [3,] 2.84
## [4,] 2.67
## [5,] 2.00
## [6,] 2.51
## [7,] 2.22
## [8,] 2.41
## [9,] 3.44
## [10,] 3.30
Kode di atas membuat dua matriks:
Matriks X berukuran 10 × 2
Matriks Y berukuran 10 × 1
di mana:
X: matriks desain berisi kolom pertama (intersep) dengan nilai 1 dan kolom kedua berisi data temperatur.
Y: vektor kolom dari data ozone.
# Koefisien regresi b = (X'X)^-1 X'Y
b <- solve(t(X) %*% X) %*% t(X) %*% Y
b
## [,1]
## 1.32738854
## temp 0.01964723
Rumus tersebut digunakan untuk mendapatkan nilai parameter dari model regresi linier sederhana.
\(b = (X^T X)^{-1} X^T Y\)
alpha <- b[1]
beta <- b[2]
cat(sprintf("Ozone = %.4f + %.4f * Temperatur\n", alpha, beta))
## Ozone = 1.3274 + 0.0196 * Temperatur
b[1] adalah nilai intersep (α)
b[2] adalah kemiringan garis regresi atau slope (β)
Intersep (α) sebesar 0.1234 berarti bahwa saat temperatur 0°C.
Koefisien regresi (β) sebesar 0.0345 berarti bahwa setiap kenaikan 1 derajat temperatur, kadar ozone meningkat rata-rata sebesar 0.0345 satuan.
Karena koefisien β bernilai positif, maka hubungan antara temperatur dan kadar ozone bersifat positif, artinya semakin tinggi suhu, semakin tinggi kadar ozone.
data <- data.frame(Ozone = ozone, Temperatur = temp)
# Ringkasan Statistik
summary(data)
## Ozone Temperatur
## Min. :2.000 Min. :59.00
## 1st Qu.:2.320 1st Qu.:62.75
## Median :2.565 Median :66.50
## Mean :2.630 Mean :66.30
## 3rd Qu.:2.797 3rd Qu.:68.75
## Max. :3.440 Max. :74.00
Bagian ini membuat sebuah data frame bernama data yang berisi dua
kolom: Ozone dan Temperatur. Fungsi summary() memberikan
ringkasan statistik deskriptif berupa:
Nilai minimum
Kuartil pertama (Q1)
Median (Q2)
Mean (rata-rata)
Kuartil ketiga (Q3)
Nilai maksimum
# Standar deviasi
sd(data$Ozone)
## [1] 0.4587665
sd(data$Temperatur)
## [1] 4.762119
Rata-rata kadar ozone sebesar 2.63 menunjukkan nilai tengah dari seluruh pengamatan kadar ozone.
Rata-rata temperatur adalah 66.3°F, yang berada cukup dekat dengan nilai median (66.5). Ini mengindikasikan distribusi data yang cukup simetris.
Standar deviasi Ozone (0.459) relatif kecil, menunjukkan bahwa nilai kadar ozone tersebar cukup rapat di sekitar nilai rata-ratanya.
Standar deviasi Temperatur (4.76) lebih besar, menandakan sebaran temperatur lebih bervariasi dibandingkan ozone.
Nilai kuartil (Q1, Q2, Q3) membantu memahami persebaran data: 50% nilai ozone berada antara 2.32 dan 2.797, sedangkan 50% nilai temperatur berada antara 62.75 dan 68.75.