21 Ekim 2013 Pazartesi

Veri Analizinde Uygulanan Adımlar - 7 (Verilerin Temizlenmesi ve Dönüştürülmesi)

Önceki yazımda, sağlıklı verilere nasıl ulaşılabileceği ve elde edilen verilerin de nasıl saklanması gerektiği üzerine birçok noktayı sizinle paylaşmıştım. Bu yazımda ise elde ettiğimiz verilerin nasıl temizlenebileceği ve işlenebileceğine ilişkin temel yaklaşımlardan bahsedeceğim.

Veri analizine ilişkin metinlerde genelde gerektiği kadar anlatılmayan fakat bu işe girmiş istisnasız herkesin karşı karşıya kaldığı bir gerçek vardır: veri -neredeyse hiç bir zaman- temiz değildir. Yani, elimizdeki veriler gerçek verileri içerdiği gibi, analiz sürecini olumsuz olarak etkileyebilecek ve gerçek olmayan verilerle karışmış durumdadır. Bulanık bir suya benzetebilirsiniz bu durumu: olduğu gibi içmeye (analiz etmeye) kalkışırsanız, fayda yerine zarar (yanıltıcı veya eksik sonuçlar) elde edersiniz. Bazı verileri tamamen temizlemek mümkün değildir ancak elinizden geleni yapmalısınız, harcanan bu emeğe değecektir.

Veri temizliğine gerekli önem verilmediğinde nasıl bir durumla karşılaşırız, bunu gerçek bir örnekle anlatarak başlayalım. Bir araştırmacı (tıp doktoru), doktora çalışması esnasında elde ettiği verilerin analizinde benden ücreti karşılığında yardım rica etti. Verinin nasıl elde edildiği hakkında biraz bilgi almaya çalıştım: verinin temiz olduğu ve üstelik normalize de edildiğini söyleyerek, sadece analiz süreci için ücret ödemeyi istediğini belirtti, verinin kalitesine ilişkin herhangi bir çaba harcanmasına gerek olmadığını düşündüğünü söyledi ve bu kısım için bir emek harcanmamasını istedi.. Keşfedici analizler yapmaya başladığımda bazı garipliklerle karşılaştım ancak ısrarla verinin elde edilmesinde bir problem olmadığı söylenince işimi yapmaya devam ettim. Bir regresyon modeli bulmaya çalışıyorduk ancak ortaya bir sonuç çıkmadı, bunun üzerine veri üzerine kafa yormaya başladım. Verinin nasıl elde edildiğini ve hangi normalizasyon yönteminin uygulandığına ilişkin daha detaylı sorular sormaya başladığımda sebep ortaya çıktı: meğer verinin bir kısmı araştırmacı tarafından sistematik olmayan bir şekilde değiştirilmiş (hoşuna gitmeyen büyük değerleri mantıklı gördüğü değerlere indirgemiş!) ve bu da verinin genel yapısını bozduğu için normal şartlarda dahi saptanabilecek basit motifler ortaya çıkamamış! Araştırmacı verilerle oynadığı için de verilerin nasıl elde edildiği üzerine sorduğum soruları geçiştirmek istemiş ki, bu durum ortaya çıkmasın! Yani, zaten kirli olan verilerle oynayarak elindekilerin iyice kirlenmesine neden olmuş. Baktık ki olacak gibi değil, orjinal veri üzerine konuşmaya başladık ve verinin temizlenip nasıl buna uygun bir şekilde analiz edileceğine ilişkin önerilerde bulundum, ve işin başında konuştuğumuz ücretin kalan yarısının ödenmesi durumunda da bu yeni analizleri de ücretsiz olarak yapmayı teklif ettim. Ancak bu uyanık araştırmacı buna yanaşmadı ve hem zamanımın, hem de hak ettiğim ücretin üzerine konarak (ve yeni analiz yaklaşımına ilişkin önerilerimi de can kulağıyla dinleyerek!) telefon ve e-postalarıma cevap vermeyi kesti. Benimle ilgili kısımları bir yana bırakırsak, bu araştırmacı elindeki verileri doktora tezini tamamlamak amacıyla kullanıyordu ve birkaç ay içerisinde doktora tezini aldı; büyük ihtimalle elde etmek istediği sonuca ulaşmak için verilerle oynamaya devam etti. Bu durum ilk düğmeyi yanlış iliklemek gibi; sonrasında her yaptığınız şey bir şekilde yanlış oluyor. Buna benzer durumlar çok da yaygın olmamakla birlikte, dikkat çekici oranda da karşımıza çıkıyor.

