Cara melakukan transformasi log-rasio isometrik

17

Saya memiliki data tentang perilaku pergerakan (waktu yang dihabiskan untuk tidur, kurang gerak, dan melakukan aktivitas fisik) yang jumlahnya kira-kira 24 (seperti dalam jam per hari). Saya ingin membuat variabel yang menangkap waktu relatif yang dihabiskan dalam masing-masing perilaku ini - Saya telah diberitahu bahwa transformasi log-rasio isometrik akan mencapai ini.

Sepertinya saya harus menggunakan fungsi ilr di R, tetapi tidak dapat menemukan contoh aktual dengan kode. Di mana saya memulai?

Variabel yang saya miliki adalah waktu yang dihabiskan untuk tidur, rata-rata waktu santai, rata-rata aktivitas fisik ringan, rata-rata aktivitas fisik sedang, dan rata-rata aktivitas fisik yang kuat. Tidur dilaporkan sendiri, sementara yang lain adalah rata-rata dari hari-hari valid data accelerometer. Jadi untuk variabel-variabel ini, case tidak dijumlahkan dengan tepat 24.

Dugaan saya: Saya bekerja di SAS, tetapi sepertinya R akan lebih mudah digunakan untuk bagian ini. Jadi pertama-tama impor data dengan hanya variabel yang menarik. Kemudian gunakan fungsi acomp (). Maka saya tidak bisa mengetahui sintaks untuk fungsi ilr (). Bantuan apa pun akan sangat dihargai.

Nicole
sumber

Jawaban:

21

Transformasi ILR (Isometrik Log-Rasio) digunakan dalam analisis data komposisi. Setiap pengamatan yang diberikan adalah serangkaian nilai-nilai positif yang menjumlahkan kesatuan, seperti proporsi bahan kimia dalam campuran atau proporsi total waktu yang dihabiskan dalam berbagai kegiatan. Jumlah-ke-kesatuan invarian menyiratkan bahwa meskipun mungkin ada k2 komponen untuk setiap pengamatan, hanya ada k1 nilai fungsional independen. (Secara geometris, pengamatan terletak pada simpleks k1 dimensi dalam k dimensi Euclidean ruang Rk. Sifat simplisial ini dimanifestasikan dalam bentuk segitiga dari sebar data simulasi yang ditunjukkan di bawah ini.)

Biasanya, distribusi komponen menjadi "lebih baik" ketika log diubah. Transformasi ini dapat diskalakan dengan membagi semua nilai dalam pengamatan dengan rata-rata geometrik mereka sebelum mengambil log. (Secara ekuivalen, log data dalam observasi apa pun dipusatkan dengan mengurangkan rata-ratanya). Ini dikenal sebagai transformasi "Centered Log-Ratio", atau CLR. Nilai-nilai yang dihasilkan masih terletak dalam hyperplane di Rk , karena skala menyebabkan jumlah dari log menjadi nol. ILR terdiri dari memilih basis ortonormal untuk hyperplane ini: koordinat k1 dari setiap pengamatan yang diubah menjadi data baru. Setara dengan itu, hyperplane diputar (atau dipantulkan) untuk bertepatan dengan pesawat dengan lenyapnya kthKoordinat th dan satu menggunakankoordinatk1 pertama. (Karena rotasi dan refleksi menjaga jarak, ituisometri, dari mana nama prosedur ini.)

Tsagris, Preston, dan Wood menyatakan bahwa "pilihan standar [matriks rotasi] H adalah sub-matriks Helmert yang diperoleh dengan menghapus baris pertama dari matriks Helmert."

Matriks Helmert dari order k dibangun dengan cara sederhana (lihat Harville hal. 86 misalnya). Baris pertama adalah semua 1 s. Baris berikutnya adalah salah satu yang paling sederhana yang dapat dibuat ortogonal ke baris pertama, yaitu (1,1,0,,0) . Baris j adalah salah satu yang paling sederhana yaitu ortogonal untuk semua baris sebelumnya: entri j1 pertamanya adalah 1 s, yang menjamin itu ortogonal untuk baris 2,3,,j1, Dan yang jth masuk diatur ke 1j untuk membuatnya ortogonal ke baris pertama (yaitu, entri yang harus berjumlah nol). Semua baris kemudian diubah kembali menjadi satuan panjang.

Di sini, untuk menggambarkan pola, adalah 4×4 Helmert matriks sebelum baris yang telah rescaled:

(1111110011201113).

