Methods for High Dimensional Data

Pendahuluan

Data berdimensi tinggi atau high dimensional data, adalah kumpulan data yang berisi fitur (peubah) yang lebih banyak daripada observasinya (n < p). Pendekatan klasik seperti kuadrat terkecil pada regresi linear tidak sesuai pada kondisi ini karena dapat menyebabkan overfitting dan trade off bias-variance. Secara umum untuk mengatasi permasalahan pada data dimensi tinggi dapat dilakukan dengan tiga cara yaitu:

  • Selection atau seleksi peubah (atau seleksi fitur), yaitu tidak semua peubah akan dimasukkan ke dalam model. Contohnya adalah dengan best subset, stepwise.
  • Shrinkage atau penyusutan, yaitu koefisien dari fitur/ penduga disusutkan ke arah nol. Contohnya adalah dengan ridge (gulud), LASSO, elastic-net.
  • Reduction atau reduksi, teknik reduksi yang dimaksud disini adalah bukan mereduksi dimensi X, namun X ditransformasi ke peubah laten, kemudian peubah laten tersebut diseleksi (tidak semua peubah laten dipilih). Contohnya adalah dengan PCR, PLS.

Model Regresi Linier

Bentuk model regresi linier
\[\mathrm{Y} = \beta_0 + \beta_1X_1+ \beta_2X_2+...+\beta_nX_n\] Penduga dengan metode kuadrat terkecil, menghasilkan metode yang tidak bias tetapi ragam besar sehingga bermasalah dalam keakuratan prediksi. Dalam data dimensi tinggi terdapat korelasi antar peubah sehingga ragam menjadi besar. Menggunakan MKT pun menjadi sulit untuk diinterpretasikan jika semakin banyak peubah penjelas yang dimasukkan ke dalam model.

Pada kondisi ini, dapat digunakan metode seleksi dan penyusutan dalam menduga model regresi, meskipun penduga yang dihasilkan berbias, namun ragamnya kecil.

Metode seleksi peubah atau fitur sebagai contoh adalah metode subset terbaik dan regresi bertatar (stepwise), namun ada trade-off bias dan ragam. Metode ini dapat mengurangi ragam prediksi dengan mengorbankan sedikit bias. Interpretasi model semakin mudah karena model hanya memuat subset dari keseluruhan peubah penjelas. Kekurangannya adalah penduga model tidak stabil, dimana perubahan kecil pada data (penambahan atau pengurangan) dapat menghasilkan model yang berbeda (termasuk subset peubahnya).

Metode shrinkage atau menyusutkan koefisien regresi juga dapat dijadikan alternatif. Sebagai contoh menggunakan regresi gulud yang akan menurunkan ragam prediksi dengan mengorbankan sedikit bias. Penduga model yang dihasilkan oleh regresi gulud lebih stabil, tetapi untuk interpretasi model relatif lebih sulit dibandingkan metode seleksi apabila jumlah peubah yang digunakan sangat banyak. Selain itu, dapat juga menggunakan LASSO yang menggabungkan teknik seleksi dengan shrinkage. LASSO bertujuan mengatasi masalah dalam keakuratan pendugaan dan interpretasi dengan mempertahankan keuntungan - keuntungan metode seleksi subset dan regresi gulud.

Pendugaan Model Regresi Linier

Untuk menduga \(\beta\) dari model regresi linear umumnya digunakan metode kuadrat terkecil, yaitu dengan meminimumkan jumlah kuadrat sisaan. Penduga \(\beta\) yang unik dapat diperoleh jika matriks \(X^TX\) berpangkat penuh, jika tidak maka penduga \(\beta\) menjadi tidak unik. Jika data berasal dari data berdimensi tinggi, setiap fitur akan memiliki hubungan atau korelasi. Hal ini berdampak pada syarat \(X^TX\) berpangkat penuh tidak terpenuhi, sehingga jika menggunakan MKT tidak bisa didapatkan penduga \(\beta\) yang unik.

Regresi Gulud

