Pemodelan statistik memberi Anda kemampuan untuk menilai, memahami, dan membuat prediksi tentang data, ini berada di bagian paling bawah dari statistik inferensial dan dapat dianggap sebagai topik yang "harus diketahui"
Foto Oleh Lukas di Unsplash. comDaftar Isi
- pengantar
- Representasi grafis dan plot
- Memilih fungsi yang tepat
- Estimasi parameter
- Penilaian kebaikan seorang prediktor
- Tes statistik
- Tes normalitas
Dalam analisis statistik, salah satu kemungkinan analisis yang dapat dilakukan adalah memverifikasi bahwa data cocok dengan distribusi tertentu, dengan kata lain, bahwa data “cocok” dengan model teoritis tertentu.
Jenis analisis ini disebut pencocokan distribusi dan terdiri dari menemukan fungsi matematika interpolasi yang mewakili fenomena yang diamati
Contohnya adalah ketika Anda memiliki serangkaian pengamatan 𝑥1,𝑥2,𝑥𝑛… dan Anda ingin memverifikasi apakah pengamatan tersebut berasal dari populasi tertentu yang dijelaskan oleh fungsi kerapatan 𝑓(𝑥,θ), di mana θ adalah vektor parameter untuk
Dalam warna oranye. fungsi linier yang cocok (interpolasi) sekumpulan pengamatan (berwarna biru)
Dua tujuan utama dari analisis statistik adalah untuk mendeskripsikan dan menyelidiki
- Untuk menggambarkan. perkirakan rata-rata bergerak, hitung data yang hilang...
- Menginvestigasi. untuk mencari model teoritis yang cocok untuk memulai pengamatan yang kita miliki
Fungsi interpolasi yang berbeda dipasang pada data yang sama
Proses ini dapat dipecah menjadi empat fase
- Memilih model yang lebih cocok dengan data
- Estimasi parameter model
- Hitung "kesamaan" antara model yang dipilih dan model teoretis
- Terapkan serangkaian uji statistik untuk menilai kebaikan kecocokan
Pendekatan pertama untuk mengeksplorasi data adalah analisis grafis. Menganalisis data secara grafis, dengan histogram, dapat banyak membantu menilai model yang tepat untuk dipilih
Mari menggambar sampel acak berukuran 500, rata-rata 50, dan standar deviasi 2 dan plot histogram
import numpy as npimport matplotlib.pyplot as pltx_norm = np.random.normal(50, 2, 500)plt.hist(x_norm)Cara lain untuk menampilkan data kami adalah dengan memperkirakan fungsi kepadatan probabilitas
from scipy.stats.kde import gaussian_kdefrom numpy import linspace# estimate the probability density function (PDF)kde = gaussian_kde(x_norm)# return evenly spaced numbers over a specified intervaldist_space = linspace(min(x_norm), max(x_norm), 100)# plot the resultsplt.plot(dist_space, kde(dist_space))_Hanya dengan mengamati representasi tersebut, mungkinkah untuk merumuskan beberapa ide tentang model teoretis yang lebih sesuai dengan data kita. Dimungkinkan juga untuk menghitung fungsi distribusi empiris
plt.plot(np.sort(x_norm), np.linspace(0, 1, len(x_norm)))plt.title(‘Empirical CDF for x_norm’)Instrumen grafis lain yang dapat membantu adalah plot QQ, yang menunjukkan pada sumbu y kuantil dari data yang diamati VS kuantil teoretis dari model matematika
Dengan istilah kuantil, kami mengidentifikasi bagian pengamatan yang berada di bawah nilai tertentu, kuantil. Misalnya, 0. 75 kuantil (atau 75%) adalah titik di mana 75% data (sampel) berada di bawah nilai ini dan 25% di atas
from scipy import statsstats.probplot(x_norm, plot=plt)Ketika titik-titik pada plot cenderung terletak pada garis diagonal, itu berarti data (sampel) cocok dengan model Gaussian dengan cara yang "baik".
Jika kita memiliki pengamatan lain, misalnya, fungsi kerapatan Weibull, kita dapat melakukan hal berikut
x_wei = np.random.weibull(2, 500) # A Weibull sample of shape 2and size 500plt.hist(x_wei)_Dan plot QQ relatif
stats.probplot(x_wei, plot=plt)Bentuk pabrik
Edit deskripsi
tanpa henti-pencipta-2481. ck. halaman
Memilih fungsi yang tepat
Kami melihat bahwa dalam beberapa keadaan jenis model (fungsi) dapat dikurangkan dari struktur dan sifat model. Kemudian model dipilih dan kami memverifikasi apakah mengikuti data yang diamati
Dalam kasus lain, representasi grafis dapat membantu. bentuk histogram adalah mungkin untuk mendekati fungsi yang lebih baik mewakili data, bagaimanapun, metode ini dapat dikenakan bias
Metode yang absen dari bias, untuk memilih fungsi yang tepat yang paling cocok dengan data, adalah kriteria Pearson
Kriteria Pearson berasal dari resolusi persamaan diferensial yang “menghasilkan” keluarga dari berbagai jenis fungsi yang mewakili distribusi empiris yang berbeda. Fungsi itu tergantung secara eksklusif pada empat karakteristik yang berbeda
- berarti
- perbedaan
- asimetri
- kurtosis
Saat menstandarkan distribusi, jenis kurva (fungsi) hanya bergantung pada ukuran asimetri dan kurtosis
Setelah fungsi yang lebih mewakili data dipilih, perlu untuk memperkirakan parameter yang mencirikan model ini berdasarkan data yang tersedia. Beberapa metode yang paling umum termasuk metode penaksir momen, kuadrat terkecil, dan penaksir kemungkinan maksimum. Dalam pengantar ini kita akan menggali metode berikut
- metode naif
- metode momen
- kemungkinan maksimum
Metode naif adalah yang paling dasar dan cukup intuitif. itu terdiri dalam memperkirakan parameter model dengan memperkirakan, misalnya, rata-rata sampel yang diambil dari distribusi normal dengan rata-rata sampel yang diteliti
>>> print(np.mean(x_norm))50.03732572479421Metode momen
Metode momen terdiri dari ekspresi momen populasi sebagai fungsi dari parameter yang diminati. Ini kemudian diatur sama dengan momen teoretis yang ditentukan oleh fungsi yang dipilih dan jumlah parameter yang akan diestimasi
Mari kita lihat cara mengatasi masalah ini dengan python
x_gamma = np.random.gamma(3.5, 0.5, 200) # simulate a gamma distribution of shape 3.5 and scale (λ) 0.5mean_x_gamma = np.mean(x_gamma) # mean of the datavar_x_gamma = np.var(x_gamma) # variance of the datal_est = mean_x_gamma / var_x_gamma # lambda estimation (rate)a_est = (mean_x_gamma ** 2) / l_est # alpha estimationprint(‘Lambda estimation: {}’.format(l_est))print(‘Alpha estimation: {}’.format(a_est))Lambda estimation: 2.25095711229392Alpha estimation: 1.2160321117648123Metode kemungkinan maksimum
Metode kemungkinan maksimum adalah metode yang digunakan dalam statistik inferensial. Dimulai dengan memiliki fungsi kerapatan 𝑓(𝑥,θ). Ini terdiri dari memperkirakan θ dengan memaksimalkan fungsi kemungkinannya atau, dalam praktiknya, seringkali nyaman untuk bekerja dengan logaritma natural dari fungsi kemungkinan, yang disebut log-likelihood
Mari kita lihat aksinya
# generate datax = np.linspace(0,20, len(x_gamma))y = 3*x + x_gammaimport statsmodels.api as smols = sm.OLS(y, x_gamma).fit()print(ols.summary())_Paket yang sangat berguna adalah paket plt.plot(np.sort(x_norm), np.linspace(0, 1, len(x_norm)))plt.title(‘Empirical CDF for x_norm’)_1, yang secara default memperkirakan distribusi dari mana sampel diambil. Ini cukup berguna karena tidak diperlukan untuk mengetahui fungsi kemungkinan, tetapi cukup hanya menentukan sampel dan daftar distribusi untuk diuji dapat diteruskan
#!pip install fitterfrom fitter import Fitterf = Fitter(x_gamma, distributions=[‘gamma’, ‘dweibull’, ‘uniform’])f.fit()f.summary()Penilaian kebaikan seorang prediktor
Penilaian kebaikan suatu prediktor (fungsi biaya, fungsi kerugian) diperlukan untuk mengevaluasi seberapa baik perkiraan antara data yang diamati dan data yang dihitung (diprediksi) oleh model. Oleh karena itu, fungsi kerugian, menghitung perbedaan antara data empiris dan yang diamati, harus memberikan bobot yang sama untuk kesalahan dengan besaran yang sama tetapi tanda yang berbeda dan harus meningkat ketika kesalahan meningkat. Fungsi kerugian bisa relatif atau absolut. Di antara fungsi kerugian paling umum yang bisa kita miliki
Dimana 𝑦 adalah nilai observasi dan 𝑦̂ nilai teoritis (prediksi). Seringkali, nilai tersebut dikalikan dengan 100 untuk menyatakan nilai dalam bentuk persentase
Mari kita lihat contoh dari sampel yang diambil dari distribusi Poisson
from scipy.stats.kde import gaussian_kdefrom numpy import linspace# estimate the probability density function (PDF)kde = gaussian_kde(x_norm)# return evenly spaced numbers over a specified intervaldist_space = linspace(min(x_norm), max(x_norm), 100)# plot the resultsplt.plot(dist_space, kde(dist_space))_0Contoh lain menilai kebaikan prediktor dapat dilakukan dengan tumpang tindih fungsi densitas dengan data
from scipy.stats.kde import gaussian_kdefrom numpy import linspace# estimate the probability density function (PDF)kde = gaussian_kde(x_norm)# return evenly spaced numbers over a specified intervaldist_space = linspace(min(x_norm), max(x_norm), 100)# plot the resultsplt.plot(dist_space, kde(dist_space))_1Tes statistik
Dimungkinkan untuk melakukan uji statistik yang berbeda untuk menilai kebaikan kecocokan, yang berarti seberapa baik model teoretis cocok dengan data. Tes-tes tersebut memperhitungkan sampel berdasarkan sudut pandang "global", dengan mempertimbangkan semua karakteristik sampel yang diteliti (rata-rata, varians, bentuk distribusi ...) dan distribusi-agnostik, yang berarti tidak tergantung pada
Tes pertama yang dianalisis, untuk menilai kebaikan kesesuaian adalah χ2 (chi-kuadrat). Ini didasarkan pada perbandingan antara frekuensi empiris (frekuensi yang diharapkan) dan frekuensi yang diamati, dibangun di atas fungsi kerapatan yang diinginkan. χ2 dapat digunakan baik untuk variabel diskrit maupun kontinu dan rumus matematisnya adalah sebagai berikut
Dimana 𝑂𝑖 adalah frekuensi teramati, 𝐸𝑖 frekuensi teoretis dan 𝑘 jumlah kelas atau interval. Statistik ini terdistribusi secara asimtotik di sekitar variabel acak dalam denominasi χ2 dengan derajat kebebasan 𝑘−𝑝−1, di mana 𝑝 adalah jumlah parameter yang diestimasi oleh model
Hipotesis nol ditolak ketika nilai statistik turun di bawah ambang batas tertentu, sehingga ketika nilai-p lebih tinggi dari tingkat signifikansi yang telah ditetapkan sebelumnya
Tes ini valid dalam kondisi berikut
- sampel harus cukup besar (karena distribusi asimtotik χ2)
- Jumlah frekuensi yang diharapkan untuk setiap kelas tidak boleh kurang dari 5
- Diperlukan untuk menerapkan koreksi Yates untuk kontinuitas (koreksi kontinuitas), yang terdiri dari mengurangkan 0. 5 dari perbedaan antara setiap nilai yang diamati dan nilai yang diharapkan. 𝑂𝑖−𝐸𝑖
Mari kita lihat bagaimana menerapkannya
from scipy.stats.kde import gaussian_kdefrom numpy import linspace# estimate the probability density function (PDF)kde = gaussian_kde(x_norm)# return evenly spaced numbers over a specified intervaldist_space = linspace(min(x_norm), max(x_norm), 100)# plot the resultsplt.plot(dist_space, kde(dist_space))_2Dalam kasus variabel kontinu, dalam hal ini berasal dari distribusi gamma, dengan parameter yang diperkirakan dari data yang diamati, dapat dilakukan sebagai berikut
from scipy.stats.kde import gaussian_kdefrom numpy import linspace# estimate the probability density function (PDF)kde = gaussian_kde(x_norm)# return evenly spaced numbers over a specified intervaldist_space = linspace(min(x_norm), max(x_norm), 100)# plot the resultsplt.plot(dist_space, kde(dist_space))_3from scipy.stats.kde import gaussian_kdefrom numpy import linspace# estimate the probability density function (PDF)kde = gaussian_kde(x_norm)# return evenly spaced numbers over a specified intervaldist_space = linspace(min(x_norm), max(x_norm), 100)# plot the resultsplt.plot(dist_space, kde(dist_space))_4
Hipotesis nol untuk uji chi-square adalah bahwa tidak ada hubungan antara frekuensi yang diamati dan yang diharapkan, namun dalam kasus ini, nilai-p kurang dari tingkat signifikansi 0. 05, dengan demikian kami menolak hipotesis nol
Uji statistik lain yang banyak digunakan adalah uji Goodness of fit Kolmogorov-Smirnov. Tes ini adalah tes non-parametrik yang dapat digunakan baik untuk data diskrit, data kontinyu binned di kelas (Namun, beberapa penulis tidak setuju dengan hal ini), dan variabel kontinyu. Pengujian ini didasarkan pada perbandingan jarak antara fungsi distribusi empiris dari data dan fungsi distribusi kumulatif dari distribusi yang bersangkutan
Uji Kolmogorov-Smirnov lebih kuat daripada uji chi-kuadrat bila ukuran sampel tidak terlalu besar. Untuk sampel ukuran besar, kedua tes memiliki kekuatan yang sama. Keterbatasan paling serius dari uji Kolmogorov-Smirnov adalah bahwa distribusi harus ditentukan sepenuhnya, yaitu parameter lokasi, skala, dan bentuk tidak dapat diperkirakan dari sampel. Karena keterbatasan tersebut, terkadang lebih disukai menggunakan tes Anderson-Darling. Namun, tes Anderson-Darling hanya tersedia untuk sekumpulan kecil distribusi
Dengan Python, kita dapat melakukan tes ini menggunakan plt.plot(np.sort(x_norm), np.linspace(0, 1, len(x_norm)))plt.title(‘Empirical CDF for x_norm’)_2, mari kita terapkan pada dua sampel dari Poisson plt.plot(np.sort(x_norm), np.linspace(0, 1, len(x_norm)))plt.title(‘Empirical CDF for x_norm’)3dengan parameter plt.plot(np.sort(x_norm), np.linspace(0, 1, len(x_norm)))plt.title(‘Empirical CDF for x_norm’)4dari 0. 6
from scipy.stats.kde import gaussian_kdefrom numpy import linspace# estimate the probability density function (PDF)kde = gaussian_kde(x_norm)# return evenly spaced numbers over a specified intervaldist_space = linspace(min(x_norm), max(x_norm), 100)# plot the resultsplt.plot(dist_space, kde(dist_space))_5Untuk pengujiannya, hipotesis nol menyatakan bahwa tidak ada perbedaan antara kedua distribusi, sehingga keduanya berasal dari distribusi yang sama. Dalam hal ini, p-nilai 0. 68 gagal menolak hipotesis nol, dengan kata lain sampel berasal dari distribusi yang sama
Tapi mari kita lihat antara Poisson dan sampel normal
from scipy.stats.kde import gaussian_kdefrom numpy import linspace# estimate the probability density function (PDF)kde = gaussian_kde(x_norm)# return evenly spaced numbers over a specified intervaldist_space = linspace(min(x_norm), max(x_norm), 100)# plot the resultsplt.plot(dist_space, kde(dist_space))_6Sebaliknya, dalam hal ini, nilai p lebih kecil dari tingkat signifikansi 0. 05, dan ini menunjukkan bahwa kita dapat menolak hipotesis nol, sehingga kedua sampel tersebut berasal dari dua distribusi yang berbeda
Kami juga dapat membandingkan kedua CDF secara grafis
from scipy.stats.kde import gaussian_kdefrom numpy import linspace# estimate the probability density function (PDF)kde = gaussian_kde(x_norm)# return evenly spaced numbers over a specified intervaldist_space = linspace(min(x_norm), max(x_norm), 100)# plot the resultsplt.plot(dist_space, kde(dist_space))_7Tes Normalitas
Tantangan lain yang dapat terjadi adalah untuk memverifikasi jika sampel yang dikumpulkan berasal dari distribusi normal, untuk ini ada keluarga uji yang disebut uji normalitas. Salah satu uji normalitas yang paling ampuh adalah uji Shapiro-Wilk, yang juga bekerja sangat baik pada sampel kecil. Normalitas diuji dengan mencocokkan dua estimasi varians alternatif. estimator non-parametrik, dihitung dengan kombinasi linear dari nilai sampel terurut, dan estimator parametrik
plt.plot(np.sort(x_norm), np.linspace(0, 1, len(x_norm)))plt.title(‘Empirical CDF for x_norm’)5 juga menyediakan cara untuk melakukan tes ini
from scipy.stats.kde import gaussian_kdefrom numpy import linspace# estimate the probability density function (PDF)kde = gaussian_kde(x_norm)# return evenly spaced numbers over a specified intervaldist_space = linspace(min(x_norm), max(x_norm), 100)# plot the resultsplt.plot(dist_space, kde(dist_space))_8Hipotesis nol yang diuji (H0) adalah bahwa data diambil dari distribusi normal, memiliki nilai p (0. 188), dalam hal ini, kami gagal menolaknya, menyatakan sampel berasal dari distribusi normal