Peki, veriyi nasıl temizleriz? Yapmamız gereken ilk şey, verideki gariplikleri saptamak, bunun için de veriyi çeşitli şekillerde görüntülemeniz gerekiyor. Eğer elinizdeki dosya sayılardan oluşuyorsa, histogram ya da boxplot ile çoğu problemli durumu kolayca tespit edebilirsiniz. R programlama dili bu tür hızlı görüntüleme ihtiyaçları için çok pratik; dosyanızı sekme karakteri ile ayrılmış biçimde [tab seperated value] kaydederseniz (Excel tarzı bir çok çizelge yazılımında bu tür kaydetmeye izin verir) read.delim() fonksiyonu ile rahatlıkla dosyanızı okutabilirsiniz ve hist() ve/veya boxplot() fonksiyonları ile de hızlıca verinizi görüntüleyebilirsiniz. İlerleyen yazılarımda R'da veri analizine ilişkin daha detaylı bilgiler yer alıyor olacak. 

Örnek olarak, yakın zamanda indirdiğim sıcaklık verisine bir göz atalım. Bu verinin bir haftalık kısmına ilişkin verileri boxplot() fonksiyonu ile görüntülediğimde yandaki figürü elde ediyorum. İlk gün dışındaki günlerde yer alan ve -50 derecedeki noktalar dikkatinizi çekiyor mu? Veriye dikkatle baktığım zaman, eksik sıcaklık ölçümlerinin yerine -50 değerinin konduğunu gözlemledim; bir nedenden ötürü tüm verilerin sayısal olması gerektiğinden sıcaklığın bu kadar düşmeyeceği varsayılmış ve eksik değerler -50 ile gösterilmiş. Sadece ilk güne bakarsanız bunu farkedemezsiniz, tüm veriyi hızlıca görüntülemeniz gerekir. Peki bu değerleri nasıl temizleriz?

Birçok alternatif arasından iki yaygın yaklaşımdan bahsedebilirim: bunlardan ilki, eksik değer içeren günleri veri analizinden tamamen çıkarmak. Bu şekilde büyük miktarlarda veri kaybedebilirsiniz ancak bazen elinizdeki tek seçenek budur, aksi takdirde bu verilerin faydası zararından büyük olabilir. Bir diğer seçenek ise, eksik verileri o günün ortalama sıcaklığı ile değiştirmektir. Eğer yaptığınız analiz günlük sıcaklık ortalamalarını [mean] göz önüne alıyorsa bu yaklaşım analizinize neredeyse hiç bir zarar vermez, ancak örneğin ortanca [median] değerlerini kullanıyorsanız beklemediğiniz sonuçlarla karşılaşabilirsiniz. 

Buradaki püf nokta, analiz yaklaşımınızın neler içerdiğini çok iyi anlayıp buna uygun bir veri temizleme yöntemi seçmenizdir. Bir diğer nokta da, verinin tekrar düzenlenmesidir. Buna genelde farklı şartlarda elde edilmiş verilerin aynı potada analiz edilebilmesi için başvurulur. Örneğin, PCR deneylerinde kullanılan GAPDH referans geni pipetleme vb. teknik aşamalardaki hataları ortadan kaldırmak için kullanılır. Yani, birinci deneyinizde 1 birim olan GAPDH gen ifade seviyesi [gene expression level] ikinci deneyinizde 2 birime çıkmışsa, ikinci deneydeki diğer tüm gen ifade değerlerini ikiye bölersiniz; böylece bu değişikliğe neden olan teknik hataları ortadan kaldırmış -normalize etmiş- olursunuz (her ne kadar yaygın bir şekilde kullanılıyor olsa da GAPDH geninin referans olarak kullanılmasına ilişkin birçok eleştiri mevcut literatürde, bunu dikkate almanızı öneririm). Örneğin, ilk deneyde MDM2 gen ifade seviyesi 4 birimken, ikinci deneyde de 4 birim çıkmışsa, görünürde bir değişim yoktur. Ancak GAPDH genini referans alarak ikinci deneydeki değerleri düzelttiğinizde MDM2 geninin ifade seviyesi 2 birime düşer. Yani, birinci deneye göre, ikinci deneydeki MDM2 gen ifade miktarı iki kat azalmıştır. Bu da biyolojik bir farklılığa işaret ediyor olabilir ve normalde gözden kaçıracağınız bir durumu tespit etmiş olursunuz.

