Kategorik Veri Analizi ve Shiny Web Uygulamaları – 1

Canlılar milyonlarca yıldır belirli durumlarda hayatta kalabilmek için geçmiş tecrübelerden, günümüz diliyle geçmiş Data’lardan faydalanarak bazı hayatta kalma yöntemleri geliştirmiştir. Bu yöntemler bazen avlanma stratejileri geliştirmek için bazen ise optimizasyon problemlerini çözmek için kullanıldı. Kullandığımız veri miktarı arttıkça bu verileri analiz edecek, anlamlı sonuçlar çıkarıp, doğru stratejiler geliştirecek karmaşık yöntemlere ihtiyaç duyulmaya başlandı.

16. Yüzyılda ilk defa Aristo tarafından ortaya atılan Olasılık veya İhtimaliyet kavramı, 17. Yüzyılda “bir kumarbazın ihtirası” uğruna Blaise Pascal ve Pierre de Fermat tarafından matematiksel olarak incelenmeye başlanmıştır. Burada belirtilen kumarbaz Chevalier de Méré adında saygın bir Fransız’dır ve servetini kumar oynayarak büyütmeye çalışmaktadır. Basit bir zar oyununda kuralları değiştirerek daha çok kazanabileceğini düşünen Méré, dönemin matematikçilerinden Pascal’a bu oyunda kazanmanın matematiksel bir arka planı olup olmadığını sorar ve Olasılık Kuramı kavramı ilk defa bu sebeple ortaya atılmış olur. Bu tarihten itibaren bilim, endüstri, ekonomi gibi birçok alanda istatistiksel yöntemler gelişime büyük katkı sağlamıştır.

Günümüzde karşılaştığımız problemlere karşı geliştirdiğimiz yöntemlerden bir tanesi de Regresyon’dur. Regresyon, belirli özelliklere sahip bir veriyi sebep-sonuç ilişkisi ile modellemek ve bu modeli kullanarak gelecek hakkında tahminlemeler yapmakta kullanılır. Örneğin, reklam harcamaları ile satışlar arasında bir sebep sonuç ilişkisi vardır veya bir öğrencinin ders çalışma saatleri ile başarılı olup olmaması durumu bir sebep sonuç ilişkisine dayandırılabilir. Regresyon modeli genel olarak bir veya daha fazla bağımsız değişkenin bir bağımlı değişken üzerindeki etkisini matematiksel olarak açıklamak için kullanılmaktadır. Kullanılacak regresyon türüne karar verirken ilk olarak bağımlı değişkenin türüne bakılır.

Bu yazı dizisinde bağımlı değişkenin kategorik olduğu durumlarda kullanılan Lojistik Regresyon Modeli hakkında ve Shiny Web Uygulaması geliştirme yöntemleri hakkında bilgiler vereceğim. İşleyişin bu şekilde olmasının sebebi Lojistik Regresyon’un teorik kısmını çeşitli örneklerle öğrenip Shiny ile uygulama yapmaktır. Yazı dizisinin sonunda modelin ve katsayıların anlamlılık testleri, ideal modelin tercih edilmesi süreci, yapılan analizi zenginleştiren faydalı istatistikler,  bir veri üzerinde bu yöntemlerin uygulaması işlemleri ve Shiny Web Uygulamaları hakkında birçok bilgi öğrenmiş olacaksınız.

Lojistik Regresyon, denetimli öğrenme yöntemlerinden bir tanesidir. Denetimli öğrenme, geçmiş verilerden yararlanılarak, elde hazır halde bulunan veri ile modelleme işlemidir ve asıl olan eldeki verilerle sonuç değişkeni değerinin bilinmesidir.  Bir diğer deyiş ile geçmiş tecrübeler kullanılarak belirli bir konu hakkında çözümler üretilir. evet/hayır, kaldı/geçti veya ikiden fazla kategoriye sahip olan bağımlı değişkenlerin hangi değişkenler tarafından etkilendiğini öğrenmek istediğimizde kullanılır. Örneğin bir hastanın hastanede kaldığı süre ve aldığı tedavinin iyileşip iyileşmemesi üzerindeki etkisi araştırılıyorsa veya bir ilacın etki edip etmemesi üzerinde seçilen bağımsız değişkenlerin önemi araştırılıyorsa Lojistik Regresyon kullanılır. Eğer kategorik değişken evet/hayır gibi iki düzeyli ise İkili Lojistik Regresyon, 3 veya daha fazla düzeye sahip ise Çoklu Lojistik Regresyon kullanılır.

