R’da quantile() Fonksiyonu: Kapsamlı Bir Rehber
Veri analizi, istatistik ve makine öğrenimi gibi alanlarda, veri setlerinin dağılımını anlamak kritik öneme sahiptir. Bir veri setinin merkezi eğilimini (ortalama, medyan) ve yayılımını (standart sapma, varyans) incelemek yaygın yaklaşımlardır. Ancak, verinin nasıl yayıldığını ve belirli yüzdelik dilimlerdeki değerlerini anlamak için kuantiller (yüzdelikler) vazgeçilmez bir araçtır. R programlama dilinde, bu ihtiyacı karşılayan güçlü ve esnek bir fonksiyon olan quantile() fonksiyonu bulunur. Bu rehberde, quantile() fonksiyonunun temel kullanımından gelişmiş özelliklerine, farklı hesaplama yöntemlerinden pratik uygulamalarına kadar her yönünü detaylı bir şekilde inceleyeceğiz.
quantile() Fonksiyonunun Temel Kullanımı
quantile() fonksiyonu, bir sayısal vektördeki belirli olasılık (yüzdelik) değerlerine karşılık gelen kuantilleri hesaplamak için kullanılır. Bu fonksiyon, veri setinizin iç yapısını anlamanıza, aykırı değerleri tespit etmenize ve veri dağılımını özetlemenize yardımcı olur.
Sözdizimi
quantile() fonksiyonunun genel sözdizimi şöyledir:
quantile(x, probs = seq(0, 1, 0.25), na.rm = FALSE, names = TRUE, type = 7, ...)
Parametreler
x: Kuantillerin hesaplanacağı sayısal vektör. Bu, bir veri çerçevesinin sütunu, bir liste elemanı veya basit bir sayısal vektör olabilir.probs: Kuantillerin hesaplanacağı olasılık değerlerini (0 ile 1 arasında) içeren sayısal bir vektör. Varsayılan olarak, bu parametreseq(0, 1, 0.25)olarak ayarlanmıştır, yani çeyreklikler (0%, 25%, 50%, 75%, 100%) hesaplanır. Örneğin, %90’lık kuantili almak içinprobs = 0.90veya %5 ve %95’lik kuantilleri almak içinprobs = c(0.05, 0.95)kullanabilirsiniz.na.rm: Mantıksal bir değerdir (TRUE/FALSE). EğerTRUEise,xvektöründekiNA(eksik) değerler hesaplamadan önce çıkarılır. Varsayılan olarakFALSE‘dur, yaniNAdeğerleri varsa sonuç daNAolur.names: Mantıksal bir değerdir. EğerTRUEise, sonuç vektöründeki kuantillere ilgili olasılık değerlerini gösteren isimler atanır. Varsayılan olarakTRUE‘dur.type: Kuantil hesaplama algoritmasını belirten bir tam sayı (1’den 9’a kadar). Bu parametre, farklı istatistiksel yazılımların veya teorik yaklaşımların kuantil tanımındaki ince farkları yansıtır. Varsayılan değer7‘dir ve genellikle güvenli bir seçim olarak kabul edilir. Bu parametreye daha sonra detaylı değineceğiz....: Diğer argümanlar (nadiren kullanılır).
Basit Örnekler
Şimdi birkaç basit örnekle quantile() fonksiyonunun nasıl çalıştığını görelim:
# Örnek bir veri seti oluşturalım
set.seed(123) # Tekrarlanabilirlik için
veri <- c(12, 15, 18, 20, 22, 25, 28, 30, 33, 35, 38, 40, 42, 45, 48, 50)
Varsayılan olarak çeyreklikleri hesapla (0%, 25%, 50%, 75%, 100%)
quantile(veri)
Çıktı:
0% 25% 50% 75% 100%
12 21.5 31.5 40.5 50
Sadece medyanı (50. yüzdelik) hesapla
quantile(veri, probs = 0.5)
Çıktı:
50%
31.5
%10 ve %90'lık kuantilleri hesapla
quantile(veri, probs = c(0.10, 0.90))
Çıktı:
10% 90%
16.5 43.5
Veri setinde NA değerleri varken
veri_na <- c(veri, NA, 55)
quantile(veri_na) # NA değerleri olduğu için sonuç NA olur
Çıktı:
0% 25% 50% 75% 100%
NA NA NA NA NA
NA değerlerini göz ardı ederek hesapla
quantile(veri_na, na.rm = TRUE)
Çıktı:
0% 25% 50% 75% 100%
12 22.5 32.5 41.5 55
Sonuçlara isim atama
quantile(veri, probs = c(0.25, 0.75), names = FALSE) # İsimsiz çıktı
Çıktı:
21.5 40.5
type Parametresi ve Farklı Kuantil Hesaplama Yöntemleri
quantile() fonksiyonunun en teknik ve bazen kafa karıştırıcı olabilen parametresi type‘tır. Bu parametre, bir veri setindeki kuantillerin nasıl tahmin edileceğini belirleyen dokuz farklı algoritmayı temsil eder. Bu algoritmalar, özellikle küçük veri setleri veya kesikli dağılımlar için farklı sonuçlar üretebilir. Farklı algoritmaların varlığı, kuantilin matematiksel tanımının tek bir yorumu olmamasından kaynaklanır; genellikle sürekli bir dağılımdan örneklenen kesikli verilere uygulanırken enterpolasyon yöntemleri devreye girer.
İşte en yaygın kullanılan type değerleri ve kısa açıklamaları:
type = 1: Ters empirik dağılım fonksiyonu. En basit yöntemdir, gözlem değerlerinden birini döndürür.type = 2:type=1‘in ortalamasıdır.type = 3: SAS sistemindekiPCTLDEF=3‘e benzer. En yakın tek sayılı indekse göre enterpolasyon yapar.type = 4: SAS sistemindekiPCTLDEF=4‘e benzer. En yakın çift sayılı indekse göre enterpolasyon yapar.type = 5: Doğrusal enterpolasyon, gözlemlerin orta noktalarını kullanır.type = 6: Doğrusal enterpolasyon, Excel’inPERCENTILE.INCfonksiyonuna benzer.type = 7(Varsayılan): S ve R’ın varsayılan yöntemidir. Empirik dağılım fonksiyonunun doğrusal enterpolasyonunu kullanır. Sürekli veriler için genellikle iyi bir seçimdir ve en yaygın olarak kullanılır.type = 8: Plotting pozisyonlarına dayalı doğrusal enterpolasyon. Medyan konumlarını kullanır.type = 9: Plotting pozisyonlarına dayalı doğrusal enterpolasyon. Ortalama konumlarını kullanır.
Bu farklı type değerleri, özellikle küçük veri setlerinde veya kuantilin tam olarak bir veri noktasına denk gelmediği durumlarda farklı sonuçlar verebilir. Büyük veri setlerinde ise sonuçlar genellikle birbirine yakınlaşır.
type Parametresinin Farklılıklarını Gösteren Örnek
veri_kucuk <- 1:10 # 1'den 10'a kadar sayılar
%50'lik kuantil (medyan) için farklı tiplerin karşılaştırması
cat("Type 1:", quantile(veri_kucuk, probs = 0.5, type = 1), "\n")
cat("Type 2:", quantile(veri_kucuk, probs = 0.5, type = 2), "\n")
cat("Type 3:", quantile(veri_kucuk, probs = 0.5, type = 3), "\n")
cat("Type 4:", quantile(veri_kucuk, probs = 0.5, type = 4), "\n")
cat("Type 5:", quantile(veri_kucuk, probs = 0.5, type = 5), "\n")
cat("Type 6:", quantile(veri_kucuk, probs = 0.5, type = 6), "\n")
cat("Type 7 (Default):", quantile(veri_kucuk, probs = 0.5, type = 7), "\n")
cat("Type 8:", quantile(veri_kucuk, probs = 0.5, type = 8), "\n")
cat("Type 9:", quantile(veri_kucuk, probs = 0.5, type = 9), "\n")
Çıktı örnekleri (farklı R versiyonlarında veya veri setlerinde değişebilir):
Type 1: 5
Type 2: 5
Type 3: 5
Type 4: 6
Type 5: 5.5
Type 6: 5.5
Type 7 (Default): 5.5
Type 8: 5.5
Type 9: 5.5
Yukarıdaki örnekte, 1’den 10’a kadar olan sayılar için medyan (50. yüzdelik) hesaplanırken, bazı tipler 5 veya 6 gibi tam sayı değerleri döndürürken, çoğu tip 5.5 gibi enterpolasyonlu bir değer döndürmüştür. Bu farklılıklar, her bir tipin kuantili nasıl tanımladığı ve gözlemler arasında nasıl enterpolasyon yaptığı ile ilgilidir. Genellikle, sürekli bir dağılımdan geldiği varsayılan veriler için type = 7 (varsayılan) veya type = 8/type = 9 tercih edilirken, kesikli veriler veya belirli bir yazılımla uyumluluk gerektiğinde diğer tipler kullanılabilir.
Pratik Uygulamalar ve İpuçları
quantile() fonksiyonu, veri analizinde çok çeşitli pratik senaryolarda kullanılabilir. İşte bazı örnekler ve ipuçları:
Aykırı Değer Tespiti
Kuantiller, özellikle çeyreklikler arası aralık (IQR – Interquartile Range) kullanarak aykırı değerleri tespit etmek için güçlü bir yöntem sağlar. IQR, 75. yüzdelik (Q3) ile 25. yüzdelik (Q1) arasındaki farktır. Genellikle, bir değerin Q1 – 1.5 IQR’den küçük veya Q3 + 1.5 IQR’den büyük olması aykırı değer olarak kabul edilir.
# IQR kullanarak aykırı değer tespiti
veri_aykiri <- c(10, 12, 15, 18, 20, 22, 25, 28, 30, 80, 85)
kuantiller <- quantile(veri_aykiri, probs = c(0.25, 0.75))
Q1 <- kuantiller[1]
Q3 <- kuantiller[2]
IQR <- Q3 - Q1
alt_sinir <- Q1 - 1.5 * IQR
ust_sinir <- Q3 + 1.5 * IQR
aykiri_degerler <- veri_aykiri[veri_aykiri < alt_sinir | veri_aykiri > ust_sinir]
cat("Q1:", Q1, "\n")
cat("Q3:", Q3, "\n")
cat("IQR:", IQR, "\n")
cat("Alt Sınır:", alt_sinir, "\n")
cat("Üst Sınır:", ust_sinir, "\n")
cat("Aykırı Değerler:", aykiri_degerler, "\n")
Çıktı: Aykırı Değerler: 80 85
Veri Dağılımını Anlama
Kuantiller, bir veri setinin merkezi eğilimini, yayılımını ve çarpıklığını hızlıca özetlemenize olanak tanır. Örneğin, medyanın (50. yüzdelik) ortalamadan ne kadar farklı olduğunu veya Q1 ile medyan arasındaki mesafenin medyan ile Q3 arasındaki mesafeden ne kadar farklı olduğunu inceleyerek dağılımın çarpık olup olmadığını anlayabilirsiniz.
Karşılaştırmalı Analiz
Farklı gruplar veya zaman dilimleri arasındaki verileri karşılaştırmak için kuantilleri kullanabilirsiniz. Örneğin, iki farklı ürünün satış fiyatlarının %90’lık kuantillerini karşılaştırarak hangi ürünün daha yüksek fiyatlı segmentte yer aldığını görebilirsiniz.
urun_A_fiyatlar <- c(100, 120, 150, 130, 110, 180, 140, 160)
urun_B_fiyatlar <- c(90, 110, 100, 120, 130, 105, 115, 125)
quantile(urun_A_fiyatlar, probs = 0.90)
quantile(urun_B_fiyatlar, probs = 0.90)
Bu örnekte, A ürününün %90'lık fiyatı (174) B ürününün %90'lık fiyatından (126.5) daha yüksek.
Performans Metrikleri
Sistem performansı, ağ gecikmesi veya servis yanıt süreleri gibi metriklerde, ortalama yerine yüksek yüzdelikler (örneğin, %95 veya %99) kullanmak daha anlamlı olabilir. Bu, en kötü durum senaryolarında dahi sistemin ne kadar iyi performans gösterdiğini anlamanıza yardımcı olur.
Dikkat Edilmesi Gerekenler
- Örneklem Boyutu: Küçük örneklemlerde,
typeparametresinin seçimi sonuçları önemli ölçüde etkileyebilir. Büyük örneklemlerde bu fark genellikle azalır. - Veri Tipi: Verinizin sürekli mi yoksa kesikli mi olduğunu göz önünde bulundurun. Sürekli veriler için enterpolasyonlu tipler (varsayılan
type = 7) daha uygunken, kesikli veriler için bazen enterpolasyon yapmayan tipler daha anlamlı olabilir. - Yorumlama: Elde ettiğiniz kuantil değerlerini her zaman verinizin bağlamında yorumlayın. Örneğin, %90’lık kuantil, verilerin %90’ının bu değerin altında olduğunu gösterir.
Sonuç ve Sıkça Sorulan Sorular (SSS)
quantile() fonksiyonu, R’daki en temel ancak en güçlü istatistiksel araçlardan biridir. Veri setlerinin dağılımını hızlıca anlamak, aykırı değerleri tespit etmek ve farklı grupları karşılaştırmak için vazgeçilmezdir. type parametresinin nüanslarını anlamak, analizinizi daha doğru ve güvenilir hale getirecektir.
Sıkça Sorulan Sorular (SSS)
S1: quantile() ile summary() arasındaki fark nedir?
C1: summary() fonksiyonu, bir sayısal vektör için minimum, maksimum, medyan, Q1 ve Q3 gibi sabit istatistikleri döndürür. quantile() ise, istediğiniz herhangi bir yüzdelik dilimini (olasılığı) belirterek daha esnek bir şekilde kuantilleri hesaplamanıza olanak tanır. summary() aslında quantile() fonksiyonunu belirli probs değerleriyle çağırır.
S2: Hangi type değerini kullanmalıyım?
C2: Çoğu durumda ve sürekli veriler için varsayılan type = 7 iyi bir seçimdir ve genellikle diğer istatistiksel yazılımların sonuçlarıyla uyumludur. Ancak, belirli bir yazılımla (örneğin SAS veya Excel) uyumluluk sağlamanız gerekiyorsa veya verinizin doğası (kesikli olması gibi) belirli bir type değerini gerektiriyorsa, diğer tipleri deneyebilirsiniz. Küçük örneklemler için farklı tipler arasındaki farklar daha belirgin olabilir.
S3: Kuantil hesaplarken NA değerlerini nasıl yönetmeliyim?
C3: na.rm = TRUE argümanını kullanarak NA değerlerini hesaplamadan çıkarabilirsiniz. Eğer na.rm = FALSE (varsayılan) bırakılırsa ve vektörde NA değerleri varsa, sonuç da NA olacaktır. Hangi yaklaşımın doğru olduğu, eksik verilerle ilgili analitik stratejinize bağlıdır (örneğin, eksik verileri impute etmek veya tamamen göz ardı etmek).
S4: Çok büyük veri setlerinde quantile() performansı nasıldır?
C4: R’daki quantile() fonksiyonu, sıralama algoritmalarına dayandığı için genellikle oldukça verimlidir. Ancak, milyarlarca elemanı olan aşırı büyük veri setlerinde performans sorunları yaşanabilir. Bu tür durumlarda, data.table veya dplyr gibi paketlerin optimize edilmiş fonksiyonlarını kullanmak veya büyük veri işleme tekniklerini (örneğin, örnekleme veya dağıtılmış hesaplama) düşünmek faydalı olabilir.
S5: Kuantiller ve yüzdelikler aynı şey midir?
C5: Evet, temelde aynı kavramı ifade ederler. Kuantil, bir veri setini eşit boyutlu dilimlere bölen değerlerdir. Yüzdelikler (percentiles) ise, kuantillerin %0 ile %100 arasında ifade edilen özel bir biçimidir. Örneğin, 0.25 kuantili %25’lik yüzdeliğe eşittir.