Yukarıdakine çok benzer bir durum mikrodizi [microarray] deney sonuçları için de geçerlidir. Her bir mikrodizi teknoloji kendi verilerinin sağlıklı bir şekilde kıyaslanabilir hale gelmesi için algoritmalar oluşturmuştur veya oluşturulmasında rol oynamıştır; böylece farklı zamanlarda yapılmış mikrodizi deneyleri dahi aynı anda analiz edilebilmektedir. Yalnız burada da kullanacağınız analiz yöntemleriyle normalizasyon -veya veri düzeltme- yöntemlerinin birbiriyle uyumlu olması büyük önem taşımaktadır. Bir örnek verirsem konunun daha da rahat anlaşılacağını düşünüyorum:

Affymetrix verilerinin normalizasyonunda yaygın olarak kullanılan iki yöntem vardır: MAS5 ve RMA. Literatürdeki birçok deneysel çalışma göstermiştir ki, MAS5 ile normalize edilen veriler korelasyon analizlerinde daha gerçekçi sonuçlar ortaya koymaktadır. Buna karşın amaç, anlatımı anlamlı olarak değişen genleri [differentially expressed genes] tespit etmek olduğunda işin rengi tamamen değişmekte ve bu durumda da RMA yöntemi ile veri normalizasyonu çok daha gerçekçi sonuçların elde edilmesine olanak sağlamaktadır. Analiz yöntemine uygun olmayan bir veri düzeltme yönteminin seçilmesi, normalde rahatlıkla tespit edilebilecek ve biyolojik anlam taşıyan gen ifadesi [gene expression] farklılıklarının gizli kalmasına neden olacaktır. İşin kötüsü, normalde bu farklılıkları tespit edebileceğinizin dahi farkında olmayacağınızdan analizinizi tekrar gözden geçirme ihtiyacı duymayacak olmanızdır. 

Bir diğer sık yapılan veri düzeltme hatası, ilgili yöntemin uygun bir şekilde kullanılmamasıdır. Örneğin, RMA yöntemiyle normalize ettiğiniz verilere yeni bir veri ekleyeceğiniz zaman tüm verileri hep birlikte baştan normalize etmelisiniz. Eğer bu kurala uymazsanız ortaya tamamen hatalı ve birlikte istatistiksel analiz uygulanmaması gereken bir veri yığını çıkar. Maalesef özellikle zaman baskısından dolayı bu tarz hatalarla karşılaşılmaktadır. 

Eğer elinizdeki verileri nasıl normalize edeceğinizi bilmiyorsanız, tavsiye edilebilecek ve çoğu zaman işe yarayan düzeltme yöntemlerinden birisi, değerlerin logaritmasının alınmasıdır. Böylece aşırı uçlardaki değerlerin [outlier values] istatistiksel analizlerinizi mahvetmesinin önüne geçebilir ve bir referans deneye göre diğer değerlerin nasıl artıp azaldığını bölme işlemi yerine çıkarma işlemiyle hesaplayabilirsiniz. Çıkarma işlemi sonucu elde edeceğiniz eksi veya artı değerler değişimin yönünü gösterir ve daha rahat bir şekilde algılanmasını sağlar. Örneğin, 2 kat değişimi bölme işlemini kullandığımızda 2 veya -referansımız değiştiğinde-  0.5  şeklinde ifade ederken, logaritmik ölçekte bunu +1 veya -1 şeklinde daha kolay algılanabilecek bir biçimde gösterebiliriz.

Özetle, elde edilmesi için onca emek ve finansal kaynak sağlanan verilerden mümkün olabilecek en yüksek verimin elde edilebilmesi için veri temizleme ve düzeltme yöntemlerinin gerektiği kadar ve gerektiği şekilde uygulanması gerekir.


Sözün Özü:
İstatistiksel analizlere başlamadan önce verinin gerekli şekilde ve miktarda temizlendiğinden ve düzeltildiğinden emin olursanız, elinizdeki veriden en ufak bilgi kırıntısını dahi çıkarabilirsiniz.



Proje:
Doğrusal ve ve farklı tabanlarda logaritmik olarak hayali sayısal veriler oluşturun, bu sayısal verileri bir programla (Excel, R, Matlab vb.) çizdirin. Bir de bu verileri logaritma 2 tabanına dönüştürerek tekrar çizdirin. Nasıl bir fark oluşuyor?

Meraklısına:
Biyolojik verilerin temizlenmesi ve dönüştürülmesinde seçilen yöntemler her dokuda aynı sonucu vermiyor. Bazı dokulardan elde edilen veriler belirli bir yöntemle daha iyi bir şekilde temizlenebilirken, bazı dokulardan elde edilen veriler daha farklı yöntemle daha sağlıklı bir şekilde dönüştürülebiliyor. Bunun üzerine hatırısayılır bir literatür de mevcut.