İkili Lojistik Regresyon

Doğrusal Regresyon’da bağımlı ve bağımsız değişkenler arasındaki ilişki E(Yi|Xi)=β01X12X+…+ βkXk+Ɛ şeklindedir. Ancak bağımlı değişken 0 ve 1 değeri alan ve Binom dağılımına sahip kategorik değişken olduğu durumlarda doğrusal regresyon modeli işe yaramıyor. Bu da tamamen bağımlı değişkenin dağılımının Binom dağılması ile alakalıdır. Bağımlı değişken iki değer alıyor, dolayısıyla artıklar ve hatalar da iki değer alıyor. Sonuç olarak, homojen varyanslılık(homoscedasticity) varsayımı sağlanmıyor. Yani hata terimi varyansı, bağımsız değişkenlerdeki değişimlere bağlı olarak değişiyor ve heterojen varyanslılık sorunu ortaya çıkıyor. Örneğin bir şehrin tüketim alışkanlıklarını araştıran bir çalışmayı düşünelim; merkezi yerlerde AVM’ler veya büyük marketler olduğu ve kırsalda bu imkanların daha az olduğu için insanların tüketim alışkanlıkları bölgeden bölgeye farklılık gösterecektir. Merkezi yerlerde yaşayan insanların tüketimleri kırsalda yaşayanlara göre daha fazla ve çeşitli olacaktır. Dolayısıyla hata teriminin varyansı merkezi yerlerde yaşayan insanlar için daha fazla olacaktır. Bu sebepler yüzünden İkili Lojistik Regresyon için Doğrusal Regresyon modeli kullanılamaz.

chdage <- read.table("chdage.dat",header = T)

yas <- chdage$AGE                    
kalp.hast <- chdage$CHD           
yas.araligi <- chdage$AGRP        

plot(kalp.hast~yas)

 

 

 

 

 

 

 

 

Yukarıdaki çalışmada yaş değişkeni ile kalp hastası olmak arasındaki ilişki inceleniyor, AGE değişkeni yaşı, CHD değişkeni kişinin kalp hastası olup olmaması durumunu, AGRP değişkeni ise gruplandırılmış yaş aralıklarını ifade etmektedir. İlk olarak yaş değişkeni ile kişinin kalp hastası olup olmama durumu arasındaki ilişkiyi görebilmek için nokta grafiği çizdirdik ve noktaların rastgele dağılmadığını, 0 ve 1 değeri alan Binom dağılımına sahip olduğunu gördük. Sonuç olarak Doğrusal Regresyon’un varsayımlarından bir tanesi olan Homojen Varyanslılık(Homoscedasticity) varsayımının sağlanmadığını göstermiş olduk.

Bağımlı değişkenin kategorik olduğu durumda yine  Yi=E(Yi|Xi)+Ɛ şeklinde bir model kurmayı amaçlıyoruz. Her bir X ’nin dağılımının 0 veya 1 değeri alan Bernoulli olduğunu, ve her gözlemin ortalamasının  E(Y=1|Xi)=Ρi  olduğunu biliyoruz. Y değeri, her zaman başarı ile ilgilendiğimiz için 1 değerini almaktadır. Verileri teker teker her bir Bernoulli değişkeni olarak değerlendirmek yerine, Binom dağılımına dönüştürürsek mantıklı bir beklenen değer bulabilir, eğri veya doğru bir şekil oluşturabilir ve o şekle dayalı olarak beklenen değerin matematiksel fonksiyon yapısını tahmin edebiliriz.

