Kapan menggunakan simulasi?

40

Jadi ini pertanyaan yang sangat sederhana dan bodoh. Namun, ketika saya masih di sekolah, saya sangat sedikit memperhatikan seluruh konsep simulasi di kelas dan itu membuat saya sedikit takut dengan proses itu.

  1. Bisakah Anda menjelaskan proses simulasi dalam istilah awam? (bisa untuk menghasilkan data, koefisien regresi, dll)

  2. Apa sajakah situasi / masalah praktis ketika seseorang akan menggunakan simulasi?

Saya lebih suka contoh yang diberikan di R.

Amathew
sumber
10
(2) sudah memiliki lebih dari seribu jawaban di situs ini: cari simulasikan .
whuber
@Tim Satu-satunya hal yang tidak setuju dengan komentar saya adalah bahwa situs kami memiliki lebih dari seribu jawaban yang berisi simulasi, tetapi itu adalah fakta objektif yang kebenarannya dapat Anda verifikasi sendiri. Saya tidak mengklaim, secara eksplisit atau implisit, bahwa ini mewakili daftar lengkap atau representatif dari apa pun. Namun, sebagai satu set contoh aktual, ia jauh lebih kaya dan lebih rinci daripada yang bisa dicapai oleh jawaban individu mana pun dan karenanya merupakan sumber daya berharga bagi siapa saja yang mungkin ingin melanjutkan pertanyaan (2) lebih lanjut.
Whuber
@whuber ok, poin bagus.
Tim

Jawaban:

42

Sebuah model kuantitatif mengemulasi beberapa perilaku dunia dengan (a) merepresentasikan objek dengan beberapa sifat numeriknya dan (b) menggabungkan angka-angka itu dengan cara yang pasti untuk menghasilkan output numerik yang juga mewakili sifat-sifat yang menarik.

Gambar 1: model deterministik

Dalam skema ini, tiga input numerik di sebelah kiri digabungkan untuk menghasilkan satu output numerik di sebelah kanan. Baris angka menunjukkan kemungkinan nilai input dan output; titik-titik menunjukkan nilai spesifik yang digunakan. Saat ini komputer digital biasanya melakukan perhitungan, tetapi mereka tidak penting: model telah dihitung dengan pensil-dan-kertas atau dengan membangun perangkat "analog" di kayu, logam, dan sirkuit elektronik.

Sebagai contoh, mungkin model sebelumnya merangkum tiga inputnya. Rkode untuk model ini mungkin terlihat seperti

inputs <- c(-1.3, 1.2, 0) # Specify inputs (three numbers)
output <- sum(inputs)     # Run the model
print(output)             # Display the output (a number)

Keluarannya hanya berupa angka,

-0.1

Kita tidak bisa mengenal dunia dengan sempurna: bahkan jika modelnya bekerja persis seperti dunia, informasi kita tidak sempurna dan hal-hal di dunia berbeda-beda. Simulasi (Stochastic) membantu kita memahami bagaimana ketidakpastian dan variasi dalam input model harus diterjemahkan ke dalam ketidakpastian dan variasi dalam output. Mereka melakukannya dengan memvariasikan input secara acak, menjalankan model untuk setiap variasi, dan merangkum output kolektif.

"Secara acak" tidak berarti sewenang-wenang. Pemodel harus menentukan (apakah secara sadar atau tidak, baik secara eksplisit atau implisit) frekuensi yang dimaksudkan dari semua input. Frekuensi output memberikan ringkasan hasil yang paling rinci.

Gambar: Input acak

Model yang sama, ditunjukkan dengan input acak dan output acak yang dihasilkan (dihitung).

Gambar tersebut menampilkan frekuensi dengan histogram untuk mewakili distribusi angka. The dimaksudkan frekuensi masukan ditampilkan untuk input di kiri, sedangkan dihitung frekuensi output, diperoleh dengan menjalankan model berkali-kali, ditampilkan di sebelah kanan.

Setiap rangkaian input ke model deterministik menghasilkan output numerik yang dapat diprediksi. Ketika model digunakan dalam simulasi stokastik, bagaimanapun, outputnya adalah distribusi (seperti yang abu-abu panjang ditunjukkan di sebelah kanan). Penyebaran distribusi output memberi tahu kita bagaimana output model dapat diharapkan bervariasi ketika inputnya bervariasi.

Contoh kode sebelumnya dapat dimodifikasi seperti ini untuk mengubahnya menjadi simulasi:

n <- 1e5 # Number of iterations
inputs <- rbind(rgamma(n, 3, 3) - 2,
                runif(n, -2, 2),
                rnorm(n, 0, 1/2))
output <- apply(inputs, 2, sum)
hist(output, freq=FALSE, col="Gray")

