Anda di halaman 1dari 34

AVAILABLE DATA

Kita telah memiliki R programming dan Bopc-Lite sebagai alat


bantu menganalisis DNA microarray. Pertama kita memiliki
sekumpulan data dari sumber yg telah disebutkan

Informasi yang dapat kita ketahui dari gambar tersebut terbagi


dalam beberapa kelompok, data di atas merupakan data uji
dengan matriks tingkat ekspresi gen, dengan 12625 gen dan
128 sampel. Objek juga terdiri dari meta-data sampel.
Percobaan ini termasuk bagian phenoData yang memiliki
informasi tentang nama sampel dan beberapa co-variates,
serta mencakup informasi fitur (misal, gen) dan anotasi gen
dari biomedis database. Juga menggambarkan percobaan
tersebut. Terdapat beberapa metode untuk mengakses data
dalam ExpressionSet. Misalnya, mendapatkan co-variates yang
terkait dengan masing-masing sampel, sbb:

Dua pernyataan pertama adalah nama dan deskripsi co-


variates. Kemudian beberapa distribusi sampel di dua co-
variates utama, yaitu:

Variabel BT yang menentukan tipe leukemia limfoblastik akut


dan variabel mol bio yang menggambarkan kelainan
sitogenetika yg ditemukan pada setiap sampel ;NEG(tdk ada
kelainan).

Berikut beberapa info mengenai gen dan sampel;


Diatas merupakan nama-nama 10 gen teratas dari 12652 gen,
dan 5 nama sampel teratas dari 128 sampel yang kita miliki.

Pada kasus ini, analisis hanya di fokuskan kepada ALL sel B


terutama pada sampel dengan subset mutasi, yang menjadi
target penelitian. Berikut adalah subset dari data diatas yang
akan digunakan:

Pernyataan pertama adl sampel dengan spesifik dari variabel


BT dan mol.bio . dalam table sebelumnya dapat dilihat subset
asli atau data subset mentah yg kemudian terseleksi beberapa
subset menjadi 94 sampel, yg akan kita gunakan dalam
penelitian. Subset sampel hanya berisi beberapa nilai variabel
BT dan mol.bio , kita harus mengupdate data dari kedua faktor
ini pada objek ALL B:

Objek ALL B akan kita gunakan dalam penelitian ini, kemudian


simpan di library lokal pada laptop, maka kita tdk perlu
mengulang stepbystep dari awal.

EXPLORING DATASET

Fungsi exprs() di gunakan untuk mengakses matriks tingkat


ekspresi gen
Matriks dataset memiliki 12.625 baris (gen/fitur) dan 94 kolom
(contoh/kasus). Dari segi dimensi, tantangan utama dari
masalah ini adalah kenyataan bahwa ada terlalu banyak
variabel untuk jumlah kasus yang hanya tersedia 94. Maka
tujuan kita untk mengurangi variabel, yaitu menghilangkan
beberapa gen dari analisis. Untuk membantu penelitian ini, kita
mulai dengan mengeksplorasi tingkat ekspresi data. Berikut
merupakan sebagian ekspresi data antara 4-7:

Agar lebih mudah dipahami, kita akan membuatnya data diatas


dalam bentuk gambaran secara grafis, dengan menggunakan
fungsi gen filter dari paket gen filter Gentleman et al. (2010).
Kita akan menginstal terlebih dahulu:

Kemudian menampilkan bentuk grafis dari data yg disebutkan:


Hasil yg di tunjukkan pd gambar di atas, telah dirubah dari
angka aslinya, telah dirubah dengan angka 80 sebagai
parameter pembatas kita bisa mendapatkan fine-grained dari
distribusi data, yang memungkinkan banyaknya tingkat
ekspresi gen yang kita miliki. Di atas kita telah mendapatkan
garis median diantara kuartil pertama dan ketiga, juga yg
kedua. Statistik ini merupakan estimator kuat dari sentralitas
distribusi terus menerus yang diimplementasikan oleh fungsi
short() paket genefilter. Garis diatas dihitung sebagai mean
dari nilai dalam interval pusat yg berisi 50% pengamatan(jarak
interkuartil).

Apakah distribusi tingkat ekspresi gen dari sampel dengan a


mutasi tertentu berbeda satu sama lain? Berikut jawabannya:
Dapat kita lihat, banyak hal serupa di subkumpulan sampel ini,
selain itu mereka serupa dengan tingkat ekspresi global.

GENE (FEATURE) SELECTION

Pemilihan fitur adlh hal penting dalam masalah data mining.


Masalah umum yang sering terjadi adalah penumpukkan pada
data yang kemudian harus di pilah, dari data mentah yg tidak
bisa dibaca kemudian di pilih sekelompok data penting yang
mmenjurus ke peneliatian yang di kerjakan, dan mengolah
data yang telah di filter. Terdapat 2 jenis pendekatan untuk
pemilihan fitur:
1) filter, 2) wrapper . Dari bab sebelumnya 3.3.2 yg
menggunakan sifat statistik untuk memilih sebagai perangkat
final, sedangkan yang terakhir menggunakan tools data mining
dalam proses seleksi.

Untuk menjelaskan analisis kami menggunakan model


pendekatan filter yang secara teori dapat lebih mudah
dipahami, yang akan tergambarkan dalam beberapa
pendekatan filter.

5.3.1 Simple Filter Based On Distribution Properti

Metode penyaringan gen pertama yang kami gambarkan


didasarkan pada informasi mengenai distribusi tingkat ekspresi.
Jenis data eksperimen ini biasanya mencakup beberapa gen
yang tidak diekspresikan sama sekali atau terlihat sangat kecil
variabilitas-nya. Properti yang terakhir berarti bahwa gen ini
hampir tidak dapat digunakan untuk membedakan beberapa
sampel. Selain itu, jenis microarray ini biasanya memiliki
beberapa probe kontrol yang dapat dengan aman dikeluarkan
dari analisis kami (Moreover, this type of microarray usually has several control
probes that can be safely removed from our analysis.) Dalam kasus penelitian
ini, dengan menggunakan microarrays U95Av2 A, multifetrik,
probe ini memiliki nama yang dimulai dengan huruf "AFFX".
Kita bisa mendapatkan keseluruhan gagasan tentang distribusi
tingkat ekspresi setiap gen di semua individu dengan grafik
berikut. Kita akan menggunakan rentang median dan inter
kuartil (IQR) sebagai perwakilan dari distribusi ini.
Kode berikut memperoleh skor ini untuk setiap gen dan plot
nilai yang menghasilkan grafik pada Gambar 5.2:

> rowIQRs <- function(em)


+ rowQ(em,ceiling(0.75*ncol(em))) - rowQ(em,floor(0.25*ncol(em)))
> plot(rowMedians(es),rowIQRs(es),
+ xlab='Median expression level',
+ ylab='IQR expression level',
+ main='Main Characteristics of Genes Expression Levels')

Fungsi rowMedians () dari paket Biobase memperoleh vektor


median per baris matriks. Ini adalah implementasi yang efisien
dari tugas ini. Alternatif yang kurang efisien adalah
menggunakan fungsi yang berlaku () 2 Fungsi rowQ () adalah
implementasi lain yang disediakan oleh paket ini dengan tujuan
untuk memperoleh quantiles distribusi dari baris matriks.
Argumen kedua dari fungsi ini adalah bilangan bulat mulai dari
1 (yang akan memberi kita minimum) ke jumlah kolom matriks
(yang akan menghasilkan maksimum). Dalam hal ini kita
menggunakan fungsi ini untuk mendapatkan IQR dengan
mengurangkan kuartil ke 3 dari kuartil 1. Statistik ini masing-
masing sesuai dengan 75% dan 25% data. Kami telah
menggunakan fungsi lantai () dan plafon () untuk
mendapatkan urutan yang sesuai dengan jumlah nilai setiap
baris. Kedua fungsi mengambil bilangan bulat dari bilangan
floating point, walaupun dengan prosedur pembulatan fferen.
Bereksperimenlah dengan keduanya untuk melihat
perbedaannya. Dengan menggunakan fungsi rowQ (), kita
telah membuat function rowIQRs () untuk mendapatkan IQR
setiap barisnya.