Aşağıda verilen tabloda belirli yaş aralıklarındaki insanlara kalp hastası olup olmadıkları soruluyor ve cevaplar “Hayır” veya “Evet” olarak kaydediliyor. Kalp hastalığına sahip olanları(CHD=E) teker teker kendi gruplarında yer alan hasta sayılarına bölerek yaş gruplarının kalp hastalığı oranlarını buluyoruz.

Yaş Grubu           fi                 CHD(H)         CHD(E)                 Kalp Hast. Oranı

20-29                  10                     9                      1                               1/10=0.1

30-34                  15                    13                     2                             2/15=0.13

35-39                  12                     9                      3                                      0.25

40-44                  15                    10                     5                                      0.33

45- 49                 13                      7                     6                                      0.46

50-54                   8                      3                      5                                      0.63

55-59                  17                     4                     13                                     0.76

60-69                  10                     2                      8                                      0.80

R’da aggregate() fonksiyonu ile yaş aralıklarını ve bu aralıklara ait kalp hastası olanların oranını belirliyoruz. Bu işlem ile beraber Bernoulli dağılan bir yapıyı, Binom dağılan bir yapıya çevirmiş olduk. Bu iki değişken ile bir nokta grafiği çizdiriyoruz;

grup <- aggregate(kalp.hast~yas.araligi,data=chdage,FUN=mean)
grup
plot(grup$yas.araligi,grup$kalp.hast)

Şekilde görüldüğü üzere noktalar S şeklinde bir yapı oluşturuyor. Sonuç olarak, E(Yi|Xi)’yi tanımlayacak fonksiyon S şeklinde olmalıdır kanısına varıyoruz. Bir diğer deyiş ile 0E(Y=1|Xi)=Ρi1 şeklinde bir yapıyı tanımlamak için S şeklinde bir fonksiyon gerekir. Bu fonksiyon yapısına ise Lojistik Fonksiyon adı verilir.

 lojistik fonksiyonunda değişkenleri yerleştirdiğimizde,

şeklinde lojistik regresyon fonksiyonu elde edilir.

Elde edilen fonksiyon parametrelerce doğrusal olmayan bir yapıdır. Bu yapıyı doğrusal hale getirmek için Logit dönüşümü adı verilen bir dönüşüm uygulanır ve doğrusal hale getirilmiş olur.

Logit dönüşümü işlemi ile uygulanır.

işlemi ile model doğrusal hale getirilir.

ODDs değeri 

ODDs değeri bir olasılık değildir. Bazı durumlarda şans olarak adlandırılabilir ama bir insanın kalp hastalığına yakalanma şansı olarak da çevirmek kavramsal olarak çelişkiler yaratabilir. Bu konu hakkında tartışmalar hala sürmektedir, bu konuda fikri olan arkadaşlar fikirlerini aşağıya yorum olarak bırakabilirler. Bu yazı dizisinde ODDs değeri şans olarak adlandırılacaktır.

Yukarıdaki örnekte;

20-29 yaş grubunda kalp hastası olanların oranı = 1/10 = 0.1

20-29 yaş grubunda kalp hastası olanların ODDs değeri = 0.1/0.9 = 1/9  Kalp hastası olma şansı 1’e 9 veya 1/9 şeklinde bir yorum yapılabilir.

 

Shiny

Yazının bir diğer bölümü R programının özelliklerinden bir tanesi olan Shiny ile ilgili olacaktır. Shiny, HTML, CSS veya JavaScript  gibi dilleri bilmeden R programlama dilini kullanarak Web sayfaları oluşturmaya yarayan RStudio’nun geliştirdiği bir R paketidir.

Shiny uygulamasını çalıştırmak için server.R ve ui.R adında iki dosya türüne ihtiyaç duyulmaktadır. server.R dosyasında uygulamanın istatistiksel analizlerinin yapıldığı, grafiklerin verilerle ilişkilendirildiği, kısaca ekrana yansıtılacak her şeyin arka planında yapılan işlemler yer almaktadır. ui.R dosyasında ise server dosyasında yapılan işlemlerin belirli bir düzen ile ekrana yansıtılması işlemi yapılmaktadır. Bu iki dosya arasındaki etkileşim RStudio çalıştığı sürece devam etmedir. Bilgisayarınızda, içeriği çalışan bir R oturumu tarafından kontrol edilen bir web sayfası (kullanıcı arayüzü) bulunuyor ve RStudio aracılığıyla bir uygulamayı çalıştırdığınızda, R oturumu da sunucunuzu bilgisayarınızda çalıştırıyor. Sunucu, web sayfasıyla etkileşime girdiğinizde, R komutlarını işlerken, UI nesnelerini de her etkileşime göre güncelliyor.

 

 

 

 

