📊 stats - İstatistik ve Olasılık
Descriptive Stats, Hypothesis Tests, Distributions, Regression
🚀 Hızlı Başlangıç
içe_aktar stats
değişken data = [2.5, 3.1, 4.8, 5.2, 6.0, 7.3, 8.1]
değişken n = 7
// Merkez eğilimi ölçüleri
değişken mean = stats_ortalama(data, n) // 5.29
değişken median = stats_medyan(data, n) // 5.2
değişken mode = stats_mod(data, n, 0.1) // En sık değer
// Yayılım ölçüleri
değişken variance = stats_varyans(data, n) // 3.68
değişken std_dev = stats_standart_sapma(data, n) // 1.92
değişken range = stats_aralık(data, n) // 5.6
📚 API Referansı
Tanımlayıcı İstatistikler
Merkez Eğilimi
stats_ortalama(data: [ondalık], n: tam_sayı) -> ondalık
Aritmetik ortalama: x̄ = (Σxᵢ) / n
stats_ağırlıklı_ortalama(data: [ondalık], weights: [ondalık], n: tam_sayı) -> ondalık
Ağırlıklı ortalama: x̄ = (Σwᵢxᵢ) / (Σwᵢ)
Örnek:
değişken notlar = [70.0, 80.0, 90.0]
değişken ağırlıklar = [0.2, 0.3, 0.5] // %20, %30, %50
değişken ort = stats_ağırlıklı_ortalama(notlar, ağırlıklar, 3) // 82.0
stats_geometrik_ortalama(data: [ondalık], n: tam_sayı) -> ondalık
Geometrik ortalama: ⁿ√(x₁ × x₂ × ... × xₙ)
Kullanım: Büyüme oranları, indeksler
stats_harmonik_ortalama(data: [ondalık], n: tam_sayı) -> ondalık
Harmonik ortalama: n / (Σ(1/xᵢ))
Kullanım: Hızlar, oranlar
stats_medyan(data: [ondalık], n: tam_sayı) -> ondalık
Ortanca değer (50. percentile)
stats_mod(data: [ondalık], n: tam_sayı, tolerans: ondalık) -> ondalık
En sık görülen değer
Yayılım Ölçüleri
stats_varyans(data: [ondalık], n: tam_sayı) -> ondalık
Örneklem varyansı: s² = Σ(xᵢ - x̄)² / (n-1)
stats_popülasyon_varyansı(data: [ondalık], n: tam_sayı) -> ondalık
Popülasyon varyansı: σ² = Σ(xᵢ - μ)² / n
stats_standart_sapma(data: [ondalık], n: tam_sayı) -> ondalık
Standart sapma: s = √(varyans)
stats_ortalama_mutlak_sapma(data: [ondalık], n: tam_sayı) -> ondalık
MAD = (Σ|xᵢ - x̄|) / n
stats_aralık(data: [ondalık], n: tam_sayı) -> ondalık
Değişim aralığı: max - min
Quantile ve Percentile
stats_quantile(data: [ondalık], n: tam_sayı, p: ondalık) -> ondalık
p-quantile değerini hesaplar (0 ≤ p ≤ 1)
Örnek:
değişken data = [1.0, 2.0, 3.0, 4.0, 5.0]
değişken q1 = stats_quantile(data, 5, 0.25) // 2.0 (1. çeyrek)
değişken q2 = stats_quantile(data, 5, 0.50) // 3.0 (medyan)
değişken q3 = stats_quantile(data, 5, 0.75) // 4.0 (3. çeyrek)
stats_percentile(data: [ondalık], n: tam_sayı, p: tam_sayı) -> ondalık
p-percentile (0-100 arası)
stats_iqr(data: [ondalık], n: tam_sayı) -> ondalık
Çeyrekler arası aralık: IQR = Q3 - Q1
Kullanım: Outlier tespiti
Momentler
stats_skewness(data: [ondalık], n: tam_sayı) -> ondalık
Çarpıklık (skewness): Dağılımın asimetrisi
- < 0: Sola çarpık
- = 0: Simetrik
-
0: Sağa çarpık
stats_kurtosis(data: [ondalık], n: tam_sayı) -> ondalık
Basıklık (kurtosis): Kuyruk kalınlığı
- < 0: Düz (platykurtic)
- = 0: Normal (mesokurtic)
-
0: Sivri (leptokurtic)
Örnek:
değişken data = [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0]
değişken skew = stats_skewness(data, 7) // ≈ 0 (simetrik)
değişken kurt = stats_kurtosis(data, 7) // Basıklık
Korelasyon ve Kovaryans
stats_covariance(x: [ondalık], y: [ondalık], n: tam_sayı) -> ondalık
Kovaryans: cov(X,Y) = Σ(xᵢ - x̄)(yᵢ - ȳ) / (n-1)
stats_correlation(x: [ondalık], y: [ondalık], n: tam_sayı) -> ondalık
Pearson korelasyon katsayısı: r = cov(X,Y) / (σₓσᵧ)
- -1: Mükemmel negatif korelasyon
- 0: Korelasyon yok
- +1: Mükemmel pozitif korelasyon
Örnek:
değişken boy = [160.0, 165.0, 170.0, 175.0, 180.0]
değişken kilo = [55.0, 60.0, 65.0, 75.0, 80.0]
değişken r = stats_correlation(boy, kilo, 5) // ≈ 0.98 (güçlü pozitif)
stats_r_squared(x: [ondalık], y: [ondalık], n: tam_sayı) -> ondalık
Determinasyon katsayısı: R² = r²
Yorum: Varyansın açıklanan oranı
Doğrusal Regresyon
stats_linear_regression(x: [ondalık], y: [ondalık], n: tam_sayı) -> (ondalık, ondalık, ondalık)
Basit doğrusal regresyon: y = a + bx
Döndürür: (a, b, R²)
- a: Y-kesim noktası (intercept)
- b: Eğim (slope)
- R²: Belirlilik katsayısı
Örnek:
değişken X = [1.0, 2.0, 3.0, 4.0, 5.0]
değişken y = [2.1, 3.9, 6.2, 8.1, 9.8]
değişken (a, b, r2) = stats_linear_regression(X, y, 5)
yazdır("y = " + a + " + " + b + "x")
yazdır("R² = " + r2)
// y = 0.2 + 1.96x
// R² = 0.997
stats_predict_linear(x: ondalık, a: ondalık, b: ondalık) -> ondalık
Modelden tahmin: ŷ = a + bx
Hipotez Testleri
stats_t_score(data: [ondalık], n: tam_sayı, μ0: ondalık) -> ondalık
Tek örneklem t-skoru: t = (x̄ - μ₀) / (s / √n)
Örnek:
// H₀: μ = 100
değişken scores = [105.0, 110.0, 95.0, 108.0, 102.0]
değişken t = stats_t_score(scores, 5, 100.0)
eğer (math_mutlak(t) > 2.776) ise yap // α = 0.05, df = 4
yazdır("H₀ reddedildi!")
son
stats_t_test_independent(x: [ondalık], nx: tam_sayı, y: [ondalık], ny: tam_sayı) -> ondalık
İki bağımsız örneklem t-testi
Kullanım: İki grubun ortalamalarını karşılaştırma
stats_t_test_paired(x: [ondalık], y: [ondalık], n: tam_sayı) -> ondalık
Eşleştirilmiş t-testi
Kullanım: Önce-sonra karşılaştırmaları
stats_chi_square(observed: [ondalık], expected: [ondalık], k: tam_sayı) -> ondalık
Ki-kare testi: χ² = Σ((O - E)² / E)
Kullanım: Kategorik veri analizi, uyum iyiliği
stats_f_statistic(between_var: ondalık, within_var: ondalık) -> ondalık
F-istatistiği (ANOVA için)
Güven Aralıkları
stats_confidence_interval(data: [ondalık], n: tam_sayı, t_critical: ondalık) -> (ondalık, ondalık)
Ortalama için güven aralığı
Döndürür: (alt_sınır, üst_sınır)
Örnek:
değişken data = [23.0, 25.0, 27.0, 24.0, 26.0]
değişken t_crit = 2.776 // %95 güven, df=4
değişken (lower, upper) = stats_confidence_interval(data, 5, t_crit)
yazdır("95% CI: [" + lower + ", " + upper + "]")
stats_standard_error(data: [ondalık], n: tam_sayı) -> ondalık
Standart hata: SE = s / √n
Olasılık Dağılımları
PDF (Probability Density Function)
stats_normal_pdf(x: ondalık, μ: ondalık, σ: ondalık) -> ondalık
Normal dağılım PDF: f(x) = (1/(σ√(2π))) exp(-(x-μ)²/(2σ²))
stats_standard_normal_pdf(z: ondalık) -> ondalık
Standart normal (μ=0, σ=1)
stats_exponential_pdf(x: ondalık, λ: ondalık) -> ondalık
Üstel dağılım: f(x) = λe^(-λx)
stats_uniform_pdf(x: ondalık, a: ondalık, b: ondalık) -> ondalık
Uniform dağılım
CDF (Cumulative Distribution Function)
stats_normal_cdf(x: ondalık, μ: ondalık, σ: ondalık) -> ondalık
Normal dağılım CDF: P(X ≤ x)
Örnek:
// IQ testinde 110'dan düşük olma olasılığı
// IQ ~ N(100, 15)
değişken p = stats_normal_cdf(110.0, 100.0, 15.0) // ≈ 0.747
yazdır("P(IQ ≤ 110) = " + (p * 100.0) + "%")
stats_standard_normal_cdf(z: ondalık) -> ondalık
Standart normal CDF
stats_exponential_cdf(x: ondalık, λ: ondalık) -> ondalık
Üstel dağılım CDF
Yeniden Örnekleme
stats_bootstrap_sample(data: [ondalık], n: tam_sayı, tohum: tam_sayı) -> [ondalık]
Bootstrap yeniden örnekleme (replacement ile)
Kullanım:
// Bootstrap güven aralığı
değişken data = [...]
değişken n_bootstrap = 1000
değişken means = yeni_dizi(n_bootstrap)
değişken i = 0
iken (i < n_bootstrap) yap
değişken sample = stats_bootstrap_sample(data, n, i)
means[i] = stats_ortalama(sample, n)
i = i + 1
son
// %95 bootstrap CI
değişken ci_lower = stats_quantile(means, n_bootstrap, 0.025)
değişken ci_upper = stats_quantile(means, n_bootstrap, 0.975)
stats_jackknife_sample(data: [ondalık], n: tam_sayı, exclude_index: tam_sayı) -> [ondalık]
Jackknife yeniden örnekleme (bir eleman çıkarılmış)
Non-Parametric Testler
stats_mann_whitney_u(x: [ondalık], nx: tam_sayı, y: [ondalık], ny: tam_sayı) -> ondalık
Mann-Whitney U testi (rank-sum test)
Kullanım: Normal dağılmayan iki grup karşılaştırması
stats_wilcoxon_signed_rank(x: [ondalık], y: [ondalık], n: tam_sayı) -> ondalık
Wilcoxon signed-rank testi
Kullanım: Eşleştirilmiş non-parametric karşılaştırma
Histogram ve Binning
stats_histogram(data: [ondalık], n: tam_sayı, bin_sayısı: tam_sayı) -> [tam_sayı]
Histogram oluşturur (eşit genişlikte binler)
stats_sturges_bins(n: tam_sayı) -> tam_sayı
Sturges kuralı ile optimal bin sayısı: k = ⌈log₂(n) + 1⌉
Örnek:
değişken data = [1.2, 2.3, 1.8, 3.5, 2.1, ...]
değişken n = 100
değişken k = stats_sturges_bins(n) // ≈ 8
değişken hist = stats_histogram(data, n, k)
Entropi
stats_entropy(probabilities: [ondalık], n: tam_sayı) -> ondalık
Shannon entropisi: H = -Σ(pᵢ log₂(pᵢ))
stats_kl_divergence(p: [ondalık], q: [ondalık], n: tam_sayı) -> ondalık
Kullback-Leibler divergence: D_KL(P||Q) = Σ pᵢ log(pᵢ/qᵢ)
Effect Sizes
stats_cohens_d(x: [ondalık], nx: tam_sayı, y: [ondalık], ny: tam_sayı) -> ondalık
Cohen's d effect size: d = (x̄ - ȳ) / s_pooled
Yorum:
- |d| < 0.2: Küçük
- |d| ≈ 0.5: Orta
- |d| > 0.8: Büyük
stats_hedges_g(x: [ondalık], nx: tam_sayı, y: [ondalık], ny: tam_sayı) -> ondalık
Hedge's g (düzeltilmiş Cohen's d)
Veri Normalizasyonu
stats_normalize(data: [ondalık], n: tam_sayı) -> [ondalık]
Z-score standardization: z = (x - μ) / σ
stats_min_max_normalize(data: [ondalık], n: tam_sayı) -> [ondalık]
Min-max normalizasyonu: x' = (x - min) / (max - min)
Outlier Tespiti
stats_is_outlier(x: ondalık, data: [ondalık], n: tam_sayı, multiplier: ondalık) -> mantıksal
IQR metoduyla outlier tespiti
Kural: x < Q1 - k·IQR veya x > Q3 + k·IQR (genellikle k=1.5)
Utilities
stats_cumsum(data: [ondalık], n: tam_sayı) -> [ondalık]
Kümülatif toplam
stats_moving_average(data: [ondalık], n: tam_sayı, pencere: tam_sayı) -> [ondalık]
Hareketli ortalama
🔬 Kullanım Örnekleri
Örnek 1: A/B Testi
kullan stats
// Versiyon A ve B'nin conversion rate'lerini karşılaştır
değişken groupA = [0.12, 0.15, 0.11, 0.13, 0.14]
değişken groupB = [0.18, 0.20, 0.17, 0.19, 0.21]
// t-testi
değişken t = stats_t_test_independent(groupA, 5, groupB, 5)
yazdır("t-istatistiği: " + t)
// Effect size
değişken d = stats_cohens_d(groupA, 5, groupB, 5)
yazdır("Cohen's d: " + d)
eğer (math_mutlak(t) > 2.306) ise yap // α=0.05, df=8
yazdır("Versiyon B anlamlı derecede daha iyi!")
son
Örnek 2: Veri Kalite Kontrolü
kullan stats
fonksiyon quality_check(data: [ondalık], n: tam_sayı): hiçbir yap
// Tanımlayıcı istatistikler
değişken mean = stats_ortalama(data, n)
değişken std = stats_standart_sapma(data, n)
değişken median = stats_medyan(data, n)
yazdır("Ortalama: " + mean)
yazdır("Std Dev: " + std)
yazdır("Medyan: " + median)
// Dağılım özellikleri
değişken skew = stats_skewness(data, n)
değişken kurt = stats_kurtosis(data, n)
eğer (math_mutlak(skew) > 1.0) ise yap
yazdır("UYARI: Yüksek çarpıklık tespit edildi!")
son
// Outlier tespiti
değişken outlier_count = 0
değişken i = 0
iken (i < n) yap
eğer (stats_is_outlier(data[i], data, n, 1.5)) ise yap
outlier_count = outlier_count + 1
son
i = i + 1
son
eğer (outlier_count > 0) ise yap
yazdır("Outlier sayısı: " + outlier_count)
son
son
Örnek 3: Regresyon Analizi
kullan stats
kullan fmt
fonksiyon regression_analysis(X: [ondalık], y: [ondalık], n: tam_sayı): hiçbir yap
// Regresyon modelini fit et
değişken (a, b, r2) = stats_linear_regression(X, y, n)
yazdır("\n=== REGRESYON ANALİZİ ===")
yazdır("Model: y = " + fmt_float_precision(a, 3) + " + " +
fmt_float_precision(b, 3) + "x")
yazdır("R² = " + fmt_percent(r2))
// Model kalitesi
eğer (r2 > 0.9) ise yap
yazdır("Model kalitesi: MÜKEMMELyazdır("Model kalitesi: ORTA")
son
// Tahminler ve residual'lar
değişken residuals = yeni_dizi(n)
değişken i = 0
iken (i < n) yap
değişken y_pred = stats_predict_linear(X[i], a, b)
residuals[i] = y[i] - y_pred
i = i + 1
son
// Residual analizi
değişken residual_mean = stats_ortalama(residuals, n)
eğer (math_mutlak(residual_mean) > 0.1) ise yap
yazdır("UYARI: Residual ortalaması sıfırdan farklı!")
son
son