GAMBAR 5.2

Gambar 5.2 memberikan informasi menarik. Yaitu, kita dapat


mengamati bahwa sebagian besar gen memiliki variabilitas
yang sangat rendah (IQR mendekati 0). Seperti disebutkan di
atas, jika gen memiliki variabilitas yang sangat rendah di
semua sampel, maka cukup aman untuk menyimpulkan bahwa
tidak akan berguna dalam membedakan jenis mutasi B-sel ALL
yang berbeda. Ini berarti kita dapat dengan aman melepaskan
gen ini dari tugas klasifikasi kita. Kita harus mencatat bahwa
ada peringatan tentang penalaran ini. Secara umum, kita
melihat gen secara individu. Ini berarti ada beberapa risiko
bahwa beberapa gen ini dengan variabilitas rendah, bila
digabungkan dengan gen lain, sebenarnya bisa bermanfaat
untuk tugas klasiikasi. Namun, pendekatan gen-demi-gen yang
akan kita ikuti adalah yang paling umum untuk masalah ini
karena mengeksplorasi interaksi antar gen dengan kumpulan
data dimensi ini tidaklah mudah. Namun demikian, ada
beberapa metode yang mencoba memperkirakan pentingnya
fitur, dengan mempertimbangkan ketergantungan mereka. Itu
adalah kasus metode RELIEF (Kira dan Rendel, 1992;
Kononenko et al., 1997).
Kita akan menggunakan heuristic threshold berdasarkan nilai
IQR untuk menghilangkan beberapa gen dengan variabilitas
yang sangat rendah. Yaitu, kita akan menghapus gen dengan
variabilitas yang lebih kecil dari 1 = 5 IQR global. Fungsi
nsFilter () dari genefilter paket dapat digunakan untuk jenis
penyaringan ini:

> library(genefilter)
> ALLb <- nsFilter(ALLb,
+ var.func=IQR,
+ var.cutoff=IQR(as.vector(es))/5,
+ feature.exclude="^AFFX")
> ALLb
$eset
ExpressionSet (storageMode: lockedEnvironment)
assayData: 4035 features, 94 samples
element names: exprs
phenoData
sampleNames: 01005, 01010, ..., LAL5 (94 total)
varLabels and varMetadata description:
cod: Patient ID
diagnosis: Date of diagnosis
...: ...
mol.bio: molecular biology
(22 total)
featureData
featureNames: 41654_at, 35430_at, ..., 34371_at (4035 total)
fvarLabels and fvarMetadata description: none
experimentData: use 'experimentData(object)'
pubMedIds: 14684422 16243790
Annotation: hgu95av2
$filter.log
$filter.log$numLowVar
[1] 4764
$filter.log$numDupsRemoved
[1] 2918
$filter.log$feature.exclude
[1] 19
$filter.log$numRemoved.ENTREZID
[1] 889

Seperti yang Anda lihat, kita tertinggal dengan hanya 4.035


gen dari 12.625 awal. Ini adalah pengurangan agak signi
ficant. Meski begitu, kita masih jauh dari kumpulan data yang
"mudah dikelola" oleh kebanyakan model klasifikasi, mengingat
kita hanya memiliki 94 pengamatan.
Hasil fungsi nsFilter () adalah daftar dengan beberapa
komponen. Di antara ini kita memiliki beberapa yang berisi
informasi tentang gen yang dihapus, dan juga komponennya
(eset) dengan objek "yang tersaring". Sekarang setelah kita
melihat hasil dari penyaringan ini, kita dapat memperbarui
SEMUA ALLb dan es objek kita untuk menampung data yang
tersaring:

> ALLb <- ALLb$eset


> es <- exprs(ALLb)
> dim(es)
[1] 4035 94

5.3.2 ANOVA Filters


Jika gen memiliki distribusi nilai ekspresi yang serupa di semua
nilai variabel target yang ada, maka pasti tidak ada gunanya
membedakan antara nilai-nilai ini. Pendekatan kami
selanjutnya didasarkan pada gagasan ini. Kita akan
membandingkan tingkat ekspresi rata-rata gen di seluruh
subset sampel yang termasuk mutasi B-sel ALL tertentu, yaitu
mean yang dikondisikan pada nilai variabel target. Gen yang
memiliki tingkat statistik tinggi memiliki tingkat ekspresi rata-
rata yang sama di antara kelompok sampel yang termasuk
dalam setiap mutasi akan dibuang dari analisis lebih lanjut.
Membandingkan sarana di lebih dari dua kelompok dapat
dilakukan dengan menggunakan uji statistik ANOVA. Dalam
studi kasus kami, kami memiliki empat kelompok kasus, satu
untuk masing-masing mutasi gen sel B SEMUA yang sedang
kami pertimbangkan. Penyaringan gen berdasarkan tes ini
agak mudah di R, berkat fasilitas yang disediakan oleh paket
filter gen. Kita bisa melakukan penyaringan jenis ini sebagai
berikut:

> f <- Anova(ALLb$mol.bio, p = 0.01)


> ff <- filterfun(f)
> selGenes <- genefilter(exprs(ALLb), ff)
> sum(selGenes)
[1] 752
> ALLb <- ALLb[selGenes, ]
> ALLb
ExpressionSet (storageMode: lockedEnvironment)
assayData: 752 features, 94 samples
element names: exprs
phenoData
sampleNames: 01005, 01010, ..., LAL5 (94 total)
varLabels and varMetadata description:
cod: Patient ID
diagnosis: Date of diagnosis
...: ...
mol.bio: molecular biology
(22 total)
featureData
featureNames: 266_s_at, 33047_at, ..., 40698_at (752 total)
fvarLabels and fvarMetadata description: none
experimentData: use 'experimentData(object)'
pubMedIds: 14684422 16243790
Annotation: hgu95av2

Fungsi Anova () menciptakan fungsi baru untuk melakukan


penyaringan ANOVA. Ini memerlukan faktor yang menentukan
subkelompok dataset kami dan tingkat signiikan statistik.
Fungsi yang dihasilkan disimpan dalam variabel f. Fungsi
filterfun () bekerja dengan cara yang sama. Ini menghasilkan
fungsi penyaringan yang dapat diterapkan pada matriks
ekspresi. Aplikasi ini dilakukan dengan fungsi genefilter () yang
menghasilkan vektor dengan banyak elemen karena ada gen
dalam matriks ekspresi yang diberikan. Vektor berisi nilai-nilai
logis. Gen yang dianggap berguna menurut uji statistik ANOVA
memiliki nilai TRUE. Seperti yang bisa Anda lihat, hanya ada
752. Akhirnya, kita bisa menggunakan vektor ini untuk
memfilter objek ExpressionSet kita.

Gambar 5.3 menunjukkan median dan IQR gen yang dipilih


oleh uji ANOVA. Gambaran tersebut diperoleh sebagai berikut:

> es <- exprs(ALLb)


> plot(rowMedians(es),rowIQRs(es),
+ xlab='Median expression level',
+ ylab='IQR expression level',
+ main='Distribution Properties of the Selected Genes')