Örneğin Shiny’nin kullanımı için örnek bir istatistik bilgisinden yararlanalım. “Örneklem genişliği artarsa kitlenin dağılımı normale yaklaşır”, evet teoride bu bilgi hepimizin aklında olan temel bir istatistik bilgisidir. Bu bilgiyi gözümüzde canlandırabilmek için Shiny şu şekilde kullanılabilir. İlk olarak server.R dosyasında eldeki veriden n sayıda örneklem çeken bir fonksiyon yazılır. Çekilen örneklemlerin histogram grafiği çizdirilerek grafiğin şekli görsel olarak gösterilir. n değerini sliderinput() fonksiyonunu yardımıyla değiştirebilir, n değerinin her değeri için histogram grafiği dinamik olarak değişir. Sonuç olarak n değeri 30 değerine yaklaştıkça örnekleme dağılımının normal dağılıma yaklaştığı görülür. ui.R dosyasında ise grafiğin şeklini, boyutunu, nerede bulunması gerektiğini , widget’ları bir düzen ile yerleştirilebilir.

Shiny’i kullanabilmek için öncelikle CRAN ağından Shiny paketini indirmemiz ve kütüphaneye eklememiz gerekiyor.

install.packages("shiny")
library(shiny)

Shiny paketini indirip kütüphaneye ekledikten sonra File > Shiny Web App tıklayarak yazacağınız uygulamaya boşluk bırakmadan bir isim eklemeniz gerekiyor. Application type bölümünde server.R ve ui.R dosyalarınızın aynı script dosyasında mı yoksa farklı iki dosya olarak açmak istersiniz onu belirtiyorsunuz ve son olarak Shiny dosyanızın hangi klasöre kaydedilmesini istediğinizi seçip uygulamayı oluşturuyorsunuz.

Uygulamanın farklı iki dosya halinde olmasını istediğim için 1. Nolu işarette olduğu gibi server.R ve ui.R olarak iki farklı dosya bulunuyor. Eğer tek bir dosya halinde server ve ui fonksiyonlarını kullanmak isterseniz aşağıdaki fonksiyonu kullanmanız gerekir.

shinyApp(ui=ui, server=server) fonksiyonu ile tek bir dosya içerisinde de bu etkileşimi sağlayabiliriz.

Örnek uygulama olduğu için 2. Nolu işarette bulunan Run App butonuna tıklıyoruz ve yanda bulunan ekran bizi karşılıyor.3. Nolu işarette kırmızı STOP butonu var, bu işaret uygulamanın çalışır halde olduğunu ve yanda bulunan sliderinput() da yapılan her değişikliğin dinamik olarak histogram grafiğini değiştireceği anlamına geliyor. Eğer bu işarete tıklarsanız 4. Nolu işaretteki IP adresi ile ilişkisi kesiliyor ve herhangi bir değişiklik yapılamıyor.  Burada belirtilen IP RStudio tarafından otomatik olarak veriliyor, server ve ui arasındaki etkileşim bu IP’deki web sayfası üzerinden gerçekleştiriliyor.

Sonuç olarak Lojistik Regresyonun hangi durumlarda kullanılacağını, Doğrusal Regresyon ile arasındaki temel farkları, logit fonksiyon ve odds ratio kavramlarını örneklerle beraber görmüş olduk. Ardından Shiny uygulaması hakkında genel bir bilgi ile birlikte ilk uygulamamızı yaptık ve uygulamanın işleyişi hakkında bilgiler verdik.

Yazar Hakkında
Toplam 13 yazı
Mustafa Nayansak
Mustafa Nayansak
Yorumlar (Yorum yapılmamış)

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

×

Bir Şeyler Ara