Keluarannya telah dirangkum dengan histogram dari semua angka yang dihasilkan oleh iterasi model dengan input acak ini:

Histogram

Mengintip di belakang layar, kami dapat memeriksa beberapa dari banyak input acak yang diberikan kepada model ini:

rownames(inputs) <- c("First", "Second", "Third")
print(inputs[, 1:5], digits=2)

Output menunjukkan lima dari iterasi pertama, dengan satu kolom per iterasi:100,000

        [,1]  [,2]  [,3]  [,4]  [,5]
First  -1.62 -0.72 -1.11 -1.57 -1.25
Second  0.52  0.67  0.92  1.54  0.24
Third  -0.39  1.45  0.74 -0.48  0.33

Dapat diperdebatkan, jawaban untuk pertanyaan kedua adalah bahwa simulasi dapat digunakan di mana-mana. Sebagai masalah praktis, biaya yang diharapkan untuk menjalankan simulasi harus lebih kecil dari manfaat yang mungkin. Apa manfaat dari memahami dan mengukur variabilitas? Ada dua area utama di mana ini penting:

  • Mencari kebenaran , seperti dalam sains dan hukum. Angka dengan sendirinya berguna, tetapi jauh lebih berguna untuk mengetahui seberapa akurat atau pasti angka itu.

  • Membuat keputusan, seperti dalam bisnis dan kehidupan sehari-hari. Keputusan menyeimbangkan risiko dan manfaat. Risiko tergantung pada kemungkinan hasil yang buruk. Simulasi stokastik membantu menilai kemungkinan itu.

Sistem komputasi telah menjadi cukup kuat untuk menjalankan model yang realistis dan kompleks berulang kali. Perangkat lunak telah berevolusi untuk mendukung menghasilkan dan merangkum nilai-nilai acak dengan cepat dan mudah (seperti Rcontoh kedua tunjukkan). Kedua faktor ini telah digabungkan selama 20 tahun terakhir (dan lebih banyak lagi) ke titik di mana simulasi bersifat rutin. Yang tersisa adalah membantu orang (1) menentukan distribusi input yang sesuai dan (2) memahami distribusi output. Itulah domain pemikiran manusia, di mana komputer sejauh ini hanya sedikit membantu.

whuber
sumber
1
jawaban yang bagus !. Saya terutama suka "" Secara acak "tidak berarti sewenang-wenang."
Haitao Du
29

Pertama, izinkan saya mengatakan bahwa tidak ada jawaban tunggal untuk pertanyaan Anda. Ada beberapa contoh kapan Anda dapat (atau harus) menggunakan simulasi. Saya akan mencoba memberikan beberapa contoh di bawah ini. Kedua, perhatikan bahwa ada beberapa cara Anda dapat mendefinisikan "simulasi" , jadi jawabannya setidaknya sebagian tergantung pada definisi yang Anda pilih.

Contoh:

1. Anda seorang ahli statistik Bayesian , jadi simulasi adalah metode pilihan Anda untuk melakukan statistik. Ada beberapa cara pendekatan non-simulasi untuk statistik Bayesian namun dalam sebagian besar kasus Anda menggunakan simulasi. Untuk mempelajari lebih lanjut, periksa buku "Analisis data Bayesian" oleh Gelman (atau sumber daya lain yang mungkin).

2. Anda ingin menilai kinerja metode statistik. Katakanlah Anda telah merancang beberapa uji statistik yang dirancang untuk memperkirakan beberapa parameter diberikan data empiris. Sekarang Anda ingin memeriksa apakah itu benar-benar melakukan apa yang Anda inginkan. Anda dapat mengambil beberapa sampel data dan menggunakan tes Anda pada data ini - namun jika Anda memerlukan tes statistik untuk mengetahui , lalu bagaimana Anda tahu jika tes Anda berfungsi dengan baik hanya memiliki data ..? Tentu saja Anda dapat membandingkan hasilnya dengan perkiraan tes statistik lain, tetapi bagaimana jika tes lain tidak memperkirakan dengan benar ..? Dalam hal ini Anda dapat menggunakan simulasi. Yang bisa Anda lakukan adalah menghasilkanθ θ θ θ θTθθθbeberapa data palsu memberikan parameter Anda dan kemudian memeriksa apakah nilai estimasi Anda sama dengan nilai sebenarnya dari (yang Anda ketahui sebelumnya sejak Anda memilihnya). Menggunakan simulasi memungkinkan Anda juga untuk memeriksa berbagai skenario (ukuran sampel, distribusi data yang berbeda, jumlah kebisingan yang berbeda dalam data Anda, dll.).θθ