Variabilitas dalam hal IQR dan median yang dapat kita amati
pada Gambar 5.3 memberikan bukti bahwa gen dinyatakan
dalam skala nilai yang berbeda. Beberapa teknik pemodelan
dipengaruhi oleh permasalahan dimana masing-masing kasus
dijelaskan oleh satu set variabel dengan menggunakan skala
yang berbeda. Yaitu, metode apapun yang bergantung pada
jarak antara pengamatan akan berbeda dari jenis masalah ini
karena fungsi jarak biasanya meringkas perbedaan antara nilai
variabel. Dalam konteks ini, variabel dengan nilai rata-rata
yang lebih tinggi akan berakhir dengan pengaruh yang lebih
besar pada jarak antara pengamatan. Untuk menghindari hal
ini, lazim untuk menstandarisasi (menormalkan) data.
Transformasi ini terdiri dari penguraian nilai khas dari variabel
dan membagi hasilnya dengan ukuran spread.

GAMBAR 5.3

Mengingat tidak semua teknik pemodelan diwakili oleh


karakteristik data ini, kita akan meninggalkan transformasi ini
ke tahap pemodelan, sehingga bergantung pada alat yang akan
digunakan.

5.3.3 Filtering Using Random Forests


Matriks tingkat ekspresi yang dihasilkan dari fiberglass ANOVA
sudah bisa diatur, walaupun kita masih memiliki lebih banyak
fitur daripada pengamatan. Sebenarnya, dalam upaya
pemodelan yang dijelaskan pada Bagian 5.4, kita akan
menerapkannya model yang dipilih untuk matriks ini. Namun
demikian, seseorang dapat mempertanyakan apakah hasil
yang lebih baik dapat diperoleh dengan dataset dengan
dimensi "standar" yang lebih. Dalam konteks ini, kita dapat
mencoba untuk mengurangi jumlah fitur dan membandingkan
hasil yang diperoleh dengan dataset yang berbeda.
Random Forest dapat digunakan untuk mendapatkan peringkat
fitur dalam hal kegunaannya untuk tugas klasifikasi. Pada
Bagian 3.3.2 (halaman 112) kita melihat contoh penggunaan
hutan acak untuk mendapatkan peringkat kepentingan variabel
dalam konteks masalah prediksi.
Sebelum melanjutkan dengan ilustrasi pendekatan ini, kita
akan mengubah nama gen. Nama saat ini tidak standar dalam
hal apa yang diharapkan dalam frame data yang digunakan
oleh banyak teknik pemodelan. Fungsi make.names () dapat
digunakan untuk "memecahkan" masalah ini sebagai berikut:

> featureNames(ALLb) <- make.names(featureNames(ALLb))


> es <- exprs(ALLb)

Fungsi featureNames () menyediakan akses ke nama gen


dalam ExpressionSet. Random Forest dapat digunakan untuk
mendapatkan peringkat gen sebagai berikut:

> library(randomForest)
> dt <- data.frame(t(es), Mut = ALLb$mol.bio)
> rf <- randomForest(Mut ~ ., dt, importance = T)
> imp <- importance(rf)
> imp <- imp[, ncol(imp) - 1]
> rf.genes <- names(imp)[order(imp, decreasing = T)[1:30]]

Kami membuat sebuah set pelatihan dengan menambahkan


informasi mutasi ke matriks ekspresi transpos. Kami kemudian
mendapatkan hutan acak dengan parameter penting yang
ditetapkan TRUE untuk mendapatkan perkiraan pentingnya
variabel. Fungsi penting () digunakan untuk mendapatkan
relevansi masing-masing variabel.
Fungsi ini benar-benar mengembalikan beberapa nilai pada
kolom yang berbeda, sesuai dengan kriteria yang berbeda dan
untuk setiap nilai kelas. Kami memilih kolom dengan nilai
variabel yang diukur sebagai perkiraan penurunan rata-rata
akurasi klasifikasi bila masing-masing variabel dihilangkan
secara bergantian. Akhirnya, kita mendapatkan gen yang
muncul di posisi 30 posisi teratas yang dihasilkan oleh skor ini.
Kita mungkin penasaran dengan tingkat ekspresi distribusi
tesis 30 gen di antara mutasi yang berbeda. Kita dapat
memperoleh tingkat median untuk 30 gen teratas ini sebagai
berikut:

> sapply(rf.genes, function(g) tapply(dt[, g], dt$Mut, median))

MAKA AKAN KELUAR HASILNYA!


Kita dapat mengamati beberapa perbedaan yang menarik
antara tingkat ekspresi median di antara jenis mutasi, yang
memberikan indikasi bagus tentang kekuatan diskriminatif gen
ini. Kita dapat memperoleh lebih banyak detail dengan secara
grafis memeriksa nilai ekspresi beton dari gen ini untuk 94
sampel:

> library(lattice)
> ordMut <- order(dt$Mut)
> levelplot(as.matrix(dt[ordMut,rf.genes]),
+ aspect='fill', xlab='', ylab='',
+ scales=list(
+ x=list(
+ labels=c('+','-','*','|')[as.integer(dt$Mut[ordMut])],
+ cex=0.7,
+ tck=0)
+ ),
+ main=paste(paste(c('"+"','"-"','"*"','"|"'),
+ levels(dt$Mut)
+ ),
+ collapse='; '),
+ col.regions=colorRampPalette(c('white','orange','blue'))
+ )

Grafik yang diperoleh dengan kode ini ditunjukkan pada


Gambar 5.4. Kami mengamati bahwa ada beberapa gen
dengan fasa yang ditandai di tingkat ekspresi melintasi mutasi
yang berbeda. Misalnya, ada perbedaan dalam ekspresi tingkat
pada gen X36275_at antara ALL1 / AF4 dan BCR / ABL. Untuk
mendapatkan grafik ini kita menggunakan fungsi levelplot ()
dari paket kisi. Fungsi ini bisa memplot gambar warna matriks
angka. Dalam hal ini kita telah menggunakannya untuk
merencanakan matriks tingkat ekspresi kita dengan sampel
yang dipesan berdasarkan jenis mutasi.

5.3.4 Filtering Using Feature Clustering Ensembles

Pendekatan yang dijelaskan pada bagian ini menggunakan


algoritma clustering untuk mendapatkan 30 kelompok variabel
yang seharusnya serupa. Ke 30 kelompok variabel ini
kemudian akan digunakan untuk mendapatkan model
klasifikasi ensemble dimana model m akan diperoleh dengan
30 variabel, masing-masing dipilih secara acak dari satu dari
30 cluster.
Ensemble adalah metode pembelajaran yang membangun
seperangkat model prediksi dan kemudian mengklasifikasikan
pengamatan baru menggunakan beberapa bentuk rata-rata
prediksi model-model ini.

GAMBAR 5.4

Mereka dikenal karena sering mengungguli model individual


yang membentuk ansambel. Ensemble didasarkan pada
beberapa bentuk keragaman di antara model individual. Ada
banyak bentuk menciptakan keragaman ini. Hal ini dapat
melalui pengaturan parameter model yang berbeda atau
dengan sampel observasi yang berbeda yang digunakan untuk
mendapatkan masing-masing model, misalnya. Alternatif lain
adalah menggunakan prediktor yang berbeda untuk setiap
model dalam ansambel. Ansambel yang kita gunakan di bagian
ini mengikuti strategi terakhir ini. Pendekatan ini bekerja lebih
baik jika kolam prediktor dari mana kita memperoleh set yang
berbeda sangat berlebihan. Kami akan berasumsi bahwa ada
beberapa tingkat redundansi pada rangkaian fitur yang
dihasilkan oleh ANOVA filter. Kami akan mencoba memodelkan
redundansi ini dengan mengelompokkan variabel-variabelnya.
Metode cluster didasarkan pada jarak, dalam hal ini jarak antar
variabel. Dua variabel mendekati (dan dengan demikian
serupa) satu sama lain jika nilai ekspresi mereka di 94 sampel
serupa. Dengan mengelompokkan variabel, kita berharap
untuk menemukan kelompok gen yang serupa satu sama lain.
Paket Hmisc berisi sebuah fungsi yang menggunakan algoritma
clustering hirarkis untuk mengelompokkan variabel dataset.
Nama fungsi ini adalah varclus (). Kita bisa menggunakannya
sebagai berikut:

> library(Hmisc)
> vc <- varclus(t(es))
> clus30 <- cutree(vc$hclust, 30)
> table(clus30)

AKAN KELUAR HASILNYA!

Kami menggunakan fungsi cutree () untuk mendapatkan


clustering yang dibentuk oleh 30 kelompok variabel. Kami
kemudian memeriksa berapa banyak variabel (gen) yang
termasuk dalam setiap cluster. Berdasarkan clustering ini kita
bisa membuat set prediktor dengan memilih secara acak satu
variabel dari setiap cluster. Alasannya adalah bahwa anggota
dari cluster yang sama akan mirip satu sama lain dan dengan
demikian entah bagaimana berlebihan.

Fungsi berikut memfasilitasi proses dengan menghasilkan satu


set variabel melalui pengambilan sampel secara acak dari
jumlah cluster yang dipilih (default ke 30):

> getVarsSet <-


function(cluster,nvars=30,seed=NULL,verb=F)
+{
+ if (!is.null(seed)) set.seed(seed)
+
+ cls <- cutree(cluster,nvars)
+ tots <- table(cls)
+ vars <- c()
+ vars <- sapply(1:nvars,function(clID)
+{
+ if (!length(tots[clID])) stop('Empty cluster! (',clID,')')
+ x <- sample(1:tots[clID],1)
+ names(cls[cls==clID])[x]
+ })
+ if (verb) structure(vars,clusMemb=cls,clusTots=tots)
+ else vars
+ }
> getVarsSet(vc$hclust)

MAKA AKAN ADA HASILNYA!

> getVarsSet(vc$hclust)

MAKA AKAN ADA HASILNYA!

Setiap kali kita memanggil fungsi ini, kita akan mendapatkan


satu set variabel "baru". Dengan menggunakan fungsi ini,
mudah untuk menghasilkan sekumpulan dataset yang dibentuk
oleh prediktor yang berbeda dan kemudian mendapatkan
model menggunakan masing-masing rangkaian ini. Pada
Bagian 5.4 kita menyajikan sebuah fungsi yang memperoleh
ansambel dengan menggunakan strategi ini.

PS: #Bacaan lebih lanjut tentang pemilihan fitur


Pemilihan fitur adalah topik yang dipelajari dengan baik di
banyak disiplin ilmu. Gambaran umum dan rujukan pekerjaan
di bidang data mining dapat diperoleh di Liu dan Motoda
(1998), Chizi dan Maimon (2005), dan Wettschereck et al.
(1997).

5.4 Memprediksi Kelainan Cytogenetic


Bagian ini menjelaskan usaha pemodelan kami untuk tugas
memprediksi jenis kelainan sitogenetika dari kasus B-sel ALL.

5.4.1 Mengikuti Tugas Prediksi


Masalah data mining yang kita hadapi adalah tugas prediktif.
Lebih tepatnya, ini adalah masalah klasifikasi. Klasifikasi
prediktif terdiri dari model yang dirancang dengan tujuan
meramalkan nilai variabel target nominal
menggunakan informasi tentang seperangkat prediktor. Model
diperoleh dengan menggunakan seperangkat pengamatan
berlabel dari fenomena yang diteliti, yaitu observasi yang
dengannya kita mengetahui nilai prediktor dan variabel target.
Dalam studi kasus ini, variabel target kami adalah jenis
kelainan sitogenetik sampel B-sel ALL. Dalam dataset terpilih
kami, variabel ini akan mengambil empat nilai yang mungkin:
ALL1 / AF4, BCR / ABL, E2A / PBX1, dan NEG. Mengenai
prediktor, mereka akan terdiri dari satu set gen terpilih yang
telah kita ukur nilai ekspresi. Dalam upaya pemodelan kami,
kami akan melakukan percobaan dengan rangkaian gen pilihan
yang berbeda, berdasarkan pada studi yang dijelaskan pada
Bagian 5.3. Ini berarti bahwa jumlah prediktor (fitur) akan
bervariasi tergantung pada hal ini percobaan. Mengenai jumlah
pengamatan, mereka akan terdiri dari 94 kasus B-sel ALL.

5.4.2 Metrik Evaluasi


Tugas prediksi adalah masalah klasifikasi kelas multi-kelas.
Model klasifikasi prediktif biasanya dievaluasi dengan
menggunakan tingkat kesalahan atau komplemennya,
keakuratannya. Namun demikian, ada beberapa alternatif,
seperti area di bawah kurva ROC, pasang langkah-langkah
(misalnya, ketepatan dan recall), dan juga ukuran akurasi
perkiraan probabilitas kelas (mis., Skor Brier). Paket ROCR
memberikan contoh tindakan yang baik.
Pemilihan metrik evaluasi untuk suatu masalah tertentu sering
kali bergantung pada tujuan pengguna. Ini adalah keputusan
sulit yang sering terganggu oleh informasi yang tidak lengkap
seperti tidak adanya informasi tentang biaya salah klasifikasi
kelas saya dengan kelas j (dikenal sebagai biaya klasifikasi
yang salah).
Dalam studi kasus kami, kami tidak memiliki informasi
mengenai biaya klasifikasi yang salah, dan oleh karena itu
kami berasumsi bahwa sama-sama serius untuk salah
mengartikan, misalnya, mutasi E2A / PBX1 sebagai NEG,
karena salah mengklasifikasikan ALL1 / AF4 sebagai BCR / ABL.
Selain itu, kami memiliki lebih dari dua kelas, dan generalisasi
analisis ROC untuk masalah multi kelas tidak begitu mapan,
belum lagi kekurangan terakhir yang ditemukan dalam
penggunaan area di bawah kurva ROC (Hand, 2009). Dalam
konteks ini, kita akan menggunakan keakuratan standar yang
diukur sebagai:
dimana N adalah ukuran sampel uji, dan L0 = 1 () adalah
fungsi kerugian yang didefinisikan sebagai:

5.4.3 Prosedur Eksperimental


Jumlah pengamatan dari dataset yang akan kita gunakan agak
kecil: 94 kasus. Dalam konteks ini, metodologi eksperimental
yang lebih memadai untuk mendapatkan estimasi tingkat
kesalahan yang dapat diandalkan adalah metode Leave-One-
Out Cross-Validation (LOOCV). LOOCV adalah kasus khusus
metodologi eksperimental cross-validation k-fold yang telah
kita gunakan sebelumnya, yaitu, bila k sama dengan jumlah
pengamatan. Secara singkat, LOOCV terdiri dari perolehan
model N, dimana N adalah ukuran dataset, dan masing-masing
model diperoleh dengan menggunakan kasus N -1 dan diuji
pada pengamatan yang telah ditinggalkan. Dalam paket buku
Anda mungkin menemukan fungsi loocv () yang
mengimplementasikan jenis percobaan ini. Fungsi ini
menggunakan proses yang mirip dengan fungsi lain yang telah
kita gambarkan di bab sebelumnya untuk perbandingan
eksperimental. Berikut adalah ilustrasi kecil penggunaannya
dengan dataset iris:

> data(iris)
> rpart.loocv <- function(form,train,test,...) {
+ require(rpart,quietly=T)
+ m <- rpart(form,train,...)
+ p <- predict(m,test,type='class')
+ c(accuracy=ifelse(p == resp(form,test),100,0))
+ }
> exp <- loocv(learner('rpart.loocv',list()),
+ dataset(Species~.,iris),
+ loocvSettings(seed=1234,verbose=F))

> summary(exp)

MAKA AKAN ADA HASILNYA!