Regresi gulud memberikan finalti dari koefisien regresi pada norm \(L_2\) atau secara spesifik menduga \(\beta\) dengan meminimumkan \(JKS(\beta)\) dengan kendala \[\sum_{j=1}^{p} \beta_j^2 \le t, t \ge 0\] Jika dalam MKT adalah meminimumkan JKS, maka di dalam regresi gulud fungsi objektiv atau fungsi yang diminimumkan jika ditulis dalam bentuk lagrangian adalah \[JKS(\beta)+\lambda \sum_{j=1}^{p} \beta_j^2 \le t, \lambda \ge 0\] Solusi penduga \(\beta\) selalu unik untuk setiap nilai \(\lambda\). Terdapat banyak \(\lambda\) yang dapat dipilih, sehingga pemilihan \(\lambda\) merupakan hal yang kritis. Untuk pemilihan \(\lambda\) tersebut bisa digunakan teknik validasi silang k-folds dengan memperhatikan trade-off antara bias dan ragam. Jika \(\lambda\) mendekati 0 maka bias akan semakin berkurang tetapi ragam semakin meningkat. Ingat jika \(\lambda\) = 0 maka akan menjadi JKS biasa. Penduga koefisien yang diperoleh dari regresi gulud adalah tidak equievariant. Jika X ditransformasi menjadi X, \(\beta\) yang diperoleh dari hasil regresi gulud tidak bisa dikembalikan. Sehingga secara default* pada regresi gulud, X akan distandarisasi (dibakukan) terlebih dahulu sebelum dihitung modelnya.

Package yang dapat digunakan untuk regresi gulut adalah glmnet dan glmnetUtils

library(glmnet)
library(glmnetUtils)

Data yang digunakan adalah dataset leukemia dari package varbvs.

library(varbvs)
data("leukemia", package = "varbvs")
class(leukemia)
[1] "list"

Data yang digunakan dalam package glmnet berupa matrix, untuk mengakomodasi penggunaan data.frame menggunakan glmnetUtils.

leukemia = data.frame(y=leukemia$y,leukemia$x)

Tampilan data leukimia

model_ridge_auc <- cv.glmnet(y~.,data=leukemia,alpha = 0,
                         type.measure="auc",
                         family="binomial",
                         nfolds=5)
plot(model_ridge_auc)

Untuk mengetahui nilai lambda.min

model_ridge_auc$lambda.min
[1] 30.25095

Untuk mengetahui nilai lamda.1se

model_ridge_auc$lambda.1se
[1] 30.25095

Seleksi Forward

Dalam seleksi forward akan dipilih peubah yang memiliki kriteria tertentu untuk model regresi. Seleksi forward terdiri dari stepwise dan stagewise. Pada seleksi forward stepwise model diduga dimulai dengan konstanta \(Y = \beta_0\) kemudian dievaluasi dengan memasukkan satu persatu peubah. Kriteria untuk memasukkan peubah didasarkan pada \(R^2\), \(R^2_{adj}\), JKS, F, CP’s Mallows, AIC, BIC, dll. Dalam pendugaan setiap modelnya menggunakan MKT.

Package yang digunakan dalam metode seleksi forward adalah leaps dengan fungsinya adalah regsubsets. Argumen nvmax digunakan untuk menentukan banyaknya peubah/ subset yang dimasukkan ke dalam model. Data leukimia memiliki 72 observasi, maka peubah yang dimasukkan ke dalam model maksimal adalah 71.

library(leaps)
model_forward <- regsubsets(y~.,data=leukemia,
                            method = "forward",nvmax = 71)

Untuk memilih subset yang terbaik dapat menggunakan nilai BIC. Nilai BIC yang terkecil dianggap sebagai subset terbaik.

best_forward <- data.frame(subset=seq_along(summary(model_forward)$bic),
                           BIC = summary(model_forward)$bic)

Untuk melihat nilai BIC yang paling kecil akan digunakan plot

library(ggplot2)
ggplot(best_forward,aes(subset,BIC))+
  geom_line(size=1)+
  geom_point(color="red",size=2)+
  theme_minimal()

Dari plot tersebut terlihat bahwa nilai BIC yang paling kecil adalah ketika subset-nya antara 70 dan 71, sehingga untuk melihat subset terbaik dapat menggunakan fungsi best_forward.

best_forward[70:71,]
   subset     BIC
70     70 -5065.3
71     71    -Inf

Terlihat bahwa subset 71 bernilai -inf, sehingga subset yang dipilih adalah subset 70. Selanjutnya akan ditampilkan peubah yang terpilih beserta koefisiennya.

coef_forward = coef(model_forward,70)
length(coef_forward)
[1] 71
coef_forward 
  (Intercept)          X183          X218          X235          X287 
 3.472222e-01 -7.404151e-02 -6.090950e-08  7.576329e-03 -2.753443e-03 
         X296          X298          X341          X348          X351 