3. Anda tidak memiliki data atau sangat terbatas. Katakanlah Anda ingin tahu apa kemungkinan hasil dari perang nuklir. Sayangnya (semoga) tidak ada perang nuklir sebelumnya, jadi Anda tidak punya data. Dalam hal ini Anda dapat menggunakan simulasi komputer di mana Anda membuat beberapa asumsi tentang kenyataan dan kemudian membiarkan komputer membuat realitas virtual paralel di mana perang nuklir terjadi, sehingga Anda memiliki beberapa sampel hasil yang mungkin .

4. Model statistik Anda tidak sesuai dengan perangkat lunak atau rumit. Pendekatan ini dianjurkan, misalnya, oleh Gelman dan Hill dalam "Analisis Data Menggunakan Regresi dan Multilevel / Hierarchical Models" , di mana mereka menggambarkan estimasi Bayesian berbasis simulasi sebagai "langkah selanjutnya" dalam pemodelan regresi.

5. Anda ingin belajar tentang kemungkinan hasil dari proses yang rumit. Bayangkan Anda ingin meramalkan hasil masa depan dari beberapa proses yang rumit, masalahnya adalah bahwa perilaku proses Anda kacau dan diberikan input berbeda Anda mendapatkan output yang berbeda, sementara jumlah input yang mungkin sangat besar. Secara umum, ini adalah kasusnya karena metode simulasi Monte Carlo ditemukan oleh fisikawan dan ahli matematika yang bekerja pada bom nuklir selama Perang Dunia II. Dengan simulasi Anda mencoba input yang berbeda dan mengumpulkan sampel untuk mendapatkan gambaran umum tentang hasil yang mungkin.

6. Data Anda tidak memenuhi kriteria untuk beberapa metode statistik , mis . Data tersebut memiliki distribusi miring sementara itu seharusnya normal. Dalam beberapa kasus ini tidak benar-benar masalah , tetapi kadang-kadang itu, jadi metode berbasis simulasi seperti bootstrap diciptakan.

7. Untuk menguji model teoritis terhadap kenyataan. Anda memiliki model teoritis daripada menggambarkan beberapa proses, misalnya penyebaran epidemi melalui jejaring sosial. Anda dapat menggunakan model untuk menghasilkan beberapa data sehingga Anda dapat membandingkan jika disimulasikan mirip dengan data nyata. Lada Adamic memberikan beberapa contoh penggunaan semacam itu untuk Analisis Jaringan Sosial pada kelas Coursera- nya (lihat beberapa demo di sini ).

8. Untuk menghasilkan data "hipotesis 0". Anda menghasilkan data palsu (acak) sehingga untuk membandingkan data nyata dengan itu. Jika ada efek atau tren yang signifikan dalam data Anda maka itu harus berbeda dari data yang dihasilkan secara acak. Pendekatan ini dianjurkan oleh Buja et al. (2009) dalam makalah mereka "Kesimpulan statistik untuk analisis data eksplorasi dan model diagnostik" di mana mereka mengusulkan bagaimana menggunakan plot dapat memfasilitasi analisis data eksplorasi dan pengujian hipotesis (lihat juga dokumentasi paket R nullabor yang mengimplementasikan ide-ide tersebut).

Tim
sumber
22

Saya pikir pembahasan jawaban TrynnaDoStat mengilustrasikan hal ini dengan baik: kami menggunakan simulasi kapan pun masalahnya tidak mungkin diselesaikan secara analitis (mis. Distribusi posterior parameter dalam model hierarkis), atau ketika kami terlalu jengkel untuk memasukkan waktu ke dalam mengerjakan solusinya secara analitis.

Berdasarkan apa yang saya amati di situs web ini, ambang batas "cukup menjengkelkan untuk disimulasikan" sangat bervariasi di antara ahli statistik. Orang-orang seperti @whuber dapat, tampaknya, melirik masalah dan segera melihat solusinya sementara orang biasa seperti saya harus mempertimbangkan masalah dengan hati-hati dan mungkin membaca sebelum menulis simulasi rutin untuk melakukan kerja keras.

Ingatlah bahwa simulasi tidak selalu merupakan obat mujarab karena dengan set data yang besar, atau model yang rumit, atau keduanya Anda akan menghabiskan banyak waktu (komputer) untuk memperkirakan dan memeriksa simulasi Anda. Tentu saja tidak sepadan dengan usaha jika Anda dapat mencapai tujuan yang sama dengan satu jam pertimbangan yang cermat.

Pasang kembali Monica
sumber
14

Simulasi sering dilakukan ketika Anda tidak bisa mendapatkan formulir tertutup untuk sesuatu (seperti distribusi) atau Anda ingin cara cepat dan cepat untuk mendapatkan sesuatu itu.