Fungsi loocv () mengambil tiga argumen yang biasa: pelajar,
kumpulan data, dan setting percobaan. Ini mengembalikan
objek loocvRun kelas yang bisa kita gunakan dengan ringkasan
fungsi () untuk mendapatkan hasil percobaan.
Fungsi user-de ned (rpart.loocv () pada contoh di atas) harus
menjalankan pembelajar, menggunakannya untuk
mendapatkan prediksi untuk rangkaian tes, dan
mengembalikan vektor dengan statistik evaluasi apa pun yang
ingin kita perkirakan oleh LOOCV. Dalam ilustrasi kecil ini
hanya menghitung keakuratan pelajar. Kita harus ingat bahwa
di LOOCV set tes dibentuk oleh pengamatan tunggal pada
setiap iterasi proses eksperimen sehingga dalam kasus ini kita
hanya perlu memeriksa apakah prediksi sama dengan nilai
sebenarnya.

5.4.4 Teknik Pemodelan


Seperti yang telah dibahas sebelumnya, kita akan
menggunakan tiga dataset yang berbeda di prediktor yang
digunakan. Satu akan memiliki semua gen yang dipilih oleh tes
ANOVA, sementara dua lainnya akan memilih 30 dari gen ini.
Semua dataset akan berisi 94 kasus B-sel ALL. Dengan
pengecualian variabel target, semua informasi bersifat
numerik.

Untuk menangani masalah ini, kami telah memilih tiga teknik


pemodelan yang berbeda. Dua di antaranya telah digunakan
sebelumnya dalam buku ini. Mereka adalah hutan acak dan
mendukung mesin vektor (SVM). Mereka dikenali sebagai
beberapa metode prediksi o-the-shelf terbaik. Algoritma ketiga
kita
akan mencoba masalah ini baru. Ini adalah metode yang
didasarkan pada jarak antara pengamatan, yang dikenal
sebagai tetangga terdekat k.

Penggunaan Random Forest dimotivasi oleh fakta bahwa model


ini sangat memadai untuk menangani masalah dengan
sejumlah besar fitur. Properti ini berasal dari algoritma yang
digunakan oleh metode ini (lihat Bagian 5.4.4.1) yang secara
acak memilih himpunan bagian dari kumpulan fitur lengkap
suatu masalah. Sehubungan dengan penggunaan tetangga k-
terdekat, motivasi terletak pada asumsi bahwa sampel dengan
mutasi yang sama harus memiliki tanda tangan gen yang
serupa, "yaitu, seharusnya memiliki nilai ekspresi yang sama
pada gen yang kami gunakan untuk menggambarkan mereka.
Validitas asumsi ini sangat bergantung pada gen yang dipilih
untuk menggambarkan sampel. Yakni, mereka harus memiliki
sifat diskriminasi yang baik di antara mutasi yang berbeda.
Seperti yang akan kita lihat pada Bagian 5.4.4.2, metode
tetangga terdekat k bekerja dengan menilai kesamaan antara
kasus, dan karena itu tampaknya memadai untuk asumsi ini.
Akhirnya, penggunaan SVM hanya dilakukan dengan tujuan
untuk mencoba menjajaki hubungan nonlinear yang mungkin
ada antara ekspresi gen dan kelainan sitogenetika.

SVM dijelaskan pada Bagian 3.4.2.2 (halaman 127). Model


sangat nonlinear yang dapat digunakan pada masalah regresi
dan klasifikasi. Sekali lagi, di antara implementasi SVM yang
ada di R, kita akan menggunakan fungsi svm () dari paket
e1071.

5.4.4.1 Random Forests

ISINYA PENGERTIAN RANDOM FOREST

5.4.4.2 k-Nearest Neighbors

ISINYA PENGERTIAN k-NEAREST NEIGHBORS

Pilihan jumlah tetangga (k) juga merupakan parameter penting


dari metode ini. Nilai yang sering termasuk angka di himpunan
f1; 3; 5; 7; 11g, tapi jelas ini hanya heuristik. Namun, kita
dapat mengatakan bahwa nilai k yang lebih besar harus
dihindari karena ada risiko menggunakan kasus yang sudah
jauh dari uji kasus. Jelas, ini tergantung dari kepadatan data
pelatihan. Kumpulan data yang terlalu jarang menimbulkan
lebih banyak risiko ini. Seperti halnya model pembelajaran
lainnya, pengaturan parameter "ideal" dapat diperkirakan
melalui beberapa metodologi eksperimental.
Di R, kelas paket (Venables dan Ripley, 2002) mencakup fungsi
knn () yang mengimplementasikan gagasan ini. Berikut adalah
contoh ilustratif penggunaannya pada dataset iris:

> library(class)
> data(iris)
> idx <- sample(1:nrow(iris), as.integer(0.7 * nrow(iris)))
> tr <- iris[idx, ]
> ts <- iris[-idx, ]
> preds <- knn(tr[, -5], ts[, -5], tr[, 5], k = 3)
> table(preds, ts[, 5])

AKAN ADA HASILNYA!

Seperti yang Anda lihat, fungsi knn () menggunakan


antarmuka yang tidak standar. Argumen pertama adalah
kumpulan pelatihan dengan pengecualian kolom variabel
target. Argumen kedua adalah test set, lagi tanpa target.
Argumen ketiga mencakup nilai target data pelatihan.
Akhirnya, ada beberapa parameter lain yang mengendalikan
metode ini, di antaranya parameter k menentukan jumlah
tetangga. Kita dapat membuat fungsi kecil yang
memungkinkan penggunaan metode ini dalam bentuk
antarmuka tipe-standar yang lebih standar:

> kNN <- function(form, train, test, norm = T, norm.stats =


NULL,
+ ...) {
+ require(class, quietly = TRUE)
+ tgtCol <- which(colnames(train) == as.character(form[[2]]))
+ if (norm) {
+ if (is.null(norm.stats))
+ tmp <- scale(train[, -tgtCol], center = T, scale = T)
+ else tmp <- scale(train[, -tgtCol], center = norm.stats[[1]],
+ scale = norm.stats[[2]])
+ train[, -tgtCol] <- tmp
+ ms <- attr(tmp, "scaled:center")
+ ss <- attr(tmp, "scaled:scale")
+ test[, -tgtCol] <- scale(test[, -tgtCol], center = ms,
+ scale = ss)
+}
+ knn(train[, -tgtCol], test[, -tgtCol], train[, tgtCol],
+ ...)
+ }
> preds.norm <- kNN(Species ~ ., tr, ts, k = 3)
> table(preds.norm, ts[, 5])

AKAN ADA HASILNYA!

> preds.notNorm <- kNN(Species ~ ., tr, ts, norm = F, k = 3)


> table(preds.notNorm, ts[, 5])

AKAN ADA HASILNYA!

Fungsi ini memungkinkan pengguna untuk menunjukkan


apakah data harus dinormalisasi sebelum panggilan ke fungsi
knn (). Hal ini dilakukan melalui parameter norm. Pada contoh
di atas, Anda melihat dua contoh penggunaannya. Alternatif
ketiga adalah memberikan sentralitas dan menyebarkan
statistik sebagai daftar dengan dua komponen dalam argumen
norm.stats. Jika ini tidak dilakukan, fungsinya akan
menggunakan sarana sebagai estimasi sentralitas dan standar
deviasi sebagai statistik penyebaran. Dalam percobaan kami,
kami akan menggunakan fasilitas ini untuk memanggil fungsi
tersebut dengan median dan IQR. Fungsi kNN () sebenarnya
termasuk dalam paket buku kami sehingga Anda tidak perlu
mengetik kodenya.

PS : #Bacaan lebih lanjut tentang tetangga k-terdekat


Referensi standar pada jenis metode ini adalah karya Cover dan Hart
(1967). Gambaran yang bagus dapat ditemukan dalam karya Aha et al.
(1991) dan Aha (1997). Analisis lebih dalam dapat ditemukan dalam tesis
PhD oleh Aha (1990) dan Wettschereck (1994). Perspektif pembelajaran
yang malas, namun terkait, adalah penggunaan model lokal yang disebut
(Nadaraya, 1964; Watson, 1964). Referensi yang bagus mengenai area
luas ini adalah Atkeson dkk. (1997) dan Cleveland dan Loader (1996).

