Untitled

 avatar
unknown
plain_text
25 days ago
2.6 kB
0
Indexable
# Cheatsheet UAS Bayesian Data Analysis

# Impor Library yang Diperlukan
import pandas as pd
import pymc3 as pm
import arviz as az
import numpy as np

# Memuat Dataset
data = pd.read_csv('data_ujian.csv')  # Ganti 'data_ujian.csv' dengan nama file dataset yang diberikan saat ujian

# Model 1: Pemodelan Data Asli
with pm.Model() as model_1:
    # Prior
    beta = pm.Normal('beta', mu=0, sigma=10)  # Ubah nilai mu dan sigma jika diperlukan berdasarkan soal ujian
    sigma = pm.HalfNormal('sigma', sigma=10)  # Sesuaikan prior untuk sigma jika diperlukan

    # Likelihood
    y_obs = pm.Normal('y_obs', mu=beta, sigma=sigma, observed=data['nilai'])  # Pastikan 'nilai' sesuai dengan nama kolom target dalam dataset

    # Sampling
    trace_1 = pm.sample(1000, return_inferencedata=True)  # Ubah jumlah sampel jika diminta dalam soal

# Visualisasi Trace Plot dan Diagnostik Model 1
az.plot_trace(trace_1)
print(az.geweke(trace_1))  # Periksa konvergensi menggunakan Geweke
print(az.rhat(trace_1))  # Periksa nilai R-hat

# Ukuran Sampel Efektif (ESS)
print(az.ess(trace_1))

# DIC dan WAIC untuk Model 1
print(az.dic(trace_1))
print(az.waic(trace_1))

# Model 2: Pemodelan Data dengan Y yang Dibinerisasi
# Membuat Kolom Biner
threshold = 50  # Ganti nilai ambang ini jika diperlukan, misalnya menggunakan mean data['nilai']
data['label_biner'] = (data['nilai'] > threshold).astype(int)  # Binerisasi dengan ambang tertentu

with pm.Model() as model_2:
    # Prior
    beta = pm.Normal('beta', mu=0, sigma=10)  # Ubah nilai mu dan sigma jika diperlukan

    # Likelihood
    y_obs = pm.Bernoulli('y_obs', p=pm.math.sigmoid(beta), observed=data['label_biner'])  # Pastikan 'label_biner' sesuai dengan kolom biner

    # Sampling
    trace_2 = pm.sample(1000, return_inferencedata=True)  # Ubah jumlah sampel jika diperlukan

# Visualisasi Trace Plot dan Diagnostik Model 2
az.plot_trace(trace_2)
print(az.geweke(trace_2))  # Periksa konvergensi menggunakan Geweke
print(az.rhat(trace_2))  # Periksa nilai R-hat

# Ukuran Sampel Efektif (ESS)
print(az.ess(trace_2))

# DIC dan WAIC untuk Model 2
print(az.dic(trace_2))
print(az.waic(trace_2))

# Interpretasi dan Pemeriksaan Prediktif Posterior (PPC)
# Memilih Model Terbaik Berdasarkan WAIC atau DIC
best_model = trace_1 if az.waic(trace_1).waic < az.waic(trace_2).waic else trace_2  # Pilih model dengan WAIC terendah

# Interpretasi Model Terbaik
print(az.summary(best_model))  # Tampilkan ringkasan parameter model

# Posterior Predictive Check (PPC)
with best_model:
    ppc = pm.sample_posterior_predictive(best_model, random_seed=42)  # Sampling PPC

# Visualisasi PPC
az.plot_ppc(ppc)
Leave a Comment