-4.656128e-02 -2.685595e-04 -2.859934e-08 -2.095386e-04 -3.125436e-06 
         X418          X446          X478          X598          X604 
 7.108548e-03  7.806248e-05 -1.666704e-04 -5.760329e-06 -4.508718e-04 
         X625          X682          X691          X697          X710 
-1.916912e-05 -1.113632e-06 -2.082914e-02 -1.107586e-03  5.790618e-03 
         X716          X784          X801          X849         X1053 
 7.966634e-03  2.169628e-02 -5.422339e-02  4.383456e-03 -3.178720e-02 
        X1123         X1182         X1192         X1204         X1219 
 3.787290e-02  1.141740e-01 -1.234209e-02  1.736643e-11 -1.698153e-01 
        X1267         X1335         X1493         X1551         X1560 
-1.877156e-02  1.451522e-02  2.187258e-04 -2.049213e-03 -5.764137e-10 
        X1667         X1713         X1858         X1889         X1909 
-1.533883e-03  5.013101e-04 -1.541831e-05 -4.734743e-06  3.503166e-02 
        X1946         X2089         X2102         X2107         X2155 
 7.517935e-02  6.261964e-04  3.353616e-02  1.917570e-02  1.403177e-04 
        X2234         X2315         X2363         X2427         X2491 
-1.787946e-04  4.128251e-02 -3.593878e-03  3.409575e-02  2.144905e-02 
        X2523         X2558         X2579         X2715         X2751 
-2.823069e-03 -4.467083e-02  6.571662e-05  4.532983e-05 -5.201828e-07 
        X2761         X2811         X2861         X2888         X2915 
-1.124179e-03  1.097293e-02 -2.455356e-07  7.308873e-02 -1.769428e-03 
        X2954         X3038         X3311         X3478         X3512 
 8.256019e-04  1.414855e-01  8.937411e-09  4.371139e-02 -2.100190e-03 
        X3522         X3529         X3530         X3539         X3545 
 1.596075e-02  1.728537e-05 -2.879700e-02  2.584945e-02 -1.363613e-03 
        X3557 
-4.631553e-02 

LASSO

LASSO memberikan penalti \(L_1\) dibanding \(L_2\) pada regresi gulud \[\sum_{j=1}^{p} | \beta_j| \le t, t \ge 0\] Dalam bentuk lagrangian, permasalahan ini dapat ditulis \[JKS(\beta)+\lambda \sum_{j=1}^{p} |\beta_j| \le t, t \ge 0\] Solusi \(\beta\) tidak dapat diperoleh dalam bentuk tertutup. Pendugaan LASSO bersifat equivariant sehingga dilakukan proses pembakuan peubah sebelum diduga modelnya.

Di dalam R, LASSO dapat dijalankan melalui package glmnet dan fungsi cv.glmnet. Fungsi cv.glmnet digunakan untuk menjalakan metode LASSO asalkan nilai argumen alpha=1.

set.seed(5816)
model_lasso_dev <- cv.glmnet(y~.,data=leukemia,alpha = 1,
                         type.measure="deviance",
                         family="binomial",
                         nfolds=5)
model_lasso_auc <- cv.glmnet(y~.,data=leukemia,alpha = 1,
                         type.measure="auc",
                         family="binomial",
                         nfolds=5)

Nilai koefisien dari variabel terpilih

Peubah yang terpilih berdasarkan nilai lambda optimal, maka s diisi dengan lambda.min

model_lasso_auc

coef_auc_min <- coef(model_lasso_auc,s = "lambda.min") 
broom::tidy(coef_auc_min)
           row column        value
1  (Intercept)      1 -1.781018442
2         X158      1  0.080551992
3         X219      1 -0.055438814
4         X456      1 -0.544966098
5         X657      1 -0.117877397
6         X672      1 -0.818117717
7         X888      1  0.026746538
8         X918      1  0.023983733
9         X956      1  0.404309535
10        X979      1  1.366152414
11       X1182      1  0.044035231
12       X1219      1 -0.200857066
13       X1652      1  0.351322309
14       X1946      1  0.418338192
15       X2230      1  0.006557391
16       X2481      1  0.896602539
17       X2537      1  0.036936781
18       X2888      1  0.184174771
19       X3098      1  0.329983880
20       X3158      1  0.053761876

model_lasso_dev

coef_auc_min <- coef(model_lasso_dev,s = "lambda.min") 
broom::tidy(coef_auc_min)
           row column       value