5.4.5 Membandingkan Model

Bagian ini menjelaskan proses yang telah kita gunakan untuk


membandingkan model yang dipilih dengan menggunakan
metodologi eksperimen LOOCV.
Pada Bagian 5.3, kita telah melihat contoh beberapa metode
pemilihan fitur. Kami telah menggunakan beberapa filter dasar
untuk menghilangkan gen dengan varians rendah dan juga
probe kontrol. Selanjutnya, kami menerapkan metode
berdasarkan distribusi terkondisi dari tingkat ekspresi
sehubungan dengan variabel target. Metode ini didasarkan
pada uji statistik ANOVA. Akhirnya, dari hasil pengujian ini
kami mencoba untuk lebih mengurangi jumlah gen yang
menggunakan hutan acak dan pengelompokan variabel.
Dengan pengecualian dari filter sederhana pertama, semua
metode lain bergantung pada nilai variabel target. Kita
mungkin mempertanyakan apakah tahap penyaringan ini harus
dilakukan sebelum percobaan perbandingan, atau jika kita
harus mengintegrasikan langkah-langkah ini ke dalam proses
yang dibandingkan. Jika tujuan kami adalah untuk
mendapatkan estimasi tak terduga akurasi klasifikasi
metodologi kami pada sampel baru, maka kita harus
memasukkan ini tahap penyaringan sebagai bagian dari proses
data mining yang dievaluasi dan dibandingkan. Tidak
melakukannya berarti bahwa perkiraan yang kita dapatkan bias
oleh kenyataan bahwa gen yang digunakan untuk
mendapatkan model dipilih menggunakan informasi dari set tes
Dalam fetch, jika kita menggunakan semua dataset untuk
menentukan gen mana yang akan digunakan, maka kita
menggunakan informasi mengenai proses seleksi ini yang
seharusnya tidak diketahui karena merupakan bagian dari data
pengujian. Dalam konteks ini, kita akan mencakup bagian dari
tahap penyaringan dalam fungsi user-dened yang
menerapkan model yang akan kita bandingkan.

Untuk setiap iterasi proses LOOCV, sebuah proses pemilihan


fitur, dilakukan, sebelum konstruksi model prediktif, dengan
hanya menggunakan data pelatihan yang disediakan oleh
rutinitas LOOCV. Langkah penyempitan sederhana awal akan
dilakukan sebelum perbandingan LOOCV. Gen yang dikeluarkan
oleh langkah ini tidak akan berubah jika kita melakukannya
dalam proses LOOCV. Probe kontrol selalu akan dihapus, dan
gen yang dikeluarkan karena varians yang sangat rendah
kemungkinan besar akan tetap hilang jika satu sampel tidak
diberikan (itulah yang Proses LOOCV dilakukan pada setiap
iterasi).
Sekarang kita akan menjelaskan fungsi user-de ned yang perlu
dipasok ke rutinitas LOOCV untuk menjalankan eksperimen.
Untuk setiap teknik pemodelan, kami akan mengevaluasi
beberapa varian. Alternatif ini tidak hanya pada beberapa
parameter teknik itu sendiri, tapi juga pada proses pemilihan
fitur yang digunakan. Daftar berikut mencakup informasi
tentang varian ini untuk setiap teknik pemodelan:

> vars <- list()


> vars$randomForest <- list(ntree=c(500,750,100),
+ mtry=c(5,15,30),
+ fs.meth=list(list('all'),
+ list('rf',30),
+ list('varclus',30,50)))
> vars$svm <- list(cost=c(1,100,500),
+ gamma=c(0.01,0.001,0.0001),
+ fs.meth=list(list('all'),
+ list('rf',30),
+ list('varclus',30,50)))
> vars$knn <- list(k=c(3,5,7,11),
+ norm=c(T,F),
+ fs.meth=list(list('all'),
+ list('rf',30),
+ list('varclus',30,50)))

Daftar ini memiliki tiga komponen, satu untuk masing-masing


algoritma dibandingkan. Untuk setiap model daftar mencakup
parameter yang harus digunakan. Untuk masing-masing
parameter, satu set nilai diberikan. Kombinasi dari semua nilai
yang mungkin ini akan menentukan varian sistem yang
berbeda. Mengenai hutan acak, kita akan mempertimbangkan
tiga nilai untuk parameter ntree yang menentukan jumlah
pohon dalam ansambel, dan tiga nilai untuk parameter mtry
yang menentukan ukuran subset acak dari fitur yang akan
digunakan. saat menentukan tes untuk setiap simpul pohon.
Parameter terakhir (fs.meth) memberikan alternatif untuk
tahap pemilihan fitur yang kami jelaskan di bawah ini.
Sehubungan dengan SVM, kami mempertimbangkan tiga nilai
yang berbeda untuk parameter biaya dan gamma. Akhirnya,
untuk tetangga k-terdekat, kita mencoba empat nilai untuk k
dan dua nilai untuk parameter yang menentukan apakah data
prediktor dinormalisasi atau tidak.

Seperti disebutkan di atas, untuk masing-masing peserta didik


kita mempertimbangkan tiga set fitur alternatif (parameter
fs.meth). Alternatif pertama (daftar ('semua')) menggunakan
semua fitur yang dihasilkan dari uji statistik ANOVA. Yang
kedua (daftar ('rf', 30)) memilih 30 gen dari himpunan yang
diperoleh dengan uji ANOVA, dengan menggunakan rangking
fitur yang diperoleh dengan hutan acak. Alternatif terakhir
memilih 30 gen dengan menggunakan strategi anjungan
clustering variabel yang telah kami jelaskan sebelumnya dan
kemudian membangun ansambel dengan menggunakan 50
model dengan 30 prediktor yang dipilih secara acak dari
kelompok variabel. Untuk menerapkan gagasan ensemble
berdasarkan rangkaian variabel yang berbeda yang dihasilkan
oleh pengelompokan gen, kami telah menciptakan fungsi
berikut:

> varsEnsembles <- function(tgt,train,test,


+ varsSets,
+ baseLearner,blPars,
+ verb=F)
+{
+ preds <-
matrix(NA,ncol=length(varsSets),nrow=NROW(test))
+ for(v in seq(along=varsSets)) {
+ if (baseLearner=='knn')
+ preds[,v] <- knn(train[,-which(colnames(train)==tgt)],
+ test[,-which(colnames(train)==tgt)],
+ train[,tgt],blPars)
+ else {
+ m <- do.call(baseLearner,
+ c(list(as.formula(paste(tgt,
+ paste(varsSets[[v]],
+ collapse='+'),
+ sep='~')),
+ train[,c(tgt,varsSets[[v]])]),
+ blPars)
+)
+ if (baseLearner == 'randomForest')
+ preds[,v] <- do.call('predict',
+ list(m,test[,c(tgt,varsSets[[v]])],
+ type='response'))
+ else
+ preds[,v] <- do.call('predict',
+ list(m,test[,c(tgt,varsSets[[v]])]))
+ }
+ }
+ ps <- apply(preds,1,function(x)
+ levels(factor(x))[which.max(table(factor(x)))])
+ ps <- factor(ps,
+ levels=1:nlevels(train[,tgt]),
+ labels=levels(train[,tgt]))
+ if (verb) structure(ps,ensemblePreds=preds) else ps
+ }

Argumen pertama dari fungsi ini adalah nama dari variabel