(Sunting ditambahkan Agustus 2017) Satu aspek yang sangat bagus dari "kontras" ini (yang dibaca baris demi baris) adalah interpretabilitasnya. Baris pertama dijatuhkan, meninggalkan k1 baris tersisa untuk mewakili data. Baris kedua sebanding dengan perbedaan antara variabel kedua dan yang pertama. Baris ketiga sebanding dengan perbedaan antara variabel ketiga dan dua yang pertama. Secara umum, baris j ( 2jk ) mencerminkan perbedaan antara variabel j dan semua yang mendahuluinya, variabel 1,2,,j1. Ini meninggalkan variabel pertama j=1 sebagai "basis" untuk semua kontras. Saya telah menemukan interpretasi ini bermanfaat ketika mengikuti ILR oleh Principal Components Analysis (PCA): memungkinkan pemuatan untuk ditafsirkan, setidaknya secara kasar, dalam hal perbandingan antara variabel asli. Saya telah memasukkan garis ke dalam Rimplementasi di ilrbawah ini yang memberikan variabel output nama yang sesuai untuk membantu dengan interpretasi ini. (Akhir edit.)

Karena Rmenyediakan fungsi contr.helmertuntuk membuat matriks seperti itu (walaupun tanpa penskalaan, dan dengan baris dan kolom dinegasikan dan diubah), Anda bahkan tidak perlu menulis kode (sederhana) untuk melakukannya. Dengan menggunakan ini, saya menerapkan ILR (lihat di bawah). Untuk melatih dan mengujinya, saya menghasilkan 1000 undian independen dari distribusi Dirichlet (dengan parameter 1,2,3,4 ) dan menyusun matriks sebar mereka. Di sini, k=4 .

Gambar 1

Semua titik berumpun di dekat sudut kiri bawah dan mengisi bidang segitiga pada bidang plotnya, sebagaimana karakteristik data komposisi.

ILR mereka hanya memiliki tiga variabel, sekali lagi diplot sebagai sebar scatterplot:

Gambar 2

Ini memang terlihat lebih baik: scatterplots telah memperoleh lebih banyak bentuk "awan elips" yang lebih khas, lebih baik menerima analisis orde kedua seperti regresi linier dan PCA.

01/2

Figure_3

1/2


Generalisasi ini diimplementasikan dalam ilrfungsi di bawah ini. Perintah untuk menghasilkan variabel "Z" ini sederhana

z <- ilr(x, 1/2)

Salah satu keuntungan dari transformasi Box-Cox adalah penerapannya pada pengamatan yang menyertakan nol nyata: masih ditentukan asalkan parameternya positif.

Referensi

Michail T. Tsagris, Simon Preston dan Andrew TA Wood, Suatu transformasi kekuatan berbasis data untuk data komposisi . arXiv: 1106.1451v2 [stat.ME] 16 Jun 2011

David A. Harville, Matriks Aljabar Dari Perspektif Ahli Statistik . Springer Science & Business Media, 27 Jun 2008.


Ini Rkodenya.

#
# ILR (Isometric log-ratio) transformation.
# `x` is an `n` by `k` matrix of positive observations with k >= 2.
#
ilr <- function(x, p=0) {
  y <- log(x)
  if (p != 0) y <- (exp(p * y) - 1) / p       # Box-Cox transformation
  y <- y - rowMeans(y, na.rm=TRUE)            # Recentered values
  k <- dim(y)[2]
  H <- contr.helmert(k)                       # Dimensions k by k-1
  H <- t(H) / sqrt((2:k)*(2:k-1))             # Dimensions k-1 by k
  if(!is.null(colnames(x)))                   # (Helps with interpreting output)
    colnames(z) <- paste0(colnames(x)[-1], ".ILR")
  return(y %*% t(H))                          # Rotated/reflected values
}
#
# Specify a Dirichlet(alpha) distribution for testing.
#
alpha <- c(1,2,3,4)
#
# Simulate and plot compositional data.
#
n <- 1000
k <- length(alpha)
x <- matrix(rgamma(n*k, alpha), nrow=n, byrow=TRUE)
x <- x / rowSums(x)
colnames(x) <- paste0("X.", 1:k)
pairs(x, pch=19, col="#00000040", cex=0.6)
#
# Obtain the ILR.
#
y <- ilr(x)
colnames(y) <- paste0("Y.", 1:(k-1))
#
# Plot the ILR.
#
pairs(y, pch=19, col="#00000040", cex=0.6)
whuber
sumber
1
@Alex Saya tidak mengerti apa yang Anda maksud dengan korelasi "palsu". Ya, variabel-variabel tersebut harus tergantung - tetapi tugas PCA adalah membantu Anda mengkarakterisasi dan mengukur dependensi tersebut. Perhatikan juga, bahwa jumlah CLR tidak konstan (meskipun CLR didasarkan pada nilai yang menjumlahkan ke kesatuan).
whuber
1
@ Alex Mengapa tidak hanya mempelajari output PCA? Jika rumit dan Anda ingin fokus hanya pada dua variabel, maka lakukan PCA dari kedua variabel tersebut. Sebuah sebar dari mereka akan mengungkapkan sifat dan luasnya collinearity.
whuber
1
@Alex Sure - itu sebabnya saya menggunakan scatterplots dalam jawaban ini untuk menggambarkan ILR!
whuber
2
@ Alex Itu kutipan yang menarik. Tampaknya mencerminkan filosofi yang terbang di hadapan EDA (antara lain), yang menunjukkan bahwa ketika seseorang dapat menemukan ekspresi ulang dari variabel yang menghasilkan hubungan yang bermanfaat atau informatif, itu adalah hal yang baik, bukan masalah. Para pendukung EDA (seperti John Tukey) berpendapat bahwa bentuk di mana data awalnya diungkapkan belum tentu bentuk di mana mereka harus dianalisis, sedangkan kutipan ini secara implisit mengandaikan sebaliknya. Saya akan menyerahkan kepada Anda untuk memutuskan pendekatan mana yang lebih bermanfaat.
whuber
1
@Eli Komentar itu dimaksudkan untuk merujuk ke CLR umum. Seperti yang saya tulis di badan jawaban ini, "penskalaan menyebabkan jumlah log menjadi nol."
whuber
5