1  (Intercept)      1 -2.08757850
2         X158      1  0.05197922
3         X219      1 -0.12944846
4         X456      1 -0.60966938
5         X657      1 -0.16050205
6         X672      1 -0.99194885
7         X888      1  0.08984458
8         X918      1  0.08763502
9         X956      1  0.47233352
10        X979      1  1.59130673
11       X1219      1 -0.26174776
12       X1652      1  0.35069763
13       X1796      1  0.01100616
14       X1946      1  0.55837041
15       X2230      1  0.04807908
16       X2239      1 -0.01181079
17       X2387      1 -0.01973279
18       X2481      1  1.02686842
19       X2537      1  0.03960220
20       X2727      1 -0.02821787
21       X2888      1  0.23668504
22       X3098      1  0.39943739
23       X3158      1  0.05086214
24       X3292      1  0.00638291

Peubah yang terpilih berdasarkan nilai lambda yang memiliki selang terkecil, maka s diisi dengan lambda.1se

model_lasso_auc

coef_auc_se <- coef(model_lasso_auc,s = "lambda.1se")
broom::tidy(coef_auc_se)
           row column        value
1  (Intercept)      1 -1.781018442
2         X158      1  0.080551992
3         X219      1 -0.055438814
4         X456      1 -0.544966098
5         X657      1 -0.117877397
6         X672      1 -0.818117717
7         X888      1  0.026746538
8         X918      1  0.023983733
9         X956      1  0.404309535
10        X979      1  1.366152414
11       X1182      1  0.044035231
12       X1219      1 -0.200857066
13       X1652      1  0.351322309
14       X1946      1  0.418338192
15       X2230      1  0.006557391
16       X2481      1  0.896602539
17       X2537      1  0.036936781
18       X2888      1  0.184174771
19       X3098      1  0.329983880
20       X3158      1  0.053761876

model_lasso_dev

coef_dev_se <- coef(model_lasso_dev,s = "lambda.1se")
broom::tidy(coef_dev_se)
           row column        value
1  (Intercept)      1 -1.202783501
2         X456      1 -0.348724903
3         X626      1 -0.192490430
4         X672      1 -0.407115218
5         X956      1  0.295115988
6         X979      1  0.916017432
7        X1182      1  0.004487211
8        X1219      1 -0.061822704
9        X1652      1  0.260076303
10       X1946      1  0.171132397
11       X2481      1  0.596925768
12       X2888      1  0.028961393
13       X3098      1  0.165247266
14       X3158      1  0.018010204
15       X3441      1 -0.020083808

PCR: Regresi Komponen Utama

Principal Component Regression merupakan metode reduksi. PCR merupakan perpaduan antara teknik PCA dengan MKT. PCA merupakan teknik mereduksi dimensi n x p dari matriks X. Perlu diingat bahwa mereduksi disini adalah mentransformasi dari X menjadi Z. Proses yang dilakukan adalah X ditransformasi ke dalam maksimum p komponen utama \(Z_i\) yang saling orthogonal, i = 1, …, p. 

Tahap PCR/ RKU:

  • X ditransformasi ke dalam k < p komponen utama (tidak semua komponen utama digunakan)
  • Lakukan pendugaan modeL \(Y = X\beta\)

Pemilihan Tunning Parameter

Semua metode yang dibahas tersebut memiliki sifat bias, berbeda dengan MKT yang tidak berbias, namun metode tersebut memiliki ragam paling kecil. Untuk dapat memilih model terbaik, misalkan pada regresi gulud dan LASSO harus ditentukan \(\lambda\) nya berapa, \(\lambda\) ini adalah sebuah tunning parameter. Dalam stepwise menentukan berapa peubah yang dimasukkan ke dalam model, maka p merupakan tunning parameter. Dalam PCR, ditentukan berapa komponen utama yang digunakan, maka komponen utama merupakan tunning parameter.

Metode yang umum digunakan dalam pemilihan penalti/ tunning parameter ini adalah validasi silang (Cross Validation/ CV). Tipe validasi silang yang umum adalah validasi silang leave-one-out (LOO) dan k-fold.

Referensi

Nurussadad, A.A. (Maret, 2021). STA581-06 - Metode Seleksi Peubah untuk High-dimensional Data. Retrieved from https://rpubs.com/nurussadad/STA581-06-Seleksi-Peubah

Soleh, A.M. (2021). STA581 Sains Data: Methods for High Dimensional Data, Selection, Shrinkage, and Reduction. Retrieved from https://newlms.ipb.ac.id/