target, set pelatihan, dan rangkaian tes. Argumen berikutnya
(varsSets) adalah daftar yang berisi kumpulan nama variabel
(cluster yang diperoleh) dari mana kita harus mengambil
sampel sebuah variabel untuk menghasilkan prediktor masing-
masing anggota ensambel. Akhirnya, kita memiliki dua
argumen (baseLearner dan blPars) itu berikan nama fungsi
yang menerapkan pembelajar untuk digunakan pada setiap
anggota ansambel dan masing-masing daftar argumen
pembelajaran. Hasil dari fungsi tersebut adalah himpunan
prediksi ansambel untuk set tes yang diberikan. Prediksi ini
diperoleh dengan mekanisme pemungutan suara di antara
anggota ensambel. Perbedaan antara anggota ansambel hanya
terletak pada prediktor yang digunakan, yang ditentukan oleh
parameter varsSets. Hasil ini dihasilkan dari proses
pengelompokan variabel, seperti yang disebutkan dalam
Bagian 5.3.4.

Dengan adanya kesamaan tugas yang harus dilakukan oleh


masing-masing peserta didik, kami telah menciptakan sebuah
fungsi pemodelan single user-dened yang akan diterima
sebagai salah satu parameter pembelajar yang akan
digunakan. Fungsi generikModel () yang kami presentasikan di
bawah menerapkan gagasan ini:
> genericModel <- function(form,train,test,
+ learner,
+ fs.meth,
+ ...)
+{
+ cat('=')
+ tgt <- as.character(form[[2]])
+ tgtCol <- which(colnames(train)==tgt)
+
+ # Anova filtering
+ f <- Anova(train[,tgt],p=0.01)
+ ff <- filterfun(f)
+ genes <- genefilter(t(train[,-tgtCol]),ff)
+ genes <- names(genes)[genes]
+ train <- train[,c(tgt,genes)]
+ test <- test[,c(tgt,genes)]
+ tgtCol <- 1
+
+ # Specific filtering
+ if (fs.meth[[1]]=='varclus') {
+ require(Hmisc,quietly=T)
+ v <- varclus(as.matrix(train[,-tgtCol]))
+ VSs <- lapply(1:fs.meth[[3]],function(x)
+ getVarsSet(v$hclust,nvars=fs.meth[[2]]))
+ pred <- varsEnsembles(tgt,train,test,VSs,learner,list(...))
+
+ } else {
+ if (fs.meth[[1]]=='rf') {
+ require(randomForest,quietly=T)
+ rf <- randomForest(form,train,importance=T)
+ imp <- importance(rf)
+ imp <- imp[,ncol(imp)-1]
+ rf.genes <-
names(imp)[order(imp,decreasing=T)[1:fs.meth[[2]]]]
+ train <- train[,c(tgt,rf.genes)]
+ test <- test[,c(tgt,rf.genes)]
+}
+
+ if (learner == 'knn')
+ pred <- kNN(form,
+ train,
+ test,
+ norm.stats=list(rowMedians(t(as.matrix(train[,-tgtCol]))),
+ rowIQRs(t(as.matrix(train[,-tgtCol])))),
+ ...)
+ else {
+ model <- do.call(learner,c(list(form,train),list(...)))
+ pred <- if (learner != 'randomForest') predict(model,test)
+ else predict(model,test,type='response')
+ }
+
+ }
+
+ c(accuracy=ifelse(pred == resp(form,test),100,0))
+ }

Fungsi user-de ned ini akan dipanggil dari dalam rutinitas


LOOCV untuk setiap iterasi proses. Eksperimen dengan semua
varian ini pada data microarray akan memakan waktu lama
untuk menyelesaikannya.4 Dalam konteks ini, kami tidak
menyarankan Anda menjalankan eksperimen berikut kecuali
Anda mengetahui kendala temporal ini. Objek yang dihasilkan
dari percobaan ini tersedia di halaman Web buku sehingga
Anda dapat melanjutkan analisis lainnya tanpa harus
menjalankan semua eksperimen ini. Kode untuk dijalankan
percobaan lengkap adalah sebagai berikut:

> require(class,quietly=TRUE)
> require(randomForest,quietly=TRUE)
> require(e1071,quietly=TRUE)
> load('myALL.Rdata')
> es <- exprs(ALLb)
> # simple filtering
> ALLb <- nsFilter(ALLb,
+ var.func=IQR,var.cutoff=IQR(as.vector(es))/5,
+ feature.exclude="^AFFX")
> ALLb <- ALLb$eset
> # the dataset
> featureNames(ALLb) <- make.names(featureNames(ALLb))
> dt <- data.frame(t(exprs(ALLb)),Mut=ALLb$mol.bio)
> DSs <- list(dataset(Mut ~ .,dt,'ALL'))
> # The learners to evaluate
> TODO <- c('knn','svm','randomForest')
> for(td in TODO) {
+ assign(td,
+ experimentalComparison(
+ DSs,
+ c(
+ do.call('variants',
+ c(list('genericModel',learner=td),
+ vars[[td]],
+ varsRootName=td))
+ ),
+ loocvSettings(seed=1234,verbose=F)
+ )
+ )
+ save(list=td,file=paste(td,'Rdata',sep='.'))
+ }

Kode ini menggunakan fungsi experimentalComparison ()


untuk menguji semua varian menggunakan metode LOOCV.
Kode menggunakan varian fungsi () untuk menghasilkan
semua objek pelajar dari varian yang disediakan oleh
komponen daftar vars yang telah kita lihat di atas. Masing-
masing varian ini akan dievaluasi dengan proses LOOCV. Hasil
dari kode tersebut adalah tiga objek compExp dengan nama
knn, svm, dan randomForest. Masing-masing benda tersebut
berisi hasil varian dari masing-masing pelajar. Semuanya
tersimpan dalam file dengan nama yang sama dengan objek
dan ekstensi ".Rdata". Ini adalah file yang tersedia di situs Web
buku, jadi jika Anda belum menjalankan semua eksperimen ini,
Anda dapat mendownloadnya ke komputer Anda, dan
memasukkannya ke R menggunakan fungsi load () (yang
menunjukkan nama masing-masing file sebagai argumen):

> load("knn.Rdata")
> load("svm.Rdata")
> load("randomForest.Rdata")

Hasil dari semua varian pelajar ada di masing-masing objek.


Misalnya, jika Anda ingin melihat varian SVM mana yang
terbaik, Anda mungkin akan mengeluarkannya :
> rankSystems(svm, max = T)

AKAN ADA HASILNYA!

Fungsi rankSystems () mengambil objek kelas compExp dan


memperoleh varian berkinerja terbaik untuk setiap statistik
yang diperkirakan dalam proses eksperimen. Secara default,
fungsi mengasumsikan bahwa "terbaik" berarti nilai yang lebih
kecil. Dalam hal statistik yang harus dimaksimalkan, seperti
akurasi, kita bisa menggunakan parameter max seperti yang
kita lakukan di atas. Agar memiliki keseluruhan perspektif dari
semua percobaan, kita bisa bergabung dengan tiga objek:

> all.trials <- join(svm, knn, randomForest, by = "variants")

Dengan objek compExp yang dihasilkan, kita dapat memeriksa


keseluruhan skor terbaik dari percobaan kami:

> rankSystems(all.trials, top = 10, max = T)

AKAN ADA HASILNYA!

Skor teratas diperoleh dengan varian metode tetangga k-


terdekat. Mari kita periksa karakteristiknya:

> getVariant("knn.v2", all.trials)

AKAN ADA HASILNYA!

Varian ini menggunakan 30 gen yang disaring oleh hutan acak,