Untuk kasus penggunaan Anda, mungkin ok untuk hanya skala semuanya menjadi satu. Fakta bahwa angka-angka itu tidak bertambah tepat hingga 24 akan menambah sedikit noise tambahan pada data, tetapi itu tidak seharusnya mengacaukan banyak hal.

RD1D

Selain semua rincian teknis, penting untuk mengetahui cara menafsirkan data yang ditransformasikan dengan benar secara benar. Pada akhirnya, transformasi ilr hanya mengacu pada rasio log kelompok. Tapi itu mendefinisikannya sehubungan dengan beberapa hierarki yang telah ditentukan. Jika Anda mendefinisikan hierarki seperti berikut ini

masukkan deskripsi gambar di sini

setiap variabel yang diubah dapat dihitung sebagai

bi=rsr+slng(Ri)g(Si)

iRiiSiig(...)

Jadi pertanyaan selanjutnya adalah, bagaimana Anda mendefinisikan hierarki variabel Anda? Ini benar-benar terserah Anda, tetapi jika Anda memiliki tiga variabel, tidak ada terlalu banyak kombinasi untuk dipusingkan. Misalnya, Anda bisa mendefinisikan hierarki menjadi

                        /-A
            /(A|B)-----|
-(AB|C)----|            \-B
           |
            \-C

ABC(A|B)A B12lnAB(AB|C)ABC23lnABC ). Jika ada banyak variabel, saya memeriksa beberapa pekerjaan yang dilakukan dengan saldo pokok

Tetapi kembali ke pertanyaan awal Anda, bagaimana Anda bisa menggunakan informasi ini untuk benar-benar melakukan transformasi ilr?

Jika Anda menggunakan R, saya akan checkout paket komposisi

Untuk menggunakan paket itu, Anda harus memahami cara membuat partisi biner sekuensial (SBP), yang merupakan cara Anda mendefinisikan hierarki. Untuk hierarki yang ditentukan di atas, Anda dapat mewakili SBP dengan matriks berikut.

        A  B  C
(A|B)   1 -1  0
(AB|C)  1  1 -1

di mana nilai-nilai positif mewakili variabel-variabel dalam pembilang, nilai-nilai negatif mewakili variabel-variabel dalam penyebut, dan nol mewakili tidak adanya variabel itu dalam neraca. Anda dapat membangun basis ortonormal menggunakanbalanceBase dari SBP yang Anda tetapkan.
Setelah Anda memiliki ini, Anda harus dapat lulus dalam tabel proporsi Anda bersama dengan dasar yang Anda hitung di atas.

Saya akan memeriksa referensi ini untuk definisi saldo asli

mortonjt
sumber
4

Posting di atas menjawab pertanyaan tentang bagaimana membangun sebuah basis ILR dan saldo ILR Anda. Untuk menambah ini, pilihan yang secara dapat meringankan interpretasi hasil Anda.

Anda mungkin tertarik dengan partisi sebagai berikut:

(1) (tidur, tak bergerak | fisik_kegiatan) (2) (tidur | tak bergerak).

Karena Anda memiliki tiga bagian dalam komposisi Anda, Anda akan mendapatkan dua saldo ILR untuk dianalisis. Dengan mengatur partisi seperti di atas, Anda dapat memperoleh saldo yang sesuai dengan "aktif atau tidak" (1) dan "bentuk ketidakaktifan" (2).

Jika Anda menganalisis setiap saldo ILR secara terpisah, misalnya melakukan regresi terhadap waktu-of-hari atau waktu-tahun untuk melihat apakah ada perubahan, Anda dapat menginterpretasikan hasil dalam hal perubahan dalam "aktif atau tidak" dan perubahan dalam "Yang merupakan bentuk tidak aktif".

Jika, di sisi lain, Anda akan melakukan teknik seperti PCA yang memperoleh basis baru dalam ruang ILR, hasil Anda tidak akan tergantung pada pilihan partisi Anda. Ini karena data Anda ada dalam ruang CLR, bidang D-1 ortogonal ke satu vektor, dan keseimbangan ILR adalah pilihan yang berbeda dari sumbu unit-norm untuk menggambarkan posisi data pada bidang CLR.

WashburneAD
sumber