Bootstrap, istatistik dağılımlarını anlamaya yönelik 1979’da Stanford Üniversitesinden Amerikalı istatistikçi Bradley Efron tarafından geliştirilmiş parametrik ve non-parametrik versiyonları olan hem istatistiksel bir teknik hem de bir simülasyon yöntemidir.
Bootstrap örnekleme duyarlılık analizleri, istatistiksel ve ekonometrik analizlerden makine öğrenme ve derin öğrenmeye kadar pek çok farklı alanda kendine uygulama alanı bulmaktadır. Kısacası bu yöntem bütün alanlarda kullanılabilmektedir. Bootstrap, belirli bir istatistiksel yöntemle ilişkili belirsizlik ölçülerini tahmin etmek için en genel ve en yaygın kullanılan araçlardan biridir. Bazı yaygın temel bootstrap uygulamaları şunlardır: belirli bir istatistiksel tahmincinin merkezi dağılım ve yayılım ölçülerini, standart sapmasını, varyansını tahmin etmek veya ilgili parametreler için yaklaşık güven aralıkları oluşturmak. Ancak çok daha gelişmiş uygulama alanları da mevcuttur özellikle makine ve derin öğrenme alanlarında. Sözü gelmişken ifade etmekte fayda var; veri bilimiyle ilgilenilen bazı internet sitelerinde Bootstrap örnekleme ile tekrarlı basit tesadüfi örneklemenin birbirinin yerine ve eş anlamlı olarak kullanıldığı görülmektedir. Aslında bu kavramların adları da hatalı kullanılmaktadır. Hadi burayı geçelim bir ölçüde tolere edilebilir ama Bootstrap örnekleme ile tekrarlı basit tesadüfi örneklemenin birbirinin yerine kullanılması eksik kalan hatalı bakış açısıdır ve düzeltilmeye ihtiyacı vardır. Bu iki yöntem birbirine yakın ancak aynı şey olmadığını ifade etmek lazım. Bu iki yöntem birbirine benzemektedir çünkü Bootstrap örnekleme tekrarlı basit tesadüfi örneklem üzerine inşa edilmiştir. Farklılığı ise tekrarlı örnekleme tekniğinde örneklemin popülasyondan çekilmesi ve çekilecek örneklem büyüklüğünün ise popülasyon (N)’daki gözlem sayısı (popülasyon birimleri)’ndan az veya ona eşit olmasıdır. Diğer bir farklılığı, Bootstrap örneklemede örneklem, yine bir popülasyondan çekilmiş bir örneklem birimleri içerisinden çekilir ve Bootstrap örneklemlerin sayısı (n1, n2, n3, n4……….ni), popülasyondan çekilmiş örneklem büyüklüğü (n)’ne eşit olmasıdır. Diğer bir deyişle, n1, n2, n3, n4……….ni= n’dir. Ayrıca Bootstrap örneklemede popülasyonu temsil eden örneklemden birden fazla sayıda örneklem seçimi (replikasyon) söz konusudur. Eğer popülasyonu temsil eden orjinal örneklemden birden fazla sayıda örneklem oluşturuyorsa burada replikasyondan bahsederiz. Replikasyonu r ile gösterirsek r>1 ve r1‘den ri‘ye kadar örneklem seçimi yapılır. Yani burada replikasyon (r) bize kaç kez tekrarlı örnekleme yapacağımızı gösterir. Bu durumda basit bir hesaplama ile Bootstrap örneklemede yeni gözlem sayıları= rxn‘dir. Bahsedilenler ışığında Şekil 2 üzerinde Bootstrap örnekleme açıklanmaya çalışılmıştır.
İstatistikte olasılıklı örnekleme, popülasyon birimlerinin bulunduğu bir listeden örneklem birimlerinin seçilmesidir. Tesadüfi seçilmiş örneklem birimleri (sample unit)’nde, tesadüfi seçilir. Olasılıklı örnekleme yöntemlerinden tesadüfi örneklemede yaygın olarak iki yöntem kullanılmaktadır. Bunlardan ilki ve en yaygın olanı tekrarsız basit tesadüfi örnekleme (simple random sampling without replacement), diğeri ise sistematik örneklemedir. Bu yöntemler örneklemle popülasyona genelleme çalışmalarının yapıldığı araştırma literatüründe mutlak bir şekilde kullanılmaktadır. Bu yöntemlerin temel özelliği hedef popülasyon içerisindeki popülasyon birimlerine örnekleme seçilmesinde eşit şans verilmesidir. Bu yöntemlerle ilgili uygulamalı çalışmaları ve daha fazlasını bu site üzerinde yayınladım. İlgi duyanlar yöntemlerle uygulamalarının nasıl yapıldığını buradan öğrenebilir ve aynı zamanda bu çalışmaları indirebilirler. Tekrarlı basit tesadüfi örnekleme (simple random sampling with replacement)’de ise böyle bir durum söz konusu değildir, diğer bir deyişle örneklem birimlerine ya da popülasyon birimlerine eşit seçilme şansı verilmez. Gelin şimdi çalışmamızın odağı olan tekrarsız ve tekrarlı basit tesadüfi örnekleme yöntemlerini, ardından ise bootsrap örneklemeyi inceleyelim. Bu çalışmalar kapsamında uygulamaları hem Microsoft Excel hem de R programlama dili üzerinde yaparak okuyuculara konunun öğrenilmesi noktasında daha fazla katkı sunulması amaçlanmıştır.
Tekrarsız Basit Tesadüfi Örnekleme
Popülasyondan örnekleme seçilen her birimin eşit seçilme şansı olduğu olasılıklı örnekleme yöntemi basit tesadüfi tekrarsız örnekleme yöntemidir. Örneğin kürede isimleri yazılı 81 ilden 10 ilin geri koyulmadan sırasıyla seçildiğini varsayalım. Burada seçilen her il çekildikten sonra küreye koymayarak (iadesiz) diğerlerine eşit şans tanımış olduk. Bu durumda tekrarsız seçim yaparak tekrarsız örnekleme yaptığımızdan küreden seçilen herhangi bir ile bir daha seçilme şansı vermemiş oluyoruz. Bu konuyla ilgili olarak daha önce Microsoft Excel üzerinde yaptığım simülasyona dayalı kapsamlı örnek uygulama çalışmasını aşağıdaki linkte paylaşıyorum.
Bu örnek uygulama ile hem tekrarsız basit tesadüfi örneklemenin nasıl yapıldığını hem de güven aralığının nasıl hesaplandığını görmüş ve öğrenmiş olacaksınız. Bu uygulamada açık bir şekilde kullanılan fonksiyonları da göreceğinizden oldukça faydalı olacağı düşünülmektedir.
Tekrarlı Basit Tesadüfi Örnekleme
Popülasyondan örnekleme seçilen her birime eşit seçilme şansının verilmediği, diğer bir ifadeyle her popülasyon biriminin birden fazla seçilme şansının olduğu olasılıklı örnekleme yöntemi tekrarlı basit tesadüfi örnekleme yöntemidir. Örneğin kürede isimleri yazılı 81 ilden 10 ilin seçildiğini varsayalım. Tekrarsız basit tesadüfi örnekleme yönteminden farklı olarak bu yöntemde seçilen iller tekrar küreye bırakılarak (iadeli) burada bu illere birden fazla seçilme şansı verilir. Diyelim ki küreden 1. sırada çekilen il Trabzon’dur. Trabzon ilinin tekrar küreye atılarak seçilen her ilin tekrar küreye konulmak suretiyle seçim döngüsünün 10. ilin seçilmesine kadar (dahil) devam ettiği süreci bu yöntemle tanımlarız. Burada 1. sırada seçilen Trabzon ilinin diğer seçimlerde de küreden çıkma şansı bulunmaktadır. Tekrarlı basit tesadüfi örnekleme tekniğinin daha kalıcı olması adına Microsoft Excel’de sentetik veri üreterek hazırladığım örnek uygulama Şekil 1’de ve daha önce yapmış olduğum çalışmalarda verilmiştir. Tekrarlı basit tesadüfi örnekleme çalışmasına aşağıdaki linkten ulaşabilirsiniz.
Z Tablosuna Göre Güven Aralığının Hesaplanmasına Yönelik Bir Simülasyon Çalışması
Burada formüllere yer verilerek ayrıca sizi formüllere boğmayacağım 🙂 . Önemli olan işin felsefesini anlamak. Uygulama ile zaten çok rahat anlayacağınızı düşünüyorum.
Şekil 1: Tekrarlı Basit Tesadüfi Örnekleme
Şekil 1’deki tekrarlı basit tesadüfi örnekleme uygulamasını xlsx formatında aşağıdaki linkten indirebilirsiniz. Bu çalışma aynı zamanda tekrarlı basit tesadüfi örnekleme simülasyon çalışması olup, çalışmada kullanılan fonksiyonları da görerek konunun daha kalıcı olarak anlaşılmasına katkı sunulması amaçlanmıştır. Aynı çalışmada Şekil 2’de belirtilen Bootstrap örneklemeye de yer verilmiştir. Microsoft Excel ortamındaki uygulamada F9 tuşuna basılı tutarak yeni tekrarlı basit tesadüfi örneklem birimleri üretebilirsiniz. Microsoft Excel’de bu uygulamanın verilmesinin nedeni R programlama dili bilmeyenlerin olabileceği ve kullanılan fonksiyonları ile bu fonksiyonların birbiriyle etkileşimlerinin gösterilmek istenmesi düşüncesinden ileri gelmektedir.
Bootstrap’ta, ilgilenilen popülasyondan birçok kez tekrarlı örneklemler (aynı büyüklükte) alınır. Bu nedenle bu tekniği anlamadan önce tekrarlı basit tesadüfi örnekleme mantığının anlaşılması gerekir. Örneklem çalışmalarında amaç, güncel bilgiye en hızlı ve en düşük maliyetle ulaşmaktır. Bootstrap’in arkasında yatan fikir, bir istatistiğin örnekleme dağılımına ne kadar ve ne ölçüde evrildiğini Bootstrap örneklemlerle ortaya koyarak Bootstrap örnek dağılımını göstermektir. Şekil 2’de Bootstrap örneklemenin somutlaştırılması adına örnek bir uygulama hazırlanmıştır. Burada amaç Bootstrap örneklemenin felsefesini göstermek olduğundan minimal örneklem büyüklükleri üzerinden gidilmiştir. Eğer Z tablosu kullanılarak güven aralığı hesaplanması isteniyorsa örneklem büyüklüğünün 30 ve 30’dan büyük, t (student’s t) tablosu kullanılarak güven aralığı hesaplanması isteniyorsa örneklem büyüklüğünün 30’dan daha düşük olması gerekir. Bunları burada hatırlatmakta fayda var. Şekil 2’deki örnek bootstrap örneklemede replikasyon (tekrar) sayımız 4, tekrarlı seçilen örneklemlerin büyüklüğü (sample size) ise 5’tir. Burada replikasyon sayısı ve örneklem büyüklüğü uygulama Microsoft excel ortamında yapıldığı için düşük tutulmuştur. Genelde literatürde ve uygulamalarda replikasyon sayısı 1000 olarak alındığı görülmektedir. Ancak replikasyon sayısının araştırmanın amacına, dizaynına ve veri setine göre değişiklik gösterebileceği unutulmamalıdır.
Şekil 2: Bootstrap Örnekleme
Şimdi de Şekil 2’deki Bootstrap örneklemlere dayalı olarak orijinal örneklemde değerleri ne kadar doğrulukla, yani ne kadarlık bir sapma (bias) ile tahmin edebileceğimizi hesaplayalım. Bu hesaplama Tablo 1’de verilmiştir. Tablo 1’de bias (sapma), orijinal örneklem ortalamasından Bootstrap örneklem ortalamasının çıkarılarak hesaplanmıştır. Tablo 1 üzerinden gidecek olursak Bias = 34,6-30,95=3,65’tir. Biz burada hesapladığımız sapma (bias) değeri ile aslında 4 kez (replikasyon) Bootstrap örnekleme yaptığımızda elde elde ettiğimiz Bootstrap örneklem ortalamasının gözlem ortalamasından 3,65 saptığını söylüyoruz. Daha büyük örneklem büyüklüklerinde ve daha yüksek replikasyonlarda (tekrarlarda) bu sapma değeri düşecektir.
Tablo 1: Bootstrap Örnekleme İle Sapmanın Hesaplanması
Şimdi de R programlama dili kullanarak gerçekçi bir veri seti üzerinden bootstrap örnekleme ile merkezi dağılım ölçüleri ve bunların güven aralıklarını hesaplayalım. Bu bağlamda bu kısımda kullanılan veri seti R’da yer alan pizza verisidir. Veri seti, 1209 gözlem ve 16 değişkenden oluşmaktadır. Veri setini aşağıdaki linkten indirebilirsiniz.
R’da Tekrarlı Basit Tesadüfi Örnekleme ve Bootstrap Örnekleme
Yüklenecek kütüphaneler
library<-c("reactable","dplyr","tibble","tidyr","ggplot2","formattable","ggthemes","readr","readxl","ggpubr","formattable", "ggstance", "explore", "tidytext", "scales", "data.table", "pastecs", "gtools", "rmarkdown", "knitr", "gtsummary", "writexl", "ppcor","psych", "reshape2", "GGally", "CCP", "Hmisc", "VIM", "philentropy", "kableExtra", "foreign", "DescTools", "pander", "infer", "boot", "bootstrap")
loading<-sapply(library, require, character.only = TRUE)
suppressWarnings(loading, classes = "warning")
Veri setinin okunması ve xlsx uzantılı çalışma kitabına yazdırılması
pizza=d.pizza
head(pizza,10) %>% pander(caption="Pizza Veri Seti İlk 10 Gözlem")
write_xlsx(pizza, "pizzaverisi.xlsx") # veri setinin xlsx uzantılı Microsoft Excel çalışma kitabına yazdırılması
Yukarıdaki R kod bloğunun çalıştırılmasından sonra veri setindeki ilk 10 kayıt aşağıdaki tabloda verilmiştir.
----------------------------------------------------------------------------
index date week weekday area count rabate price
------- ------------ ------ --------- ------------- ------- -------- -------
1 2014-03-01 9 6 Camden 5 TRUE 65.66
2 2014-03-01 9 6 Westminster 2 FALSE 26.98
3 2014-03-01 9 6 Westminster 3 FALSE 40.97
4 2014-03-01 9 6 Brent 2 FALSE 25.98
5 2014-03-01 9 6 Brent 5 TRUE 57.56
6 2014-03-01 9 6 Camden 1 FALSE 13.99
7 2014-03-01 9 6 Camden 4 TRUE 89.44
8 2014-03-01 9 6 Brent NA NA NA
9 2014-03-01 9 6 Westminster 3 FALSE 40.97
10 2014-03-01 9 6 Brent 6 TRUE 84.74
----------------------------------------------------------------------------
Table: Pizza Veri Seti İlk 10 Gözlem (continued below)
----------------------------------------------------------------
operator driver delivery_min temperature wine_ordered
---------- --------- -------------- ------------- --------------
Rhonda Taylor 20 53 0
Rhonda Butcher 19.6 56.4 0
Allanah Butcher 17.8 36.5 0
Allanah Taylor 37.3 NA 0
Rhonda Carter 21.8 50 0
Allanah Taylor 48.7 27 0
Rhonda Taylor 49.3 33.9 1
Allanah Taylor 25.6 54.8 NA
Allanah Taylor 26.4 48 0
Rhonda Carter 24.3 54.4 1
----------------------------------------------------------------
Table: Table continues below
---------------------------------------
wine_delivered wrongpizza quality
---------------- ------------ ---------
0 FALSE medium
0 FALSE high
0 FALSE NA
0 FALSE NA
0 FALSE medium
0 FALSE low
1 FALSE low
NA FALSE high
0 FALSE high
1 FALSE medium
---------------------------------------
Veri setinin yapısını gözden geçirme
Aşağıda da görüleceği üzere pizza veri seti 1209 gözlem ve 16 değişkenden oluşmaktadır. Bazı değişkenlerin nominal ve ordinal kategorik, bazılarının ise nicel veri tipinde olduğu görülmektedir.
'data.frame': 1209 obs. of 16 variables:
$ index : int 1 2 3 4 5 6 7 8 9 10 ...
$ date : Date, format: "2014-03-01" "2014-03-01" "2014-03-01" "2014-03-01" ...
$ week : num 9 9 9 9 9 9 9 9 9 9 ...
$ weekday : num 6 6 6 6 6 6 6 6 6 6 ...
$ area : Factor w/ 3 levels "Brent","Camden",..: 2 3 3 1 1 2 2 1 3 1 ...
$ count : int 5 2 3 2 5 1 4 NA 3 6 ...
$ rabate : logi TRUE FALSE FALSE FALSE TRUE FALSE ...
$ price : num 65.7 27 41 26 57.6 ...
$ operator : Factor w/ 3 levels "Allanah","Maria",..: 3 3 1 1 3 1 3 1 1 3 ...
$ driver : Factor w/ 7 levels "Butcher","Carpenter",..: 7 1 1 7 3 7 7 7 7 3 ...
$ delivery_min : num 20 19.6 17.8 37.3 21.8 48.7 49.3 25.6 26.4 24.3 ...
$ temperature : num 53 56.4 36.5 NA 50 27 33.9 54.8 48 54.4 ...
$ wine_ordered : int 0 0 0 0 0 0 1 NA 0 1 ...
$ wine_delivered: int 0 0 0 0 0 0 1 NA 0 1 ...
$ wrongpizza : logi FALSE FALSE FALSE FALSE FALSE FALSE ...
$ quality : Ord.factor w/ 3 levels "low"<"medium"<..: 2 3 NA NA 2 1 1 3 3 2 ...
Eksik gözlemlerin gözden geçirilmesi
eksikveri=colSums(is.na(pizza))
deger=as.tibble(eksikveri)
data.frame(Degisken=colnames(pizza), Sayi=deger$value, "Orani"=round((deger$value/sum(deger$value))*100,2)) %>% pander(caption="Eksik Gözlemlerin Sayısı")
Yukarıdaki R kod bloğunun çalıştırılmasından sonra değişkenlere göre elde edilen eksik gözlemler aşağıdaki tabloda verilmiştir.
-------------------------------
Degisken Sayi Orani
---------------- ------ -------
index 0 0
date 32 7.57
week 32 7.57
weekday 32 7.57
area 10 2.36
count 12 2.84
rabate 12 2.84
price 12 2.84
operator 8 1.89
driver 5 1.18
delivery_min 0 0
temperature 39 9.22
wine_ordered 12 2.84
wine_delivered 12 2.84
wrongpizza 4 0.95
quality 201 47.52
-------------------------------
Table: Eksik Gözlemlerin Sayısı
Veri setinden tekrarsız basit tesadüfi örnekleme tekniği ile örneklem seçimi
set.seed(61)#aynı örneklem birimlerinin alınması için
ornek<-pizza %>% sample_frac(0.7) # örneklem büyüklüğü 846 gözlemden oluşmaktadır.
sum(is.na(ornek$price)) # örneklemdeki eksik gözlem sayısı 10
fiyat=ornek$price[complete.cases(ornek$price)] #örneklemdeki eksik gözlemlerin çıkarılması
#alternatif tekrarsız basit tesadüfi örneklem seçimi
#pizza[sample(1:nrow(pizza),NROW(pizza)*0.7, replace=FALSE),]
a) Medyan Değerler Üzerinden Bootstrap Örnekleme
Bootstrap örnekleme pizza veri setindeki pizza fiyatı üzerinden yapılmıştır. Bootstrap örnekleme de replikasyon (tekrar) sayısı 1000, her bir replikasyondaki örneklem büyüklüğümüz (sample size) ise 836’dır. Buna göre yeni durumda toplam gözlem sayımız ise 1000 x 836 =836000’dır.
Orjinal örneklem setinden % 95 ve 99 güven aralıklarında medyan değerlerinin belirlenmesi
Pizza veri setinden tekrarsız basit tesadüfi örnekleme ile çekilen 836 gözlem (846-10=836, 10 gözlem eksik olduğu için veri setinden çıkarılmıştır) üzerinden pizza piyatları (price) değişkeninden hareketle merkezi dağılım ölçülerinden biri olan medyanlar hesaplanmıştır.
ga=0.90 # % 90 güven aralığını göstermektedir.
sonuc=MedianCI(fiyat, na.rm=TRUE, conf.level =ga)
medyan=sonuc[1]
altsinir=sonuc[2]
ustsinir=sonuc[3]
k=tibble(medyan, altsinir, ustsinir, guven_araligi=ga)
#% 95 güven aralığında medyan değerlerini hesaplama
ga1=0.95 # % 95 güven aralığını göstermektedir.
sonuc1=MedianCI(fiyat, na.rm=TRUE, conf.level =ga1)
medyan=sonuc1[1]
altsinir=sonuc1[2]
ustsinir=sonuc1[3]
l=tibble(medyan, altsinir, ustsinir, guven_araligi=ga1)
#% 99 güven aralığında medyan değerlerini hesaplama
ga2=0.99 # % 90 güven aralığını göstermektedir.
sonuc2=MedianCI(fiyat, na.rm=TRUE, conf.level =ga2)
medyan=sonuc2[1]
altsinir=sonuc2[2]
ustsinir=sonuc2[3]
m=tibble(medyan, altsinir, ustsinir, guven_araligi=ga2)
baz=rep("baz",2)
lm=rbind(l,m)
# Medyan değerlerinin tek bir tabloda birleştirilmesi
baztum=cbind(model=baz, lm)
baztum %>% pander(caption="Orjinal Örneklemde % 95 ve % 99 Güven Aralığında Pizza Fiyatlarının Medyan Değerleri")
Yukarıdaki R kod bloğunun çalıştırılmasından sonra orjinal örneklem veri setinden elde edilen % 95 ve 99 güven aralıklarında medyan değerleri aşağıdaki tabloda verilmiştir.
------------------------------------------------------
model medyan altsinir ustsinir guven_araligi
------- -------- ---------- ---------- ---------------
baz 46.79 44.97 47.97 0.95
baz 46.79 44.96 48.56 0.99
------------------------------------------------------
Table: Orjinal Örneklemde % 95 ve % 99 Güven Aralığında Pizza Fiyatlarının Medyan Değerleri
% 95 ve 99 güven aralığında bootstrap örneklemeyle medyan değerlerin hesaplanması
options(scipen = 999)
set.seed(61) # aynı sonuçları alabilmeniz adına sabitlenmiştir.
bfiyat=fiyat %>% as_tibble() %>% rename(fiyat=value) %>%
generate(reps = 1000, type = "bootstrap")
#% 95 güven aralığında medyan değerlerini hesaplama
ga1=0.95 # % 95 güven aralığını göstermektedir.
sonuc1=MedianCI(bfiyat$fiyat, na.rm=TRUE, conf.level =ga1)
medyan=sonuc1[1]
altsinir=sonuc1[2]
ustsinir=sonuc1[3]
lb=tibble(medyan, altsinir, ustsinir, guven_araligi=ga1)
#% 99 güven aralığında medyan değerlerini hesaplama
ga2=0.99 # % 99 güven aralığını göstermektedir.
sonuc2=MedianCI(bfiyat$fiyat, na.rm=TRUE, conf.level =ga2)
medyan=sonuc2[1]
altsinir=sonuc2[2]
ustsinir=sonuc2[3]
mb=tibble(medyan, altsinir, ustsinir, guven_araligi=ga2)
boost=rep("boostrap ornekleme",2)
blm=rbind(lb,mb)
tumb1=cbind(model=boost, blm)
tumb1 %>% pander(caption="% 95 ve % 99 Güven Aralığında 1000 Tekrarlı (Replikasyon) Boostrap Örnekleminde Pizza Fiyatlarının Medyan Değerleri")
Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen % 95 ve % 99 güven aralığında 1000 tekrarlı (replikasyon) boostrap örnekleminde pizza fiyatı medyan değerleri aşağıdaki tabloda verilmiştir.
-------------------------------------------------------------------
model medyan altsinir ustsinir guven_araligi
-------------------- -------- ---------- ---------- ---------------
boostrap ornekleme 46.76 46.76 46.81 0.95
boostrap ornekleme 46.76 46.76 46.97 0.99
-------------------------------------------------------------------
Table: % 95 ve % 99 Güven Aralığında 1000 Tekrarlı (Replikasyon) Boostrap Örnekleminde Pizza Fiyatlarının Medyan Değerleri
Orjinal örneklem ve bootstrap örnekleme sonuçlarının medyan üzerinden karşılaştırılması
birlesik=rbind(baztum, tumb1) %>% as_tibble() %>% mutate(aralik_genisligi=ustsinir-altsinir)
formattable(birlesik, align =rep("l",6), list(
`model` = formatter("span", style = ~ style(color = "black",font.weight = "bold")),
`medyan`= color_bar("#00FF7F"),
`altsinir`= color_bar("#00BFFF"),
`ustsinir`= color_bar("#B0C4DE"),
`aralik_genisligi`= color_bar("#FA8072")
))
#alternatif olarak dilerseniz aşağıdaki kodu da yazarak farklı formatta tablo alabilirsiniz.
rbind(baztum, tumb1) %>% as_tibble() %>% mutate(aralik_genisligi=ustsinir-altsinir) %>% #pander (caption="Karşılaştırmalı Medyan Sonuçları")
Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen karşılaştırmalı sonuçlar bir bütün olarak aşağıdaki tabloda verilmiştir. Elde edilen bulgulardan orjinal örneklemde medyan pizza fiyatlarının bootsrap örnekleme ile elde edilen arasındaki yüksek bir fark olmadığını göstermektedir. Şimdi aşağıdaki tablodan hareket ederek medyan değerleri üzerinden basitçe bias’i yani sapmayı ele alalım:
- Orjinal örneklem ile bootstrap örneklem medyanları arasındaki sapmamız, yani bias=46,787-46764=0,023’e eşittir.
- Biaste medyan değerleri üzerinden gidildiğinde çok düşük bir farklılaşma görülmektedir. Ancak farklılaşmayı biz daha çok güven aralıklarında görüyoruz. Burada tabloda aralik genişliği bize güven aralığının üst sınırı ile alt sınırının farkını vermektedir.
Bulgulardan da anlaşılacağı üzere sapmaların oldukça düşük olduğunu ortaya koymaktadır. Bu durum bize bootsrap örneklemenin oldukça yüksek bir doğrulukla orjinal örneklemdeki medyan değerlerini tahmin ettiğini göstermektedir.
b) Ortalama Değerler Üzerinden Bootstrap Örnekleme
Bootstrap örnekleme pizza veri setindeki pizza fiyatı üzerinden yapılmıştır. Bootstrap örnekleme de replikasyon (tekrar) sayısı 1000, her bir replikasyondaki örneklem büyüklüğümüz (sample size) ise 836’dır. Buna göre yeni durumda toplam gözlem sayımız ise 1000 x 836 =836000’dır.
Orjinal örneklem setinden % 95 ve 99 güven aralıklarında ortalama değerlerinin belirlenmesi
Pizza veri setinden tekrarsız basit tesadüfi örnekleme ile çekilen 836 gözlem (846-10=836, 10 gözlem eksik olduğu için veri setinden çıkarılmıştır) üzerinden pizza fiyatları (price) değişkeninden hareketle merkezi dağılım ölçülerinden biri olan ortalamalar hesaplanmıştır.
#% 95 güven aralığında medyan değerlerini hesaplama
ga1=0.95 # % 95 güven aralığını göstermektedir.
sonuc1=MeanCI(fiyat, na.rm=TRUE, conf.level =ga1)
ortalama=sonuc1[1]
altsinir=sonuc1[2]
ustsinir=sonuc1[3]
l=tibble(ortalama, altsinir, ustsinir, guven_araligi=ga1)
#% 99 güven aralığında medyan değerlerini hesaplama
ga2=0.99 # % 99 güven aralığını göstermektedir.
sonuc2=MeanCI(fiyat, na.rm=TRUE, conf.level =ga2)
ortalama=sonuc2[1]
altsinir=sonuc2[2]
ustsinir=sonuc2[3]
m=tibble(ortalama, altsinir, ustsinir, guven_araligi=ga2)
baz=rep("baz",2)
lm=rbind(l,m)
baztum=cbind(model=baz, lm)
baztum %>% pander(caption="Orjinal Örneklemde % 95 ve % 99 Güven Aralığında Pizza Fiyatlarının Ortalama Değerleri")
Yukarıdaki R kod bloğunun çalıştırılmasından sonra orjinal örneklem veri setinden elde edilen % 95 ve 99 güven aralıklarında ortalama değerleri aşağıdaki tabloda verilmiştir.
--------------------------------------------------------
model ortalama altsinir ustsinir guven_araligi
------- ---------- ---------- ---------- ---------------
baz 49.2 47.67 50.73 0.95
baz 49.2 47.19 51.22 0.99
--------------------------------------------------------
Table: Orjinal Örneklemde % 95 ve % 99 Güven Aralığında Pizza Fiyatlarının Ortalama Değerleri
% 95 ve 99 güven aralığında bootstrap örneklemeyle ortalama değerlerin hesaplanması
options(scipen = 999)
set.seed(61) # aynı sonuçları alabilmeniz adına sabitlenmiştir.
bfiyat=fiyat %>% as_tibble() %>% rename(fiyat=value) %>%
generate(reps = 1000, type = "bootstrap")
#% 95 güven aralığında medyan değerlerini hesaplama
ga1=0.95 # % 95 güven aralığını göstermektedir.
sonuc1=MeanCI(bfiyat$fiyat, na.rm=TRUE, conf.level =ga1)
ortalama=sonuc1[1]
altsinir=sonuc1[2]
ustsinir=sonuc1[3]
lb=tibble(ortalama, altsinir, ustsinir, guven_araligi=ga1)
#% 99 güven aralığında medyan değerlerini hesaplama
ga2=0.99 # % 99 güven aralığını göstermektedir.
sonuc2=MeanCI(bfiyat$fiyat, na.rm=TRUE, conf.level =ga2)
ortalama=sonuc2[1]
altsinir=sonuc2[2]
ustsinir=sonuc2[3]
mb=tibble(ortalama, altsinir, ustsinir, guven_araligi=ga2)
boost=rep("boostrap ornekleme",2)
blm=rbind(lb,mb)
tumb1=cbind(model=boost, blm)
tumb1 %>% pander(caption="% 95 ve % 99 Güven Aralığında 1000 Tekrarlı (Replikasyon) Boostrap Örnekleminde Pizza Fiyatlarının Ortalama Değerleri")
Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen % 95 ve % 99 güven aralığında 1000 tekrarlı (replikasyon) boostrap örnekleminde pizza fiyatı ortalama değerleri aşağıdaki tabloda verilmiştir.
---------------------------------------------------------------------
model ortalama altsinir ustsinir guven_araligi
-------------------- ---------- ---------- ---------- ---------------
boostrap ornekleme 49.18 49.14 49.23 0.95
boostrap ornekleme 49.18 49.12 49.25 0.99
---------------------------------------------------------------------
Table: % 95 ve % 99 Güven Aralığında 1000 Tekrarlı (Replikasyon) Boostrap Örnekleminde Pizza Fiyatlarının Ortalama Değerleri
Orjinal örneklem ve bootstrap örnekleme sonuçlarının ortalama üzerinden karşılaştırılması
birlesik=rbind(baztum, tumb1) %>% as_tibble() %>% mutate(aralik_genisligi=ustsinir-altsinir)
formattable(birlesik, align =rep("l",6), list(
`model` = formatter("span", style = ~ style(color = "black",font.weight = "bold")),
`ortalama`= color_bar("#00FF7F"),
`altsinir`= color_bar("#00BFFF"),
`ustsinir`= color_bar("#B0C4DE"),
`aralik_genisligi`= color_bar("#FA8072")
))
#alternatif olarak dilerseniz aşağıdaki kodu da yazarak farklı formatta tablo alabilirsiniz.
rbind(baztum, tumb1) %>% as_tibble() %>% mutate(aralik_genisligi=ustsinir-altsinir) %>% #pander (caption="Karşılaştırmalı Ortalama Sonuçları")
Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen karşılaştırmalı sonuçlar bir bütün olarak aşağıdaki tabloda verilmiştir. Elde edilen bulgulardan orjinal örneklemde ortalama pizza fiyatlarının bootsrap örnekleme ile elde edilen arasındaki yüksek bir fark olmadığını göstermektedir. Şimdi aşağıdaki tablodan hareket ederek ortalamalar üzerinden basitçe bias’i yani sapmayı ele alalım:
- Orjinal örneklem ile bootstrap örneklem ortalamaları arasındaki sapmamız, yani bias=49,20037-49,18349=0,01688’e eşittir.
- Biaste ortalama değerleri üzerinden gidildiğinde çok düşük farklılaşma görülmektedir. Ancak farklılaşmayı biz daha çok güven aralıklarında görüyoruz. Burada tabloda aralik genişliği bize güven aralığının üst sınırı ile alt sınırının farkını vermektedir.
c) Tekrar (Replikasyon) Sayısına Göre Ortalama Değerler Üzerinden Bootstrap Örneklemelerin Karşılaştırılması
Burada replikasyon veya iterasyon sayısına göre ortalamalar üzerinden bootstrap örneklemeler karşılaştırılmıştır. Daha önce 1000 replikasyona göre ortalamalar karşılaştırılmıştı. Burada ise 10000 replikasyona ulaşıldığında sonuçların nasıl değiştiğini görelim.
Orjinal örneklem ve bootstrap örnekleme sonuçlarının farklı replikasyonlara göre ortalama üzerinden karşılaştırılması
# Bootstrap örnekleme fonksiyonunun oluşturulması
set.seed(61)# aynı sonuçları alabilmeniz adına sabitlenmiştir.
replikasyon <-10000 #bootstrap örneklemlerin sayısı (replikasyon sayısı)
bort <-rep(NA, replikasyon)
set.seed(10)
for(i in 1:replikasyon ){
bort [i]<-mean(sample(fiyat, replace = T))
}
bort
bg=quantile(bort, c(0.025, 0.975)) # % 95 güven aralığı (CI)
bg1=quantile(bort, c(0.01, 0.99)) # % 99 güven aralığı (CI)
m=mean(bort) #ortalama
modeli="bootstrap ornekleme"
t=cbind(model=modeli, ortalama=m, altsinir=bg[1], ustsinir=bg[2])%>% as_tibble()%>% mutate(guven_araligi=0.95, replikasyon=10000)
b=cbind(model=modeli,ortalama=m, altsinir=bg1[1], ustsinir=bg1[2])%>% as_tibble()%>% mutate(guven_araligi=0.99, replikasyon=10000)
yeni=rbind(t,b)%>% mutate_at(vars(ortalama, altsinir, ustsinir), as.numeric) %>% mutate_if(is.numeric, round, 3)
birlesik=rbind(baztum, tumb1) %>% as_tibble() %>% mutate(replikasyon=1000)
modelyeni=rbind(birlesik, yeni)
bmodelyeni=rbind(cbind(birlesik[1:2,1:5],replikasyon=rep(0,2)),modelyeni[3:6,])%>% mutate_if(is.numeric, round, 3)
formattable(bmodelyeni, align =rep("l",6), list(
`model` = formatter("span", style = ~ style(color = "black",font.weight = "bold")),
`ortalama`= color_bar("#00FF7F"),
`altsinir`= color_bar("#00BFFF"),
`ustsinir`= color_bar("#B0C4DE")
))
Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen karşılaştırmalı sonuçlar bir bütün olarak aşağıdaki tabloda verilmiştir. Elde edilen bulgulardan orjinal örneklemde ortalama pizza fiyatlarının bootsrap örnekleme ile elde edilen arasındaki yüksek bir fark olmadığını göstermektedir. Şimdi aşağıdaki tablodan hareket ederek ortalamalar üzerinden basitçe bias’i yani sapmayı ele alalım:
- 1000 replikasyonda orjinal örneklem ile bootstrap örneklem ortalamaları arasındaki sapmamız, yani bias=49,20037-49,18349=0,01688’e eşittir. 10000 replikasyonda ise orjinal örneklem ile bootstrap örneklem ortalamaları arasındaki sapmamız, yani bias=49,20037-49,220=-0,02’ye eşittir.
- Biaste ortalama değerleri üzerinden gidildiğinde çok düşük farklılaşma olduğu görülmektedir.
Farklı replikasyonlara göre bootstrap örneklem ortalamaların dağılım yapısının incelenmesi
set.seed(61)# aynı sonuçları alabilmeniz adına sabitlenmiştir.
#Replikasyon sayısı 1000 olan bootstrap örneklemlerin çekilmesi
c1=fiyat %>% as_tibble()%>% specify(response = value) %>%
generate(reps = 1000, type = "bootstrap") %>% group_by(replicate) %>% summarise(ort=mean(value), ssapma=sd(value))#calculate(stat= "mean") %>% rename(ort=stat)
b1=c1 %>% ggplot(mapping = aes(x = ort)) +
geom_histogram(fill='red', color="grey")+
theme(axis.text.x = element_text(face="bold", color="black",
size=10),
axis.text.y = element_text(face="bold", color="black",
size=10),
plot.caption = element_text(hjust = 0.5, face = "bold.italic"))+
xlab("Ortalamalar") + ylab("Frekans")+ ggtitle(paste("Bootstrap Örneklem Ortalamalarının Dağılımı (n1=836, replikasyon=1000",",", "sd=", round(sd(c1$ort),3),")")) +
theme(
plot.title = element_text(color="black", size=12, face="bold", hjust = 0.5),
axis.title.x = element_text(color="black", size=11, face="bold"),
axis.title.y = element_text(color="black", size=11, face="bold"))
#Replikasyon sayısı 5000 olan bootstrap örneklemlerin çekilmesi
c2=fiyat %>% as_tibble()%>% specify(response = value) %>%
generate(reps = 5000, type = "bootstrap")%>% group_by(replicate) %>% summarise(ort=mean(value), ssapma=sd(value))
b2=c2 %>% ggplot(mapping = aes(x = ort)) +
geom_histogram(fill='green', color="grey")+
theme(axis.text.x = element_text(face="bold", color="black",
size=10),
axis.text.y = element_text(face="bold", color="black",
size=10),
plot.caption = element_text(hjust = 0.5, face = "bold.italic"))+
xlab("Ortalamalar") + ylab("Frekans")+ ggtitle(paste("Bootstrap Örneklem Ortalamalarının Dağılımı (n1=836, replikasyon=5000",",", "sd=", round(sd(c2$ort),3),")"))+
theme(
plot.title = element_text(color="black", size=12, face="bold", hjust = 0.5),
axis.title.x = element_text(color="black", size=11, face="bold"),
axis.title.y = element_text(color="black", size=11, face="bold"))
#Replikasyon sayısı 5000 olan bootstrap örneklemlerin çekilmesi
c3=fiyat %>% as_tibble()%>% specify(response = value) %>%
generate(reps = 1000, type = "bootstrap")%>% group_by(replicate) %>% summarise(ort=mean(value), ssapma=sd(value))
b3=c3 %>% ggplot(mapping = aes(x = ort)) +
geom_histogram(fill='brown', color="grey")+
theme(axis.text.x = element_text(face="bold", color="black",
size=10),
axis.text.y = element_text(face="bold", color="black",
size=10),
plot.caption = element_text(hjust = 0.5, face = "bold.italic"))+
xlab("Ortalamalar") + ylab("Frekans")+ ggtitle(paste("Bootstrap Örneklem Ortalamalarının Dağılımı (n1=836, replikasyon=10000",",", "sd=", round(sd(c3$ort),3),")"))+
theme(
plot.title = element_text(color="black", size=12, face="bold", hjust = 0.5),
axis.title.x = element_text(color="black", size=11, face="bold"),
axis.title.y = element_text(color="black", size=11, face="bold"))
#grafiklerin bir arada verilmesi
ggarrange(b1,b2,b3, ncol = 1)
Yukarıdaki R kod bloğunun çalıştırılmasından sonra fiyat (price) değişkenine göre replikasyon sayısı 1000, 5000 ve 10000 olan bootstrap örneklemlerinin ortalamalarının grafiği aşağıdaki şekilde verilmiştir. Bootstrap örneklem ortalamalarının dağılımına bakıldığında birbirlerine göre aşırı bir farklılık ortaya koymadığı görülmektedir. Zira biz bunu grafiklerdeki standart sapma (sd) değerlerinin birbirlerine benzerliğinden de anlıyoruz. Şekilde örneklem ortalamalarının dağılımlarının üçü de merkezi limit teoremi (central limit theorem) ve büyük sayı yasası (law of large numbers) gereğince normal dağılıma evrildiği görülmektedir. Ancak burada standart normal dağılımdan bahsedemeyiz. Standart normal dağılım, ortalaması 0, standart sapması ise 1 olan dağılımı ifade etmektedir.
Bulgular sapmaların oldukça düşük olduğunu ortaya koymaktadır. Bu durum bize bootstrap örneklemenin oldukça yüksek bir doğrulukla orjinal örneklemdeki ortalamaları tahmin ettiğini ve bu sapmaların replikasyonlara göre farklılaştığını göstermektedir.
Özetle yapılan bu uygulamalı çalışma ile özellikle veri bilimi (data science) ile ilgilenen akademi ve saha çalışanlarına bir katkı sunulması amaçlanmıştır.
Burada örnek uygulamalar üzerinden bootstrap örneklemeye giriş yapılmıştır. Zamanım olursa bootstrap örnekleme yöntemi ile analiz yöntemlerinin performansı ve duyarlılığı başta olmak üzere diğer çalışmalar üzerinde de çalışmalar yapılacaktır.
Faydalı olması ve farkındalık oluşturması dileğiyle.
Bilimle ve teknolojiyle kalınız.
Saygılarımla…
Note: It can not be cited or copied without referencing.
Not: Kaynak gösterilmeden alıntı yapılamaz veya kopyalanamaz.
Yararlanılan Kaynaklar
- Microsoft Office Excel 2016. Microsoft
- The R Project for Statistical Computing. http://www.r-project.org/
- https://web.stanford.edu/class/archive/cs/cs109/cs109.1176/lectures/18-Samples.pdf
- https://web.stanford.edu/class/archive/cs/cs109/cs109.1178/lectureHandouts/170-samples.pdf
- http://web.stanford.edu/~rjohari/teaching/notes/226_lecture13_inference.pdf
- Fook-Chong, Stephanie & Choo, Robin. (2011). Introduction to Bootstrap. Proceedings of Singapore Healthcare. 20. 236-240. 10.1177/201010581102000314.
- https://www.stat.cmu.edu/~ryantibs/advmethods/notes/bootstrap.pdf
- https://www.stat.cmu.edu/~cshalizi/uADA/12/lectures/ch05.pdf
- Efron, B. (1979). Bootstrap Methods: Another Look at the Jackknife. The Annals of Statistics, 7(1), 1-26. Retrieved from http://www.jstor.org/stable/2958830.
- Efron, B. (1987). Better Bootstrap Confidence Intervals. Journal of the American Statistical Association, 82(397), 171-185. doi:10.2307/2289144
- LaFontaine, Denise (2021) “The History of Bootstrapping: Tracing the Development of Resampling with Replacement,” The Mathematics Enthusiast: Vol. 18 : No. 1 , Article 8. Available at: https://scholarworks.umt.edu/tme/vol18/iss1/8
- https://cran.r-project.org/web/packages/infer/vignettes/observed_stat_examples.html
- https://www2.stat.duke.edu/courses/Fall19/sta199.001/slides/lec-slides/09b-bootstrap-pt2.pdf
- https://tevfikbulut.com/2020/05/09/guven-araligi-hesaplama-confidence-interval-ci-calculation/
- https://tevfikbulut.com/2020/05/17/tekrarsiz-basit-tesadufi-ornekleme-yontemi-kullanilarak-z-tablosu-uzerinden-guven-araliginin-hesaplanmasina-yonelik-bir-simulasyon-calismasi-a-simulation-study-for-the-calculation-of-confidence-inter/
- https://scholarworks.umt.edu/cgi/viewcontent.cgi?article=1515&context=tme
- https://tevfikbulut.com/2020/05/20/r-programlama-diliyle-sistematik-ornekleme-uzerine-bir-vaka-calismasi-a-case-study-on-systematic-sampling-with-r-programming-language/
- https://www.statology.org/bootstrapping-in-r/
- https://tevfikbulut.com/2020/05/18/tekrarsiz-basit-tesadufi-ornekleme-yontemi-kullanilarak-t-dagilim-tablosu-uzerinden-guven-araliginin-hesaplanmasina-yonelik-bir-simulasyon-calismasi-a-simulation-study-for-the-calculation-of-confiden/