Misalnya, saya menjalankan regresi logistik menggunakan satu variabel untuk menjelaskan . Saya tahu bahwa distribusi koefisien untuk asymptotically Normal dari teori MLE. Tetapi katakanlah saya tertarik pada perbedaan dua probabilitas yang diperkirakan . Mungkin sangat sulit (atau tidak mungkin) untuk mendapatkan distribusi yang tepat dari fungsi ini tetapi, karena saya tahu distribusi , saya dapat mensimulasikan nilai dari dan menghubungkannya ke untuk mendapatkan distribusi empiris.Y β X f ( β ) = P ( Y = 1 | X = 1 ) - P ( Y = 1 | X = 0 ) β β f ( β )XYβXf(β)=P(Y=1|X=1)P(Y=1|X=0)ββf(β)

TrynnaDoStat
sumber
Saya tidak akan menyebut simulasi "cepat", itu adalah metode komputasional yang lengkap dan sering mengambil lebih banyak waktu kemudian dilakukan dengan menggunakan pendekatan ML.
Tim
2
Ini jauh lebih cepat daripada menurunkan distribusi.
TrynnaDoStat
3
Seberapa sering Anda menjalankan algoritma ML selama lebih dari satu minggu tanpa henti ..?
Tim
Tangent re: "distribusi koefisien β untuk X adalah Normal" - Saya tidak terlalu memikirkan hal ini, tetapi setelah beberapa simulasi, saya merasa sering tidak benar dengan subsamples kurang dari sekitar 500 dan / atau dengan koefisien yang rata-rata di luar kekuatan tertentu, katakanlah, +/- 3. Kedengarannya benar?
rolando2
Teori MLE memberi tahu kita bahwa, dalam kondisi keteraturan tertentu, MLE normal asimptotik. Saya akan menambahkan ini ke jawaban saya.
TrynnaDoStat
11

Simulasi adalah cara terbaik untuk memeriksa apakah Anda dapat memperoleh perkiraan yang berguna dari suatu model.

Anda akan melakukan ini dengan membuat / mensimulasikan data palsu yang mengikuti distribusi yang tersirat oleh model Anda. Lalu, lanjutkan dan sesuaikan model Anda dengan data itu. Ini adalah kasus yang ideal: model Anda, pada kenyataannya, benar. Jadi jika kecocokannya bising atau tidak akurat, maka Anda tahu ada masalah dengan prosedur estimasi atau model itu sendiri.

Demikian pula, Anda dapat mensimulasikan data menggunakan proses menghasilkan data "salah" dan menggunakan data palsu itu untuk menilai bagaimana perkiraan Anda dipengaruhi oleh pelanggaran asumsi model. Ini sering disebut analisis sensitivitas .

Poin-poin ini mirip dengan item 2 dan 8 dalam jawaban Tim, dan juga versi prosedur yang agak lebih ad-hoc dalam jawaban whuber.


Simulasi juga digunakan untuk melakukan pengecekan model prediksi seperti yang dianjurkan oleh Andrew Gelman dan lainnya. Ini sama dengan memasukkan data prediktor Anda kembali ke dalam model dan kemudian mensimulasikan data respons palsu dari distribusi tersirat, untuk melihat apakah data simulasi Anda cukup dekat (dengan kriteria apa pun yang Anda gunakan) dengan hal yang nyata.

Perhatikan bahwa ini bukan hal yang sama dengan hanya menghitung nilai yang dipasang. Dalam model regresi, misalnya, nilai yang dipasang adalah rata-rata bersyarat; untuk menjalankan pemeriksaan prediktif pada model regresi, Anda harus menggambar sekali dari distribusi Gaussian yang berpusat pada setiap nilai yang dipasang.

shadowtalker
sumber
6

Kasus paling sederhana untuk simulasi. Katakanlah Anda memiliki model peramalan untuk jumlah kredit macet, Anda juga memiliki model untuk kerugian pinjaman macet. Sekarang Anda perlu memperkirakan total kerugian yang mana produk dari default dan kerugian diberikan default. Anda tidak bisa hanya mengalikan default dan kerugian pada default untuk mendapatkan interval kepercayaan total kerugian.

Alasannya adalah bahwa jika Anda memiliki variabel acak , yang Anda ketahui kerapatannya, itu tidak berarti Anda dapat dengan mudah mendapatkan kerapatan produk . Di sisi lain, jika Anda mengetahui korelasi antara angka, mudah untuk mensimulasikan angka yang berkorelasi, dan mendapatkan distribusi simulasi kerugian.x 1x 2xix1x2

Makalah ini memiliki deskripsi tingkat MBA dari use case ini untuk estimasi risiko operasi, di mana Anda memiliki distribusi frekuensi dan jumlah kerugian, dan menggabungkannya untuk mendapatkan distribusi total kerugian.

Aksakal
sumber