Pada kali ini kita akan membahas tentang sudut dan ortogonalitas.
Sudut dan Ortogonalitas
Terdapat tak terhingga banyaknya cara untuk membentuk sebuah basis untuk ruang vektor. Namun, dalam banyak kasus, kita mungkin ingin memiliki sebuah basis di mana setiap vektor ortogonal terhadap vektor-vektor lainnya. Sebagai contoh, basis V disusun oleh massa yang ditunjukkan pada Gambar 4.9. Jika tidak demikian, maka basis V disusun oleh massa yang ditunjukkan pada Gambar 4.13. Oleh karena itu, dalam bagian ini kita akan membahas bagaimana kita dapat mengukur sudut antara dua vektor dalam ruang produk dalam.
library(magick)
## Linking to ImageMagick 6.9.12.3
## Enabled features: cairo, freetype, fftw, ghostscript, heic, lcms, pango, raw, rsvg, webp
## Disabled features: fontconfig, x11
# Reading from a local computer.
inp_img <- image_read("4.9.png")
inp_img1 <- image_read("4.13.png")
plot(inp_img)
plot(inp_img1)
Contoh Kerja Dalam PCA, komponen utama membentuk sebuah basis untuk ruang vektor Rd, di mana d adalah jumlah variabel dalam dataset masukan, dan juga membentuk sebuah basis ortogonal. Ketika kita menggambar gambaran dari kluster pada dataset “USArrests” yang kita hitung melalui metode klasterisasi k-means di bagian sebelumnya dan juga melalui metode klasterisasi hierarkis di Bab 4 (Vector Spaces), kita menggunakan komponen utama pertama dan komponen utama kedua untuk memvisualisasikan data tersebut. PCA sering digunakan untuk memvisualisasikan dataset masukan dalam ruang vektor berdimensi lebih rendah. Pada contoh kerja dalam bagian ini, kita akan menerapkan PCA pada dataset “USArrests” sehingga kita dapat melihat dengan cermat semua komponen utama. Pertama, mari kita plot dataset pada komponen utama pertama dan kedua. Untuk melakukannya, kita perlu menggunakan paket ggplot2, ggfortify, dan gridExtra.
library(ggplot2)
library(ggfortify)
library(gridExtra)
Pertama, kita memuat dan membersihkan data:
df <-USArrests
df <-na.omit(df)
df <-scale(df)
Untuk memvisualisasikan dataset melalui PCA, kita menggunakan fungsi autoplot():
pc <-prcomp(df,scale=TRUE)
autoplot(pc, data=df)
GAMBAR 5.6
Plot ini menunjukkan data “USArrests” melalui PCA. Sumbu-x menampilkan komponen utama pertama dan sumbu-y menampilkan komponen utama kedua. Kami membuat plot ini menggunakan fungsi autoplot() dari paket ggplot2.
Dalam banyak situasi, kita perlu mengukur sudut antara dua vektor. Sebagai contoh, dalam fisika mekanik, kita perlu mengukur sudut dari gerakan proyektil untuk memprediksi jarak yang ditempuh. Dalam probabilitas, ini berkaitan dengan korelasi antara dua variabel acak. Oleh karena itu, pertama-tama, kita akan menunjukkan bagaimana menghitung sudut antara vektor menggunakan inner product dalam ruang vektor.
Dengan menggunakan fungsi orth() dari paket pracma, kita dapat menghitung basis orthonormal untuk sebuah ruang vektor. Sebagai contoh, anggaplah
# Reading from a local computer.
inp_img <- image_read("matriksA.png")
plot(inp_img)
Sekarang kita ingin menghitung basis orthonormal untuk ruang baris A. Maka kita memiliki
library(pracma)
A <-matrix(c(1,1,1,1,1,0,0,0,1),3,3,byrow=TRUE)
A
## [,1] [,2] [,3]
## [1,] 1 1 1
## [2,] 1 1 0
## [3,] 0 0 1
B <-orth(A)
B
## [,1] [,2]
## [1,] -0.7886751 0.2113249
## [2,] -0.5773503 -0.5773503
## [3,] -0.2113249 0.7886751
Setiap kolom dari B yang diperoleh dari fungsi orth() merupakan elemen dalam basis orthonormal dari ruang baris A.
Keterangan 5.5
Terdapat beberapa algoritma yang bagus untuk menghitung basis orthonormal untuk sebuah ruang vektor, seperti proses Gram-Schmidt. Dalam buku ini, kami tidak akan membahas secara detail prosedur tersebut, karena kami akan menggunakan fungsi orth() untuk menghitung basis orthonormal untuk sebuah ruang vektor.
Definisi 47
Anggap V adalah ruang produk dalam dan W adalah subruang vektor dari V. Sebuah himpunan vektor dalam V, yang ortogonal terhadap setiap vektor dalam W, disebut komplement ortogonal dari W.
Berikutnya, adalah contoh 140
# Reading from a local computer.
inp_img <- image_read("contoh140.png")
plot(inp_img)
Kemudian, menggunakan fungsi Null() dari paket MASS, kita memiliki:
library(MASS)
A <-matrix(c(1,1,1,1,1,0,0,0,1),3,3,byrow=TRUE)
Null(t(A))
## [,1]
## [1,] -7.071068e-01
## [2,] 7.071068e-01
## [3,] -1.110223e-16
Practical Applications
Kembali ke dataset “USArrests”, perhatikan bahwa karena kita memiliki empat variabel, dataset ini berada dalam ruang vektor V = R4. Untuk menghitung komponen utama, yang membentuk basis orthonormal untuk ruang vektor V = R4, kita akan menggunakan fungsi princomp() dalam R. “Loadings” adalah output dari fungsi princomp() dan merupakan sekumpulan komponen utama, yang merupakan basis orthonormal untuk V = R4:
pca<- princomp(data.frame(scale(df)))
pca$loadings
##
## Loadings:
## Comp.1 Comp.2 Comp.3 Comp.4
## Murder 0.536 0.418 0.341 0.649
## Assault 0.583 0.188 0.268 -0.743
## UrbanPop 0.278 -0.873 0.378 0.134
## Rape 0.543 -0.167 -0.818
##
## Comp.1 Comp.2 Comp.3 Comp.4
## SS loadings 1.00 1.00 1.00 1.00
## Proportion Var 0.25 0.25 0.25 0.25
## Cumulative Var 0.25 0.50 0.75 1.00
DISCUSSION
Kami menerapkan Metode Regresi Jarak Ortogonal (ODR) untuk menemukan bidang linear “terbaik” yang cocok dalam R2 untuk memprediksi “Gaji” dari “Pukulan” dan “AtBat” pemain bisbol berdasarkan dataset “Hitters” dari paket ISLR [24]. ODR adalah analisis regresi untuk dataset dalam Rd yang mencoba menemukan bidang linear sedemikian rupa sehingga jumlah kuadrat jarak antara setiap titik data dan proyeksinya pada bidang linear diminimalkan untuk semua bidang linear yang mungkin dalam Rd.
Pertama, kita memuat paket ISLR dan dataset tersebut. Kemudian, karena terdapat beberapa nilai yang hilang, kita menggunakan fungsi na.omit() untuk menghapus semua nilai yang hilang:
library(ISLR)
data(Hitters)
D <-na.omit(Hitters)
Selanjutnya, kita akan menggunakan fungsi odregress() dari paket pracma:
library(pracma)
res <-odregress(as.matrix(D[,1:2]),as.matrix(D$Salary))
Fungsi as.matrix() mengubah dataset menjadi matriks numerik. Argumen pertama dari fungsi odregress() adalah kumpulan variabel independen. Dalam kasus ini, variabel-variabel tersebut adalah “AtBat” (kolom pertama dari data) dan “Hits” (kolom kedua dari data). Argumen kedua fungsi adalah variabel dependen. Dalam kasus ini, variabel dependen adalah “Salary”.
Jika Anda mengetik “res$coeff”, akan menghasilkan koefisien dari bidang linear:
res$coeff
## [1] -43.53176 150.65796 1861.91571
Ini berarti koefisien untuk “AtBat” adalah -43.53176 dan koefisien untuk “Hits” adalah 150.65796. Koefisien untuk intercept adalah 1861.91571. Ini berarti kita dapat memperkirakan “Salary” sebagai berikut:
Salary = -43.53176 . At Bat + 150.65796 . Hits + 1861.91571.