lima tetangga dan normalisasi nilai ekspresi gen. Juga menarik
untuk mengamati bahwa di antara sepuluh nilai teratas, hanya
yang terakhir ("svm.v23") tidak menggunakan 30 gen yang
dilapisi dengan hutan acak. Model terbaik kesepuluh ini
menggunakan semua gen yang dihasilkan dari pelepasan
ANOVA. Namun, kita harus mencatat bahwa nilai akurasi di
antara sepuluh model teratas ini agak mirip. Dengan demikian,
mengingat bahwa kita memiliki 94 kasus uji, keakuratan model
terbaik berarti membuat 11 kesalahan, sedangkan model pada
posisi kesepuluh membuat 13 kesalahan.
Mungkin menarik untuk mengetahui kesalahan mana yang
dibuat oleh model, misalnya model terbaik. Matriks
kebingungan (lihat halaman 120) menyediakan jenis informasi
ini. Untuk mendapatkan matriks kebingungan kita perlu tahu
apa prediksi sebenarnya dari model tersebut. Fungsi user-de
ned kita tidak menghasilkan kelas yang diprediksi, hanya
akurasi yang dihasilkan. Akibatnya, objek compExp tidak
memiliki informasi ini. Jika kita membutuhkan informasi
tambahan semacam ini, di atas statistik evaluasi yang diukur
pada setiap iterasi proses eksperimen, kita perlu membuat
fungsi pengguna kembali mengembalikannya ke rutinitas
perbandingan eksperimental. Ini disiapkan untuk menerima
dan menyimpan informasi tambahan ini, seperti yang telah kita
lihat di Bab 4. Mari kita bayangkan bahwa kita ingin
mengetahui prediksi model terbaik pada setiap iterasi proses
LOOCV. Kode berikut memungkinkan kita memperoleh
informasi tersebut. Kode ini berfokus pada model terbaik
namun harus mudah disesuaikan dengan model lainnya.

> bestknn.loocv <- function(form,train,test,...) {


+ require(Biobase,quietly=T)
+ require(randomForest,quietly=T)
+ cat('=')
+ tgt <- as.character(form[[2]])
+ tgtCol <- which(colnames(train)==tgt)
+ # Anova filtering
+ f <- Anova(train[,tgt],p=0.01)
+ ff <- filterfun(f)
+ genes <- genefilter(t(train[,-tgtCol]),ff)
+ genes <- names(genes)[genes]
+ train <- train[,c(tgt,genes)]
+ test <- test[,c(tgt,genes)]
+ tgtCol <- 1
+ # Random Forest filtering
+ rf <- randomForest(form,train,importance=T)
+ imp <- importance(rf)
+ imp <- imp[,ncol(imp)-1]
+ rf.genes <- names(imp)[order(imp,decreasing=T)[1:30]]
+ train <- train[,c(tgt,rf.genes)]
+ test <- test[,c(tgt,rf.genes)]
+ # knn prediction
+ ps <- kNN(form,train,test,norm=T,
+ norm.stats=list(rowMedians(t(as.matrix(train[,-tgtCol]))),
+ rowIQRs(t(as.matrix(train[,-tgtCol])))),
+ k=5,...)
+ structure(c(accuracy=ifelse(ps == resp(form,test),100,0)),
+ itInfo=list(ps)
+ )
+ }
> resTop <- loocv(learner('bestknn.loocv',pars=list()),
+ dataset(Mut~.,dt),
+ loocvSettings(seed=1234,verbose=F),
+ itsInfo=T)

Fungsi bestknn.loocv () pada dasarnya adalah spesialisasi dari


fungsi generikModel () yang telah kita lihat sebelumnya,
namun berfokus pada tetangga terdekat 5 dengan penyaringan
dan normalisasi hutan secara acak menggunakan median dan
IQR. Sebagian besar kode sama dengan fungsi genericModel (),
satu-satunya pengecualian menjadi hasil yang dikembalikan.
Fungsi baru ini, alih-alih mengembalikan vektor dengan
keakuratan model, mengembalikan sebuah struktur. Kita telah
melihat sebelumnya bahwa struktur adalah objek R dengan
atribut tambahan. Fungsi struktur () memungkinkan kita
membuat objek yang "diperkaya" dengan melampirkan
seperangkat atribut. Dalam kasus fungsi user-de ned kita, jika
kita ingin mengembalikan beberapa informasi tambahan ke
fungsi loocv (), kita harus melakukannya pada atribut yang
bernama itInfo. Pada fungsi di atas kita menggunakan atribut
ini untuk mengembalikan prediksi model yang sebenarnya.
Fungsi loocv () menyimpan informasi ini untuk setiap iterasi
proses eksperimen. Agar penyimpanan ini bisa berlangsung,
kita perlu memanggil fungsi loocv () dengan parameter
opsionalnya yaituInfo = T. Ini memastikan bahwa apapun yang
dikembalikan sebagai atribut dengan nama itInfo oleh fungsi
user-de ned, maka akan dikumpulkan dalam daftar
dan dikembalikan sebagai atribut bernama itsInfo hasil fungsi
loocv (). Pada akhirnya, kami dapat memeriksa informasi ini
dan dalam hal ini melihat prediksi sebenarnya dari model
terbaik pada setiap iterasi.
Kami dapat memeriksa isi atribut yang berisi informasi yang
diinginkan sebagai berikut (kami hanya menampilkan prediksi
pertama):

> attr(resTop, "itsInfo")[1:4]

AKAN ADA HASILNYA!

Fungsi attr () memungkinkan kita untuk mendapatkan nilai


atribut dari suatu objek R. Seperti yang Anda lihat, atribut
theInfo berisi prediksi setiap iterasi dari proses LOOCV. Dengan
menggunakan informasi ini bersama dengan nilai sebenarnya
dari kelas kumpulan data, kita dapat memperoleh matriks
kebingungan:

> preds <- unlist(attr(resTop, "itsInfo"))


> table(preds, dt$Mut)

AKAN ADA HASILNYA!

Matriks kebingungan dapat digunakan untuk memeriksa jenis


kesalahan yang dibuat model. Sebagai contoh, kita dapat
mengamati bahwa model tersebut dengan benar memprediksi
semua kasus dengan mutasi ALL1 / AF4. Selain itu, kita juga
dapat mengamati bahwa sebagian besar kesalahan model
terdiri dari memprediksi kelas NEG untuk kasus dengan mutasi
tertentu. Namun demikian, sebaliknya juga terjadi dengan
sampel tanpa mutasi, yang salah diprediksi memiliki beberapa
kelainan.

5.5 Ringkasan

Tujuan utama bab ini adalah mengenalkan pembaca pada


sejumlah aplikasi penting data mining yang mendapat banyak
perhatian dari komunitas R: bioinformatika. Dalam konteks ini,
kami menjelajahi beberapa alat dari proyek Bioconductor, yang
menyediakan serangkaian paket R yang khusus untuk jenis
aplikasi ini. Sebagai contoh konkret, kami menangani tugas
prediktif bioinformatika: untuk memperkirakan jenis mutasi
genetik yang terkait dengan sampel pasien dengan leukemia
limfoblastik sel B-sel. Beberapa model klasifikasi diperoleh
berdasarkan informasi mengenai tingkat ekspresi pada
sekumpulan gen yang dihasilkan dari percobaan microarray.
Dalam hal konsep data mining, bab ini berfokus pada hal
utama sebagai berikut topik:

1. Metode pemilihan fitur untuk masalah dengan jumlah


prediktor yang sangat banyak
2. Metode klasifikasi
3. Hutan secara acak
4. k-tetangga terdekat
5. SVM
6. Ensemble menggunakan himpunan titik prediktor yang
berbeda
7. Lakukan uji coba validasi silang

Sehubungan dengan R, kita telah mempelajari beberapa teknik


baru, yaitu,

• Bagaimana menangani data microarray


• Menggunakan tes ANOVA untuk membandingkan mean antar
kelompok data
• Menggunakan hutan acak untuk memilih variabel dalam
masalah klasifikasi
• Mengelompokkan variabel masalah
• Mendapatkan ansambel dengan model yang dipelajari dengan
menggunakan prediktor yang berbeda
• Mendapatkan model neighors terdekat
• Memperkirakan keakuratan model dengan menggunakan
validasi silang keluar satu kali.

Anda mungkin juga menyukai