Sunday 6 August 2017

Moving average random walk


Memindahkan model perataan rata-rata dan eksponensial Sebagai langkah pertama dalam bergerak melampaui model mean, model jalan acak, dan model tren linier, pola nonseasonal dan tren dapat diekstrapolasikan dengan menggunakan model rata-rata bergerak atau pemulusan. Asumsi dasar di balik model rata-rata dan perataan adalah bahwa deret waktu secara lokal bersifat stasioner dengan mean yang bervariasi secara perlahan. Oleh karena itu, kita mengambil rata-rata bergerak (lokal) untuk memperkirakan nilai rata-rata saat ini dan kemudian menggunakannya sebagai perkiraan untuk waktu dekat. Hal ini dapat dianggap sebagai kompromi antara model rata-rata dan model random-walk-without-drift-model. Strategi yang sama dapat digunakan untuk memperkirakan dan mengekstrapolasikan tren lokal. Rata-rata bergerak sering disebut versi quotmoothedquot dari rangkaian aslinya karena rata-rata jangka pendek memiliki efek menghaluskan benjolan pada rangkaian aslinya. Dengan menyesuaikan tingkat smoothing (lebar rata-rata bergerak), kita dapat berharap untuk mencapai keseimbangan optimal antara kinerja model jalan rata-rata dan acak. Jenis model rata - rata yang paling sederhana adalah. Simple Moving Average: Prakiraan untuk nilai Y pada waktu t1 yang dilakukan pada waktu t sama dengan rata-rata sederhana dari pengamatan m terakhir: (Disini dan di tempat lain saya akan menggunakan simbol 8220Y-hat8221 untuk berdiri Untuk ramalan dari deret waktu yang dibuat Y pada tanggal sedini mungkin dengan model yang diberikan.) Rata-rata ini dipusatkan pada periode t - (m1) 2, yang menyiratkan bahwa perkiraan mean lokal cenderung tertinggal dari yang sebenarnya. Nilai mean lokal sekitar (m1) 2 periode. Jadi, kita katakan bahwa rata-rata usia data dalam rata-rata pergerakan sederhana adalah (m1) 2 relatif terhadap periode dimana ramalan dihitung: ini adalah jumlah waktu dimana perkiraan akan cenderung tertinggal dari titik balik data. . Misalnya, jika Anda rata-rata mendapatkan 5 nilai terakhir, prakiraan akan sekitar 3 periode terlambat dalam menanggapi titik balik. Perhatikan bahwa jika m1, model simple moving average (SMA) sama dengan model random walk (tanpa pertumbuhan). Jika m sangat besar (sebanding dengan panjang periode estimasi), model SMA setara dengan model rata-rata. Seperti parameter model peramalan lainnya, biasanya menyesuaikan nilai k untuk memperoleh kuotil kuotil terbaik ke data, yaitu kesalahan perkiraan terkecil. Berikut adalah contoh rangkaian yang tampaknya menunjukkan fluktuasi acak di sekitar rata-rata yang bervariasi secara perlahan. Pertama, mari mencoba menyesuaikannya dengan model jalan acak, yang setara dengan rata-rata bergerak sederhana dari 1 istilah: Model jalan acak merespons dengan sangat cepat terhadap perubahan dalam rangkaian, namun dengan begitu, ia menggunakan banyak kuotimasi dalam Data (fluktuasi acak) serta quotsignalquot (mean lokal). Jika kita mencoba rata-rata bergerak sederhana dari 5 istilah, kita mendapatkan perkiraan perkiraan yang tampak lebih halus: Rata-rata pergerakan sederhana 5 langkah menghasilkan kesalahan yang jauh lebih kecil daripada model jalan acak dalam kasus ini. Usia rata-rata data dalam ramalan ini adalah 3 ((51) 2), sehingga cenderung tertinggal beberapa titik balik sekitar tiga periode. (Misalnya, penurunan tampaknya terjadi pada periode 21, namun prakiraan tidak berbalik sampai beberapa periode kemudian.) Perhatikan bahwa perkiraan jangka panjang dari model SMA adalah garis lurus horizontal, seperti pada pergerakan acak. model. Dengan demikian, model SMA mengasumsikan bahwa tidak ada kecenderungan dalam data. Namun, sedangkan prakiraan dari model jalan acak sama dengan nilai pengamatan terakhir, prakiraan dari model SMA sama dengan rata-rata tertimbang nilai terakhir. Batas kepercayaan yang dihitung oleh Statgraf untuk perkiraan jangka panjang rata-rata bergerak sederhana tidak semakin luas seiring dengan meningkatnya horizon peramalan. Ini jelas tidak benar Sayangnya, tidak ada teori statistik yang mendasari yang memberi tahu kita bagaimana interval kepercayaan harus melebar untuk model ini. Namun, tidak terlalu sulit untuk menghitung perkiraan empiris batas kepercayaan untuk perkiraan horizon yang lebih panjang. Misalnya, Anda bisa membuat spreadsheet di mana model SMA akan digunakan untuk meramalkan 2 langkah di depan, 3 langkah di depan, dan lain-lain dalam sampel data historis. Anda kemudian bisa menghitung penyimpangan standar sampel dari kesalahan pada setiap horison perkiraan, dan kemudian membangun interval kepercayaan untuk perkiraan jangka panjang dengan menambahkan dan mengurangi kelipatan dari deviasi standar yang sesuai. Jika kita mencoba rata-rata bergerak sederhana 9-istilah, kita mendapatkan perkiraan yang lebih halus dan lebih banyak efek lagging: Usia rata-rata sekarang adalah 5 periode ((91) 2). Jika kita mengambil moving average 19-term, rata-rata usia meningkat menjadi 10: Perhatikan bahwa, memang, ramalannya sekarang tertinggal dari titik balik sekitar 10 periode. Jumlah smoothing yang terbaik untuk seri ini Berikut adalah tabel yang membandingkan statistik kesalahan mereka, juga termasuk rata-rata 3-rata: Model C, rata-rata pergerakan 5-term, menghasilkan nilai RMSE terendah dengan margin kecil di atas 3 - term dan rata-rata 9-istilah, dan statistik lainnya hampir sama. Jadi, di antara model dengan statistik kesalahan yang sangat mirip, kita bisa memilih apakah kita lebih memilih sedikit responsif atau sedikit lebih kehalusan dalam prakiraan. (Lihat ke atas halaman.) Browns Simple Exponential Smoothing (rata-rata bergerak rata-rata tertimbang) Model rata-rata bergerak sederhana yang dijelaskan di atas memiliki properti yang tidak diinginkan sehingga memperlakukan pengamatan terakhir secara sama dan sama sekali mengabaikan semua pengamatan sebelumnya. Secara intuitif, data masa lalu harus didiskontokan secara lebih bertahap - misalnya, pengamatan terbaru harus mendapatkan bobot sedikit lebih besar dari yang terakhir, dan yang ke-2 terakhir harus mendapatkan bobot sedikit lebih banyak dari yang ke-3 terakhir, dan Begitu seterusnya Model pemulusan eksponensial sederhana (SES) menyelesaikan hal ini. Misalkan 945 menunjukkan kuototmothing constantquot (angka antara 0 dan 1). Salah satu cara untuk menulis model adalah dengan menentukan rangkaian L yang mewakili tingkat saat ini (yaitu nilai rata-rata lokal) dari seri yang diperkirakan dari data sampai saat ini. Nilai L pada waktu t dihitung secara rekursif dari nilai sebelumnya seperti ini: Dengan demikian, nilai smoothed saat ini adalah interpolasi antara nilai smoothed sebelumnya dan pengamatan saat ini, di mana 945 mengendalikan kedekatan nilai interpolasi dengan yang paling baru. pengamatan. Perkiraan untuk periode berikutnya hanyalah nilai merapikan saat ini: Secara ekivalen, kita dapat mengekspresikan ramalan berikutnya secara langsung dalam perkiraan sebelumnya dan pengamatan sebelumnya, dengan versi setara berikut. Pada versi pertama, ramalan tersebut merupakan interpolasi antara perkiraan sebelumnya dan pengamatan sebelumnya: Pada versi kedua, perkiraan berikutnya diperoleh dengan menyesuaikan perkiraan sebelumnya ke arah kesalahan sebelumnya dengan jumlah pecahan 945. adalah kesalahan yang dilakukan pada Waktu t. Pada versi ketiga, perkiraan tersebut adalah rata-rata bergerak tertimbang secara eksponensial (yaitu diskon) dengan faktor diskonto 1- 945: Versi perumusan rumus peramalan adalah yang paling mudah digunakan jika Anda menerapkan model pada spreadsheet: sesuai dengan Sel tunggal dan berisi referensi sel yang mengarah ke perkiraan sebelumnya, pengamatan sebelumnya, dan sel dimana nilai 945 disimpan. Perhatikan bahwa jika 945 1, model SES setara dengan model jalan acak (tanpa pertumbuhan). Jika 945 0, model SES setara dengan model rata-rata, dengan asumsi bahwa nilai smoothing pertama ditetapkan sama dengan mean. (Kembali ke atas halaman.) Usia rata-rata data dalam perkiraan pemulusan eksponensial sederhana adalah 1 945 relatif terhadap periode dimana ramalan dihitung. (Ini tidak seharusnya jelas, namun dengan mudah dapat ditunjukkan dengan mengevaluasi rangkaian tak terbatas.) Oleh karena itu, perkiraan rata-rata bergerak sederhana cenderung tertinggal dari titik balik sekitar 1 945 periode. Misalnya, ketika 945 0,5 lag adalah 2 periode ketika 945 0,2 lag adalah 5 periode ketika 945 0,1 lag adalah 10 periode, dan seterusnya. Untuk usia rata-rata tertentu (yaitu jumlah lag), ramalan eksponensial eksponensial sederhana (SES) agak lebih unggul daripada ramalan rata-rata bergerak sederhana karena menempatkan bobot yang relatif lebih tinggi pada pengamatan terakhir - i. Ini sedikit lebih responsif terhadap perubahan yang terjadi di masa lalu. Sebagai contoh, model SMA dengan 9 istilah dan model SES dengan 945 0,2 keduanya memiliki usia rata-rata 5 untuk data dalam perkiraan mereka, namun model SES memberi bobot lebih besar pada 3 nilai terakhir daripada model SMA dan pada Pada saat yang sama, hal itu sama sekali tidak sesuai dengan nilai lebih dari 9 periode, seperti yang ditunjukkan pada tabel ini: Keuntungan penting lain dari model SES dibandingkan model SMA adalah model SES menggunakan parameter pemulusan yang terus menerus bervariasi, sehingga mudah dioptimalkan. Dengan menggunakan algoritma quotsolverquot untuk meminimalkan kesalahan kuadrat rata-rata. Nilai optimal 945 dalam model SES untuk seri ini ternyata adalah 0,2961, seperti yang ditunjukkan di sini: Usia rata-rata data dalam ramalan ini adalah 10.2961 3,4 periode, yang serupa dengan rata-rata pergerakan sederhana 6-istilah. Perkiraan jangka panjang dari model SES adalah garis lurus horisontal. Seperti pada model SMA dan model jalan acak tanpa pertumbuhan. Namun, perhatikan bahwa interval kepercayaan yang dihitung oleh Statgraphics sekarang berbeda dengan mode yang tampak wajar, dan secara substansial lebih sempit daripada interval kepercayaan untuk model perjalanan acak. Model SES mengasumsikan bahwa seri ini agak dapat diprediksi daripada model acak berjalan. Model SES sebenarnya adalah kasus khusus model ARIMA. Sehingga teori statistik model ARIMA memberikan dasar yang kuat untuk menghitung interval kepercayaan untuk model SES. Secara khusus, model SES adalah model ARIMA dengan satu perbedaan nonseasonal, MA (1), dan tidak ada istilah konstan. Atau dikenal sebagai model quotARIMA (0,1,1) tanpa constantquot. Koefisien MA (1) pada model ARIMA sesuai dengan kuantitas 1- 945 pada model SES. Misalnya, jika Anda memasukkan model ARIMA (0,1,1) tanpa konstan pada rangkaian yang dianalisis di sini, koefisien MA (0) diperkirakan berubah menjadi 0,7029, yang hampir persis satu minus 0,2961. Hal ini dimungkinkan untuk menambahkan asumsi tren linear konstan non-nol ke model SES. Untuk melakukan ini, cukup tentukan model ARIMA dengan satu perbedaan nonseasonal dan MA (1) dengan konstan, yaitu model ARIMA (0,1,1) dengan konstan. Perkiraan jangka panjang kemudian akan memiliki tren yang sama dengan tren rata-rata yang diamati selama periode estimasi keseluruhan. Anda tidak dapat melakukan ini bersamaan dengan penyesuaian musiman, karena pilihan penyesuaian musiman dinonaktifkan saat jenis model disetel ke ARIMA. Namun, Anda dapat menambahkan tren eksponensial jangka panjang yang konstan ke model pemulusan eksponensial sederhana (dengan atau tanpa penyesuaian musiman) dengan menggunakan opsi penyesuaian inflasi dalam prosedur Peramalan. Kecepatan quotinflationquot (persentase pertumbuhan) yang sesuai per periode dapat diperkirakan sebagai koefisien kemiringan dalam model tren linier yang sesuai dengan data yang terkait dengan transformasi logaritma alami, atau dapat didasarkan pada informasi independen lain mengenai prospek pertumbuhan jangka panjang. . (Kembali ke atas halaman.) Browns Linear (yaitu ganda) Exponential Smoothing Model SMA dan model SES mengasumsikan bahwa tidak ada kecenderungan jenis apapun dalam data (yang biasanya OK atau setidaknya tidak terlalu buruk selama 1- Prakiraan ke depan saat data relatif bising), dan mereka dapat dimodifikasi untuk menggabungkan tren linier konstan seperti yang ditunjukkan di atas. Bagaimana dengan tren jangka pendek Jika suatu seri menampilkan tingkat pertumbuhan atau pola siklus yang berbeda yang menonjol dengan jelas terhadap kebisingan, dan jika ada kebutuhan untuk meramalkan lebih dari 1 periode di depan, maka perkiraan tren lokal mungkin juga terjadi. sebuah isu. Model pemulusan eksponensial sederhana dapat digeneralisasi untuk mendapatkan model pemulusan eksponensial linear (LES) yang menghitung perkiraan lokal tingkat dan kecenderungan. Model tren waktu yang paling sederhana adalah model pemulusan eksponensial Browns linier, yang menggunakan dua seri penghalusan berbeda yang berpusat pada berbagai titik waktu. Rumus peramalan didasarkan pada ekstrapolasi garis melalui dua pusat. (Versi yang lebih canggih dari model ini, Holt8217s, dibahas di bawah ini.) Bentuk aljabar model pemulusan eksponensial linier Brown8217s, seperti model pemulusan eksponensial sederhana, dapat dinyatakan dalam sejumlah bentuk yang berbeda namun setara. Bentuk quotstandardquot model ini biasanya dinyatakan sebagai berikut: Misalkan S menunjukkan deretan sumbu tunggal yang diperoleh dengan menerapkan smoothing eksponensial sederhana ke seri Y. Artinya, nilai S pada periode t diberikan oleh: (Ingat, bahwa dengan sederhana Eksponensial smoothing, ini akan menjadi perkiraan untuk Y pada periode t1.) Kemudian, biarkan Squot menunjukkan seri merapikan ganda yang diperoleh dengan menerapkan perataan eksponensial sederhana (menggunakan yang sama 945) ke seri S: Akhirnya, perkiraan untuk Y tk. Untuk setiap kgt1, diberikan oleh: Ini menghasilkan e 1 0 (yaitu menipu sedikit, dan membiarkan perkiraan pertama sama dengan pengamatan pertama yang sebenarnya), dan e 2 Y 2 8211 Y 1. Setelah itu prakiraan dihasilkan dengan menggunakan persamaan di atas. Ini menghasilkan nilai pas yang sama seperti rumus berdasarkan S dan S jika yang terakhir dimulai dengan menggunakan S 1 S 1 Y 1. Versi model ini digunakan pada halaman berikutnya yang menggambarkan kombinasi smoothing eksponensial dengan penyesuaian musiman. Model LES Linear Exponential Smoothing Brown8217s Ls menghitung perkiraan lokal tingkat dan tren dengan menghaluskan data baru-baru ini, namun kenyataan bahwa ia melakukannya dengan parameter pemulusan tunggal menempatkan batasan pada pola data yang dapat disesuaikan: tingkat dan tren Tidak diizinkan untuk bervariasi pada tingkat independen. Model LES Holt8217s membahas masalah ini dengan memasukkan dua konstanta pemulusan, satu untuk level dan satu untuk tren. Setiap saat, seperti pada model Brown8217s, ada perkiraan L t tingkat lokal dan perkiraan T t dari tren lokal. Di sini mereka dihitung secara rekursif dari nilai Y yang diamati pada waktu t dan perkiraan tingkat dan kecenderungan sebelumnya oleh dua persamaan yang menerapkan pemulusan eksponensial kepada mereka secara terpisah. Jika perkiraan tingkat dan tren pada waktu t-1 adalah L t82091 dan T t-1. Masing, maka perkiraan untuk Y tshy yang akan dilakukan pada waktu t-1 sama dengan L t-1 T t-1. Bila nilai aktual diamati, perkiraan tingkat yang diperbarui dihitung secara rekursif dengan menginterpolasi antara Y tshy dan ramalannya, L t-1 T t-1, dengan menggunakan bobot 945 dan 1- 945. Perubahan pada tingkat perkiraan, Yaitu L t 8209 L t82091. Bisa diartikan sebagai pengukuran yang bising pada tren pada waktu t. Perkiraan tren yang diperbarui kemudian dihitung secara rekursif dengan menginterpolasi antara L t 8209 L t82091 dan perkiraan sebelumnya dari tren, T t-1. Menggunakan bobot 946 dan 1-946: Interpretasi konstanta perataan tren 946 sama dengan konstanta pemulusan tingkat 945. Model dengan nilai kecil 946 beranggapan bahwa tren hanya berubah sangat lambat seiring berjalannya waktu, sementara model dengan Lebih besar 946 berasumsi bahwa itu berubah lebih cepat. Sebuah model dengan besar 946 percaya bahwa masa depan yang jauh sangat tidak pasti, karena kesalahan dalam estimasi tren menjadi sangat penting saat meramalkan lebih dari satu periode di masa depan. (Kembali ke atas halaman.) Konstanta pemulusan 945 dan 946 dapat diperkirakan dengan cara biasa dengan meminimalkan kesalahan kuadrat rata-rata dari perkiraan satu langkah ke depan. Bila ini dilakukan di Stategaf, perkiraannya adalah 945 0,3048 dan 946 0,008. Nilai yang sangat kecil dari 946 berarti bahwa model tersebut mengasumsikan perubahan sangat sedikit dalam tren dari satu periode ke periode berikutnya, jadi pada dasarnya model ini mencoba memperkirakan tren jangka panjang. Dengan analogi dengan pengertian umur rata-rata data yang digunakan dalam memperkirakan tingkat lokal seri, rata-rata usia data yang digunakan dalam memperkirakan tren lokal sebanding dengan 1 946, meskipun tidak sama persis dengan itu. . Dalam hal ini ternyata 10.006 125. Ini adalah jumlah yang sangat tepat karena keakuratan estimasi 946 tidak benar-benar ada 3 tempat desimal, namun urutannya sama besarnya dengan ukuran sampel 100, jadi Model ini rata-rata memiliki cukup banyak sejarah dalam memperkirakan tren. Plot perkiraan di bawah ini menunjukkan bahwa model LES memperkirakan tren lokal yang sedikit lebih besar di akhir rangkaian daripada tren konstan yang diperkirakan dalam model SEStrend. Juga, nilai estimasi 945 hampir sama dengan yang diperoleh dengan cara memasang model SES dengan atau tanpa tren, jadi model ini hampir sama. Sekarang, apakah ini terlihat seperti ramalan yang masuk akal untuk model yang seharusnya memperkirakan tren lokal Jika Anda memilih plot ini, sepertinya tren lokal telah berubah ke bawah pada akhir seri Apa yang telah terjadi Parameter model ini Telah diperkirakan dengan meminimalkan kesalahan kuadrat dari perkiraan satu langkah ke depan, bukan perkiraan jangka panjang, dalam hal ini tren tidak menghasilkan banyak perbedaan. Jika semua yang Anda lihat adalah kesalahan 1 langkah maju, Anda tidak melihat gambaran tren yang lebih besar mengenai (katakanlah) 10 atau 20 periode. Agar model ini lebih selaras dengan ekstrapolasi data bola mata kami, kami dapat secara manual menyesuaikan konstanta perataan tren sehingga menggunakan garis dasar yang lebih pendek untuk estimasi tren. Misalnya, jika kita memilih menetapkan 946 0,1, maka usia rata-rata data yang digunakan dalam memperkirakan tren lokal adalah 10 periode, yang berarti bahwa kita rata-rata mengalami trend selama 20 periode terakhir. Berikut ini perkiraan plot perkiraan jika kita menetapkan 946 0,1 sambil mempertahankan 945 0,3. Ini terlihat sangat masuk akal untuk seri ini, meskipun mungkin berbahaya untuk memperkirakan tren ini lebih dari 10 periode di masa depan. Bagaimana dengan statistik kesalahan Berikut adalah perbandingan model untuk kedua model yang ditunjukkan di atas dan juga tiga model SES. Nilai optimal 945. Untuk model SES adalah sekitar 0,3, namun hasil yang serupa (dengan sedikit atau kurang responsif, masing-masing) diperoleh dengan 0,5 dan 0,2. (A) Holts linear exp. Smoothing dengan alpha 0.3048 dan beta 0.008 (B) Holts linear exp. Smoothing dengan alpha 0.3 dan beta 0,1 (C) Smoothing eksponensial sederhana dengan alpha 0.5 (D) Smoothing eksponensial sederhana dengan alpha 0.3 (E) Smoothing eksponensial sederhana dengan alpha 0.2 Statistik mereka hampir identik, jadi kita benar-benar tidak dapat membuat pilihan berdasarkan dasar Kesalahan perkiraan 1 langkah di depan sampel data. Kita harus kembali pada pertimbangan lain. Jika kita sangat percaya bahwa masuk akal untuk mendasarkan perkiraan tren saat ini pada apa yang telah terjadi selama 20 periode terakhir, kita dapat membuat kasus untuk model LES dengan 945 0,3 dan 946 0,1. Jika kita ingin bersikap agnostik tentang apakah ada tren lokal, maka salah satu model SES mungkin akan lebih mudah dijelaskan dan juga akan memberikan prakiraan tengah jalan untuk periode 5 atau 10 berikutnya. (Apa yang dimaksud dengan tren-ekstrapolasi paling baik: Bukti empiris horizontal atau linier menunjukkan bahwa, jika data telah disesuaikan (jika perlu) untuk inflasi, maka mungkin tidak bijaksana untuk melakukan ekstrapolasi linier jangka pendek Tren sangat jauh ke depan. Tren yang terbukti hari ini dapat mengendur di masa depan karena beragam penyebabnya seperti keusangan produk, persaingan yang meningkat, dan kemerosotan siklis atau kenaikan di industri. Untuk alasan ini, perataan eksponensial sederhana sering kali melakukan out-of-sample yang lebih baik daripada yang mungkin diharapkan, terlepas dari ekstrapolasi naluriah kuotriotipnya. Modifikasi tren yang teredam dari model pemulusan eksponensial linier juga sering digunakan dalam praktik untuk memperkenalkan catatan konservatisme ke dalam proyeksi trennya. Model LES teredam-tren dapat diimplementasikan sebagai kasus khusus model ARIMA, khususnya model ARIMA (1,1,2). Hal ini dimungkinkan untuk menghitung interval kepercayaan sekitar perkiraan jangka panjang yang dihasilkan oleh model pemulusan eksponensial, dengan menganggapnya sebagai kasus khusus model ARIMA. (Hati-hati: tidak semua perangkat lunak menghitung interval kepercayaan untuk model ini dengan benar.) Lebar interval kepercayaan bergantung pada (i) kesalahan RMS pada model, (ii) jenis smoothing (sederhana atau linier) (iii) nilai (S) dari konstanta pemulusan (s) dan (iv) jumlah periode di depan yang Anda peramalkan. Secara umum, interval menyebar lebih cepat saat 945 semakin besar dalam model SES dan menyebar jauh lebih cepat bila perataan linier dan bukan perataan sederhana digunakan. Topik ini dibahas lebih lanjut di bagian model ARIMA dari catatan. (ARIMA: model nonseasonal persamaan peramalan ARIMA (p, d, q): Model ARIMA adalah, secara teori, kelas model paling umum untuk meramalkan deret waktu yang dapat dibuat menjadi 8220stationary8221 Dengan membedakan (jika perlu), barangkali bersamaan dengan transformasi nonlinier seperti pembalakan atau pengosongan (jika perlu). Variabel acak yang merupakan deret waktu bersifat stasioner jika sifat statistiknya konstan sepanjang waktu. Seri stasioner tidak memiliki tren, variasinya berkisar rata-rata memiliki amplitudo konstan, dan bergoyang secara konsisten. Yaitu pola waktu acak jangka pendeknya selalu terlihat sama dalam arti statistik. Kondisi terakhir ini berarti autokorelasinya (korelasi dengan penyimpangannya sendiri dari mean) tetap konstan dari waktu ke waktu, atau ekuivalen, bahwa spektrum kekuatannya tetap konstan seiring berjalannya waktu. Variabel acak dari bentuk ini dapat dilihat (seperti biasa) sebagai kombinasi antara sinyal dan noise, dan sinyal (jika ada) dapat menjadi pola pengembalian cepat atau lambat, atau osilasi sinusoidal, atau alternasi cepat pada tanda , Dan itu juga bisa memiliki komponen musiman. Model ARIMA dapat dilihat sebagai model 8220filter8221 yang mencoba memisahkan sinyal dari noise, dan sinyal tersebut kemudian diekstrapolasikan ke masa depan untuk mendapatkan perkiraan. Persamaan peramalan ARIMA untuk rangkaian waktu stasioner adalah persamaan linier (yaitu regresi-tipe) dimana prediktor terdiri dari kelambatan variabel dependen dan atau lag dari kesalahan perkiraan. Yaitu: Prediksi nilai Y adalah konstanta dan atau jumlah tertimbang dari satu atau lebih nilai Y dan satu angka tertimbang dari satu atau lebih nilai kesalahan terkini. Jika prediktor hanya terdiri dari nilai Y yang tertinggal, itu adalah model autoregresif murni (8220 self-regressed8221), yang hanyalah kasus khusus dari model regresi dan yang dapat dilengkapi dengan perangkat lunak regresi standar. Sebagai contoh, model autoregresif orde pertama (8220AR (1) 8221) untuk Y adalah model regresi sederhana dimana variabel independennya hanya Y yang tertinggal satu periode (LAG (Y, 1) dalam Statgrafik atau YLAG1 dalam RegresIt). Jika beberapa prediktor tertinggal dari kesalahan, model ARIMA TIDAK merupakan model regresi linier, karena tidak ada cara untuk menentukan error8221 8220last periodier178 sebagai variabel independen: kesalahan harus dihitung berdasarkan periode-ke-periode Saat model dipasang pada data. Dari sudut pandang teknis, masalah dengan menggunakan kesalahan tertinggal sebagai prediktor adalah bahwa prediksi model8217 bukanlah fungsi linear dari koefisien. Meskipun mereka adalah fungsi linier dari data masa lalu. Jadi, koefisien pada model ARIMA yang mencakup kesalahan tertinggal harus diestimasi dengan metode optimasi nonlinier (8220 climb-climbing8221) daripada hanya dengan memecahkan sistem persamaan. Akronim ARIMA adalah singkatan Auto-Regressive Integrated Moving Average. Lags dari rangkaian stasioner dalam persamaan peramalan disebut istilah quotautoregressivequot, kelambatan kesalahan perkiraan disebut istilah kuotasi rata-rata quotmoving average, dan deret waktu yang perlu dibedakan untuk dijadikan stasioner disebut versi seri integimental dari seri stasioner. Model random-walk dan random-trend, model autoregresif, dan model pemulusan eksponensial adalah kasus khusus model ARIMA. Model ARIMA nonseasonal diklasifikasikan sebagai model quotARIMA (p, d, q) quot, di mana: p adalah jumlah istilah autoregresif, d adalah jumlah perbedaan nonseasonal yang diperlukan untuk stasioneritas, dan q adalah jumlah kesalahan perkiraan yang tertinggal dalam Persamaan prediksi Persamaan peramalan dibangun sebagai berikut. Pertama, izinkan y menunjukkan perbedaan D dari Y. yang berarti: Perhatikan bahwa perbedaan kedua Y (kasus d2) bukanlah selisih 2 periode yang lalu. Sebaliknya, ini adalah perbedaan pertama-perbedaan-dari-pertama. Yang merupakan analog diskrit turunan kedua, yaitu akselerasi lokal dari seri daripada tren lokalnya. Dalam hal y. Persamaan peramalan umum adalah: Disini parameter rata-rata bergerak (9528217s) didefinisikan sehingga tanda-tanda mereka negatif dalam persamaan, mengikuti konvensi yang diperkenalkan oleh Box dan Jenkins. Beberapa penulis dan perangkat lunak (termasuk bahasa pemrograman R) mendefinisikannya sehingga mereka memiliki tanda plus. Bila nomor aktual dicolokkan ke dalam persamaan, tidak ada ambiguitas, tapi penting untuk mengetahui konvensi mana yang digunakan perangkat lunak Anda saat Anda membaca hasilnya. Seringkali parameter dilambangkan dengan AR (1), AR (2), 8230, dan MA (1), MA (2), 8230 dll. Untuk mengidentifikasi model ARIMA yang sesuai untuk Y. Anda memulai dengan menentukan urutan differencing (D) perlu membuat stasioner seri dan menghilangkan fitur musiman musiman, mungkin bersamaan dengan transformasi yang menstabilkan varians seperti penebangan atau pengapuran. Jika Anda berhenti pada titik ini dan meramalkan bahwa rangkaian yang berbeda adalah konstan, Anda hanya memiliki model acak berjalan atau acak acak. Namun, rangkaian stationarized masih memiliki kesalahan autokorelasi, menunjukkan bahwa beberapa jumlah istilah AR (p 8805 1) dan beberapa istilah MA (q 8805 1) juga diperlukan dalam persamaan peramalan. Proses penentuan nilai p, d, dan q yang terbaik untuk rangkaian waktu tertentu akan dibahas di bagian catatan selanjutnya (yang tautannya berada di bagian atas halaman ini), namun pratinjau beberapa jenis Model ARIMA nonseasonal yang biasa dijumpai diberikan di bawah ini. ARIMA (1,0,0) model autoregresif orde pertama: jika seri stasioner dan autokorelasi, mungkin dapat diprediksi sebagai kelipatan dari nilai sebelumnya, ditambah konstanta. Persamaan peramalan dalam kasus ini adalah 8230 yang Y regresi pada dirinya sendiri tertinggal oleh satu periode. Ini adalah model konstanta 8220ARIMA (1,0,0) constant8221. Jika mean Y adalah nol, maka istilah konstan tidak akan disertakan. Jika koefisien kemiringan 981 1 positif dan kurang dari 1 besarnya (harus kurang dari 1 dalam besaran jika Y adalah stasioner), model tersebut menggambarkan perilaku rata-rata pada nilai periodisasi berikutnya yang diperkirakan akan menjadi 981 1 kali sebagai Jauh dari mean sebagai nilai periode ini. Jika 981 1 negatif, ia memprediksi perilaku rata-rata dengan alternasi tanda, yaitu juga memprediksi bahwa Y akan berada di bawah rata-rata periode berikutnya jika berada di atas rata-rata periode ini. Dalam model autoregresif orde kedua (ARIMA (2,0,0)), akan ada istilah Y t-2 di sebelah kanan juga, dan seterusnya. Bergantung pada tanda dan besaran koefisien, model ARIMA (2,0,0) bisa menggambarkan sistem yang pembalikan rata-rata terjadi dengan mode sinusoidal oscillating, seperti gerak massa pada pegas yang mengalami guncangan acak. . ARIMA (0,1,0) berjalan acak: Jika seri Y tidak stasioner, model yang paling sederhana untuk model ini adalah model jalan acak, yang dapat dianggap sebagai kasus pembatas model AR (1) dimana autoregresif Koefisien sama dengan 1, yaitu deret dengan reversi mean yang jauh lebih lambat. Persamaan prediksi untuk model ini dapat ditulis sebagai: di mana istilah konstan adalah perubahan periode-ke-periode rata-rata (yaitu drift jangka panjang) di Y. Model ini dapat dipasang sebagai model regresi yang tidak mencegat dimana Perbedaan pertama Y adalah variabel dependen. Karena hanya mencakup perbedaan nonseasonal dan istilah konstan, model ini diklasifikasikan sebagai model quotARIMA (0,1,0) dengan konstan. Model random-walk-without - drift akan menjadi ARIMA (0,1, 0) model tanpa ARIMA konstan (1,1,0) model autoregresif orde satu yang terdesentralisasi: Jika kesalahan model jalan acak diobot dengan autokorelasi, mungkin masalahnya dapat diperbaiki dengan menambahkan satu lag variabel dependen ke persamaan prediksi - - yaitu Dengan mengundurkan diri dari perbedaan pertama Y pada dirinya sendiri yang tertinggal satu periode. Ini akan menghasilkan persamaan prediksi berikut: yang dapat diatur ulang menjadi Ini adalah model autoregresif orde pertama dengan satu urutan perbedaan nonseasonal dan istilah konstan - yaitu. Model ARIMA (1,1,0). ARIMA (0,1,1) tanpa perataan eksponensial sederhana: Strategi lain untuk memperbaiki kesalahan autokorelasi dalam model jalan acak disarankan oleh model pemulusan eksponensial sederhana. Ingatlah bahwa untuk beberapa seri waktu nonstasioner (misalnya yang menunjukkan fluktuasi yang bising di sekitar rata-rata yang bervariasi secara perlahan), model jalan acak tidak berjalan sebaik rata-rata pergerakan nilai masa lalu. Dengan kata lain, daripada mengambil pengamatan terbaru sebagai perkiraan pengamatan berikutnya, lebih baik menggunakan rata-rata beberapa pengamatan terakhir untuk menyaring kebisingan dan memperkirakan secara lebih akurat mean lokal. Model pemulusan eksponensial sederhana menggunakan rata-rata pergerakan rata-rata tertimbang eksponensial untuk mencapai efek ini. Persamaan prediksi untuk model smoothing eksponensial sederhana dapat ditulis dalam sejumlah bentuk ekuivalen matematis. Salah satunya adalah bentuk koreksi yang disebut 8220error correction8221, dimana ramalan sebelumnya disesuaikan dengan kesalahan yang dibuatnya: Karena e t-1 Y t-1 - 374 t-1 menurut definisinya, ini dapat ditulis ulang sebagai : Yang merupakan persamaan peramalan ARIMA (0,1,1) - tanpa perkiraan konstan dengan 952 1 1 - 945. Ini berarti bahwa Anda dapat menyesuaikan smoothing eksponensial sederhana dengan menentukannya sebagai model ARIMA (0,1,1) tanpa Konstan, dan perkiraan koefisien MA (1) sesuai dengan 1-minus-alpha dalam formula SES. Ingatlah bahwa dalam model SES, rata-rata usia data dalam prakiraan 1 periode adalah 1 945. yang berarti bahwa mereka cenderung tertinggal dari tren atau titik balik sekitar 1 945 periode. Dengan demikian, rata-rata usia data dalam prakiraan 1-periode-depan model ARIMA (0,1,1) - tanpa konstan adalah 1 (1 - 952 1). Jadi, misalnya, jika 952 1 0,8, usia rata-rata adalah 5. Karena 952 1 mendekati 1, model ARIMA (0,1,1) - tanpa model konstan menjadi rata-rata bergerak jangka-panjang, dan sebagai 952 1 Pendekatan 0 menjadi model random-walk-without-drift. Apa cara terbaik untuk memperbaiki autokorelasi: menambahkan istilah AR atau menambahkan istilah MA Dalam dua model sebelumnya yang dibahas di atas, masalah kesalahan autokorelasi dalam model jalan acak diperbaiki dengan dua cara yang berbeda: dengan menambahkan nilai lag dari seri yang berbeda Ke persamaan atau menambahkan nilai tertinggal dari kesalahan perkiraan. Pendekatan mana yang terbaik Aturan praktis untuk situasi ini, yang akan dibahas lebih rinci nanti, adalah bahwa autokorelasi positif biasanya paling baik ditangani dengan menambahkan istilah AR ke model dan autokorelasi negatif biasanya paling baik ditangani dengan menambahkan MA istilah. Dalam deret waktu bisnis dan ekonomi, autokorelasi negatif sering muncul sebagai artefak differencing. (Secara umum, differencing mengurangi autokorelasi positif dan bahkan dapat menyebabkan perubahan dari autokorelasi positif ke negatif.) Jadi, model ARIMA (0,1,1), di mana perbedaannya disertai dengan istilah MA, lebih sering digunakan daripada Model ARIMA (1,1,0). ARIMA (0,1,1) dengan perataan eksponensial sederhana konstan dengan pertumbuhan: Dengan menerapkan model SES sebagai model ARIMA, Anda benar-benar mendapatkan fleksibilitas. Pertama, perkiraan koefisien MA (1) dibiarkan negatif. Ini sesuai dengan faktor pemulusan yang lebih besar dari 1 dalam model SES, yang biasanya tidak diizinkan oleh prosedur pemasangan model SES. Kedua, Anda memiliki pilihan untuk memasukkan istilah konstan dalam model ARIMA jika Anda mau, untuk memperkirakan tren nol rata-rata. Model ARIMA (0,1,1) dengan konstanta memiliki persamaan prediksi: Prakiraan satu periode dari model ini secara kualitatif serupa dengan model SES, kecuali bahwa lintasan perkiraan jangka panjang biasanya adalah Garis miring (kemiringannya sama dengan mu) bukan garis horizontal. ARIMA (0,2,1) atau (0,2,2) tanpa pemulusan eksponensial linier konstan: Model pemulusan eksponensial linier adalah model ARIMA yang menggunakan dua perbedaan nonseason dalam hubungannya dengan persyaratan MA. Perbedaan kedua dari seri Y bukan hanya perbedaan antara Y dan dirinya tertinggal dua periode, namun ini adalah perbedaan pertama dari perbedaan pertama - i. Perubahan perubahan Y pada periode t. Jadi, perbedaan kedua Y pada periode t sama dengan (Y t - Y t-1) - (Y t-1 - Y t-2) Y t - 2Y t-1 Y t-2. Perbedaan kedua dari fungsi diskrit sama dengan turunan kedua dari fungsi kontinyu: ia mengukur kuotasi kuadrat atau quotcurvaturequot dalam fungsi pada suatu titik waktu tertentu. Model ARIMA (0,2,2) tanpa konstan memprediksi bahwa perbedaan kedua dari rangkaian sama dengan fungsi linier dari dua kesalahan perkiraan terakhir: yang dapat disusun ulang sebagai: di mana 952 1 dan 952 2 adalah MA (1) dan MA (2) koefisien. Ini adalah model pemulusan eksponensial linear umum. Dasarnya sama dengan model Holt8217s, dan model Brown8217s adalah kasus khusus. Ini menggunakan rata-rata pergerakan tertimbang eksponensial untuk memperkirakan tingkat lokal dan tren lokal dalam rangkaian. Perkiraan jangka panjang dari model ini menyatu dengan garis lurus yang kemiringannya bergantung pada tren rata-rata yang diamati menjelang akhir rangkaian. ARIMA (1,1,2) tanpa perataan eksponensial eksponensial yang terfragmentasi. Model ini diilustrasikan pada slide yang menyertainya pada model ARIMA. Ini mengekstrapolasikan tren lokal di akhir seri namun meratakannya pada cakrawala perkiraan yang lebih panjang untuk memperkenalkan catatan konservatisme, sebuah praktik yang memiliki dukungan empiris. Lihat artikel di quotWhy the Damped Trend karyaquot oleh Gardner dan McKenzie dan artikel quotGolden Rulequot oleh Armstrong dkk. Untuk rinciannya. Umumnya disarankan untuk tetap berpegang pada model di mana setidaknya satu dari p dan q tidak lebih besar dari 1, yaitu jangan mencoba menyesuaikan model seperti ARIMA (2,1,2), karena hal ini cenderung menyebabkan overfitting. Dan isu-isu kuotom-faktorquot yang dibahas secara lebih rinci dalam catatan tentang struktur matematis model ARIMA. Implementasi Spreadsheet: Model ARIMA seperti yang dijelaskan di atas mudah diterapkan pada spreadsheet. Persamaan prediksi adalah persamaan linier yang mengacu pada nilai-nilai masa lalu dari rangkaian waktu asli dan nilai kesalahan masa lalu. Dengan demikian, Anda dapat membuat spreadsheet peramalan ARIMA dengan menyimpan data di kolom A, rumus peramalan pada kolom B, dan kesalahan (data minus prakiraan) di kolom C. Rumus peramalan pada sel biasa di kolom B hanya akan menjadi Sebuah ekspresi linier yang mengacu pada nilai-nilai pada baris-kolom sebelumnya dari kolom A dan C, dikalikan dengan koefisien AR atau MA yang sesuai yang disimpan di sel-sel di tempat lain pada spreadsheet. SIFAT KODE Sifat Pengenalan Kode Saya dua dengan alam. Woody Allen Inilah kita: awal. Hampir awal. Jika sudah lama sejak Anda menyelesaikan pemrograman di Processing (atau matematika, dalam hal ini), pendahuluan ini akan membawa pikiran Anda kembali ke pemikiran komputasi sebelum kita mendekati beberapa materi yang lebih sulit dan kompleks. Pada Bab 1, akan membahas tentang konsep vektor dan bagaimana hal itu akan berfungsi sebagai blok bangunan untuk simulasi gerak sepanjang buku ini. Tapi sebelum kita mengambil langkah itu, mari kita pikirkan apa artinya sesuatu untuk sekadar bergerak di sekitar layar. Mari kita mulai dengan salah satu simulasi motion motion yang paling terkenal dan paling sederhana. I.1 Jalan Acak Bayangkan Anda berdiri di tengah balok keseimbangan. Setiap sepuluh detik, Anda membalik koin. Kepala, maju selangkah. Ekor, mundur selangkah. Ini adalah jalur walka acak yang didefinisikan sebagai rangkaian langkah acak. Melangkah dari balok keseimbangan dan ke lantai, Anda bisa melakukan random walk dalam dua dimensi dengan membalik koin yang sama dua kali dengan hasil sebagai berikut: Ya, ini mungkin tampak seperti algoritma yang sangat tidak canggih. Kendati demikian, jalan acak bisa digunakan untuk memodelkan fenomena yang terjadi di dunia nyata, dari pergerakan molekul dalam gas hingga perilaku penjudi menghabiskan satu hari di kasino. Bagi kami, kami memulai buku ini untuk belajar berjalan acak dengan tiga tujuan. Kita perlu meninjau konsep pemrograman yang berpusat pada pemrograman berorientasi bookobject ini. Walker acak akan berfungsi sebagai template untuk bagaimana kita akan menggunakan desain berorientasi objek untuk membuat hal-hal yang bergerak di sekitar jendela Processing. Jalan acak menghasut dua pertanyaan yang akan kita tanyakan berkali-kali di sepanjang buku ini: Bagaimana kita mendefinisikan peraturan yang mengatur perilaku objek kita dan kemudian, Bagaimana kita menerapkan peraturan ini dalam Pengolahan Sepanjang buku ini, yang secara berkala dibutuhkan secara berkala. Pemahaman dasar tentang keacakan, probabilitas, dan kebisingan Perlin. Jalan acak akan memungkinkan kita untuk menunjukkan beberapa poin penting yang akan berguna nantinya. I.2 Kelas Walker Acak Mari meninjau kembali sedikit pemrograman berorientasi obyek (OOP) terlebih dahulu dengan membangun objek Walker. Ini hanya akan menjadi tinjauan sepintas. Jika Anda belum pernah bekerja dengan OOP sebelumnya, Anda mungkin menginginkan agar ID yang lebih komprehensif menyarankan berhenti di sini dan meninjau dasar-dasar situs Pemrosesan sebelum melanjutkan. Objek dalam Processing adalah entitas yang memiliki data dan fungsionalitas. Kami mencari untuk merancang objek Walker yang melacak data keduanya (di tempat yang ada di layar) dan memiliki kemampuan untuk melakukan tindakan tertentu (seperti menggambar sendiri atau mengambil langkah). Kelas adalah template untuk membangun contoh objek yang sebenarnya. Pikirkan kelas sebagai pemotong cookie, objek adalah kue itu sendiri. Mari kita mulai dengan mendefinisikan kelas Walker yang artinya menjadi objek Walker. Walker hanya membutuhkan dua lembar data untuk lokasi x-nya dan satu untuk lokasi y-nya. Objek memiliki data. Karena kita hanya menggambar latar belakang sekali di setup (). Daripada membersihkannya terus menerus setiap kali melalui draw (). Kami melihat jejak jalan acak di jendela Pengolahan kami. Browser Anda tidak mendukung tag kanvas. Ada beberapa perbaikan yang bisa kami lakukan pada walker acak. Untuk satu, pilihan langkah Walker ini terbatas pada empat pilihan, turun, kiri, dan kanan. Tapi setiap pixel yang diberikan di jendela memiliki delapan kemungkinan tetangga, dan kemungkinan kesembilan adalah tinggal di tempat yang sama. Untuk menerapkan objek Walker yang bisa masuk ke piksel tetangga (atau tempat tinggal), kita bisa memilih angka antara 0 dan 8 (sembilan pilihan yang mungkin). Namun, cara yang lebih efisien untuk menulis kode adalah dengan memilih dari tiga langkah yang mungkin di sepanjang sumbu x (-1, 0, atau 1) dan tiga kemungkinan langkah di sepanjang sumbu y. Hasil -1, 0, atau 1 Semua variasi pada random random random ini memiliki satu kesamaan: setiap saat, probabilitas bahwa Walker akan mengambil langkah dalam arah tertentu sama dengan probabilitas Walker Akan mengambil langkah ke segala arah. Dengan kata lain, jika ada empat kemungkinan langkah, ada 1 dari 4 (atau 25) kemungkinan Walker akan mengambil langkah yang diberikan. Dengan sembilan kemungkinan langkahnya, peluang 1 in 9 (atau 11,1). Nyaman, ini adalah bagaimana fungsi random () berfungsi. Prosesing generator bilangan acak (yang beroperasi di belakang layar) menghasilkan apa yang dikenal sebagai distribusi angka yang seragam. Kita dapat menguji distribusi ini dengan sketsa Pengolahan yang dihitung setiap kali nomor acak dipetik dan menggambarkannya sebagai tinggi persegi panjang. Browser Anda tidak mendukung tag kanvas. Contoh I.2: Distribusi bilangan acak Array untuk melacak seberapa sering nomor acak dipetik Pilih nomor acak dan tambahkan jumlahnya. Graphing hasil Hasil tangkapan layar di atas menunjukkan hasil sketsa yang berjalan selama beberapa menit. Perhatikan bagaimana masing-masing batang grafik berbeda tingginya. Ukuran sampel kami (yaitu jumlah nomor acak yang dipilih) agak kecil dan ada beberapa perbedaan waktu, di mana jumlah tertentu dipilih lebih sering. Seiring waktu, dengan generator bilangan acak yang bagus, ini malah akan padam. Nomor Pseudo-Random Angka acak yang kita dapatkan dari fungsi random () tidak benar-benar acak sehingga dikenal sebagai pseudo-random. Mereka adalah hasil dari fungsi matematis yang mensimulasikan keacakan. Fungsi ini akan menghasilkan pola dari waktu ke waktu, namun jangka waktu yang begitu lama sehingga untuk kita, sama baiknya dengan keacakan murni Latihan I.1 Buat walker acak yang memiliki kecenderungan untuk bergerak ke bawah dan ke kanan. (Nah lihat solusinya di bagian berikutnya.) I.3 Distribusi Probabilitas dan Non-Seragam Ingat saat Anda pertama kali memulai pemrograman dalam Pengolahan Mungkin Anda ingin menggambar banyak lingkaran di layar. Jadi Anda berkata pada diri sendiri: Oh, saya tahu. Aku menggambar semua lingkaran ini di lokasi acak, dengan ukuran acak dan warna acak. Dalam sistem grafis komputer, seringkali termudah untuk menaburkan sistem dengan keacakan. Dalam buku ini, bagaimanapun, mencari untuk membangun sistem yang dimodelkan pada apa yang kita lihat di alam. Defaulting to randomness bukanlah solusi yang sangat bijaksana untuk masalah desain secara khusus, jenis masalah yang melibatkan pembuatan simulasi organik atau alami. Dengan beberapa trik, kita bisa mengubah cara kita menggunakan random () untuk menghasilkan distribusi bilangan random yang tidak seragam. Ini akan berguna di seluruh buku ini saat kita melihat sejumlah skenario yang berbeda. Ketika kita memeriksa algoritma genetika, misalnya, perlu sebuah metodologi untuk melakukan seleksi dimana anggota populasi kita harus dipilih untuk menyerahkan DNA mereka ke generasi berikutnya. Ingatlah konsep survival of the fittest Mari kita katakan bahwa kita memiliki populasi monyet yang berkembang. Tidak setiap monyet akan memiliki kesempatan yang sama untuk bereproduksi. Untuk mensimulasikan evolusi Darwin, kita tidak bisa memilih dua ekor monyet acak untuk menjadi orang tua. Kita membutuhkan yang lebih bugar untuk lebih cenderung dipilih. Kita perlu mendefinisikan probabilitas fittest. Misalnya, seekor monyet yang sangat cepat dan kuat mungkin memiliki kesempatan berproduksi 90, sementara yang lebih lemah hanya memiliki 10 peluang. Mari kita berhenti sejenak di sini dan melihat kemungkinan prinsip dasar. Pertama, teliti kemungkinan peristiwa tunggal, yaitu kemungkinan peristiwa tertentu akan terjadi. Jika Anda memiliki sistem dengan sejumlah kemungkinan hasil, probabilitas terjadinya kejadian tertentu sama dengan jumlah hasil yang memenuhi syarat karena peristiwa tersebut dibagi dengan jumlah total semua hasil yang mungkin. Sebuah lemparan koin adalah contoh sederhana hanya memiliki dua kemungkinan hasil, kepala atau ekor. Hanya ada satu cara untuk membalikkan kepala. Kemungkinan koin itu akan menghasilkan kepala, oleh karena itu, terbagi dua: 12 atau 50. Ambillah setumpuk lima puluh dua kartu. Probabilitas menggambar ace dari dek itu adalah: jumlah kartu as pada kartu 4 52 0,077 Probabilitas menggambar berlian adalah: jumlah jumlah kartu berlian 13 52 0.25 25 Kita juga dapat menghitung probabilitas beberapa kejadian yang terjadi secara berurutan. . Untuk melakukan ini, kita hanya memperbanyak probabilitas individu dari setiap peristiwa. Kemungkinan koin yang membalikkan kepala tiga kali berturut-turut adalah: (12) (12) (12) 18 (atau 0,125) yang berarti bahwa koin akan menghasilkan tiga kali berturut-turut satu dari delapan kali (setiap kali Menjadi tiga lemparan). Latihan I.2 Berapakah probabilitas menggambar dua ace berturut-turut dari dek lima puluh dua kartu Ada beberapa cara di mana kita dapat menggunakan fungsi acak () dengan probabilitas dalam kode. Salah satu tekniknya adalah mengisi array dengan pilihan angka yang berulang kali memilih nomor acak dari array tersebut dan menghasilkan event berdasarkan pilihan tersebut. 1 disimpan dalam array dua kali, sehingga lebih cenderung dipetik. Latihan I.3 Buat walker acak dengan probabilitas dinamis. Sebagai contoh, dapatkah Anda memberi kesempatan 50 bergerak ke arah mouse I.4 Distribusi Normal dari Bilangan Acak Mari kembali ke populasi monyet Pengolahan yang disimulasikan. Program Anda menghasilkan seribu objek Monyet, masing-masing dengan nilai tinggi antara 200 dan 300 (karena ini adalah dunia monyet yang memiliki ketinggian antara 200 dan 300 piksel). Apakah ini menggambarkan secara akurat ketinggian makhluk dunia nyata Pikirkan trotoar yang ramai di New York City. Pilih orang dari jalanan dan mungkin tampak bahwa tinggi badan mereka acak. Meskipun demikian, bukan jenis acak yang acak () menghasilkan. Tinggi masyarakat tidak terdistribusi secara merata ada lebih banyak orang dengan ketinggian rata-rata daripada yang sangat tinggi atau sangat pendek. Untuk mensimulasikan alam, kita mungkin menginginkan monyet kita memiliki tinggi rata-rata (250 piksel), namun tetap memungkinkannya untuk berada pada kondisi sangat pendek atau sangat tinggi. Distribusi nilai yang berkelompok rata-rata (disebut rata-rata) dikenal sebagai distribusi normal. Ini juga disebut distribusi Gaussian (dinamai untuk matematikawan Carl Friedrich Gauss) atau, jika Anda orang Prancis, distribusi Laplacian (dinamai untuk Pierre-Simon Laplace). Kedua matematikawan tersebut bekerja secara bersamaan di awal abad kesembilan belas untuk menentukan distribusi semacam itu. Ketika Anda membuat grafik distribusi, Anda mendapatkan sesuatu yang terlihat seperti berikut, yang secara informal dikenal sebagai kurva bel: Kurva dihasilkan oleh fungsi matematis yang mendefinisikan probabilitas nilai tertentu yang terjadi sebagai fungsi mean (sering ditulis sebagai, Huruf Yunani mu) dan standar deviasi (, sigma huruf Yunani). Maksudnya cukup mudah dimengerti. Dalam kasus nilai tinggi kita antara 200 dan 300, Anda mungkin memiliki pengertian intuitif tentang mean (yaitu rata-rata) sebagai 250. Namun, bagaimana jika saya mengatakan bahwa standar deviasi adalah 3 atau 15 Apa artinya ini bagi Angka Grafik di atas seharusnya memberi kita petunjuk. Grafik di sebelah kiri menunjukkan distribusi dengan standar deviasi yang sangat rendah, dimana sebagian besar nilai cluster berada di sekitar mean. Grafik di sebelah kanan menunjukkan deviasi standar yang lebih tinggi, dimana nilainya lebih merata dari rata-rata. Angka tersebut bekerja sebagai berikut: Dengan populasi, 68 dari jumlah populasi tersebut akan memiliki nilai dalam kisaran satu standar deviasi dari rata-rata, 98 dalam dua standar deviasi, dan 99,7 dalam tiga standar deviasi. Dengan standar deviasi 5 piksel, hanya 0,3 dari ketinggian monyet yang kurang dari 235 piksel (tiga standar deviasi di bawah rata-rata 250) atau lebih besar dari 265 piksel (tiga standar deviasi di atas rata-rata 250). Menghitung Deviasi Rata-rata dan Standar Pertimbangkan kelas dari sepuluh siswa yang menerima nilai berikut (dari 100) pada sebuah tes: 85, 82, 88, 73, 83 Standar deviasi dihitung sebagai Akar kuadrat rata-rata kuadrat penyimpangan di sekitar mean. Dengan kata lain, ambil perbedaan dari mean untuk setiap orang dan buktikanlah itu (varians). Hitung rata-rata semua nilai ini dan ambil akar kuadrat sebagai standar deviasi. Deviasi standar adalah akar kuadrat dari varians rata-rata: 15.13 Beruntung bagi kita, untuk menggunakan distribusi angka acak normal dalam sketsa Pengolahan, kita tidak perlu melakukan perhitungan ini sendiri. Sebagai gantinya, kita bisa memanfaatkan kelas yang dikenal sebagai Random. Yang kita dapatkan secara gratis sebagai bagian dari perpustakaan Java default yang diimpor ke Processing (lihat JavaDocs untuk informasi lebih lanjut). Untuk menggunakan kelas Random, pertama-tama kita harus mendeklarasikan variabel tipe Random dan membuat objek Acak di setup (). Kami menggunakan generator nama variabel karena yang ada di sini dapat dianggap sebagai generator bilangan acak. Jika kita ingin menghasilkan bilangan acak dengan distribusi normal (atau Gaussian) setiap kali kita berlari melalui draw (). Semudah memanggil fungsi nextGaussian (). Meminta nomor acak Gaussian. (Catatan nextGaussian () mengembalikan nilai ganda dan harus dikonversi menjadi float.) Heres the thing. Apa yang seharusnya kita lakukan dengan nilai ini Bagaimana jika kita ingin menggunakannya, misalnya, untuk menetapkan posisi x dari bentuk yang kita gambar di layar Fungsi nextGaussian () mengembalikan distribusi normal bilangan acak dengan parameter berikut: Rata-rata nol dan standar deviasi satu. Katakanlah kita menginginkan rata-rata 320 (piksel horisontal tengah di jendela dengan lebar 640) dan standar deviasi 60 piksel. Kita bisa menyesuaikan nilainya dengan parameter kita dengan mengalikannya dengan standar deviasi dan menambahkan meannya. Browser Anda tidak mendukung tag kanvas. Contoh I.4: Distribusi Gaussian Perhatikan bahwa nextGaussian () mengembalikan nilai ganda. Kalikan dengan standar deviasi dan tambahkan meannya. Dengan menggambar elips di atas satu sama lain dengan sedikit transparansi, kita benar-benar bisa melihat distribusinya. Tempat paling terang berada di dekat pusat, di mana sebagian besar cluster nilai, tapi lingkaran sangat sering digambar lebih jauh ke kanan atau kiri tengah. Latihan I.4 Pertimbangkan simulasi pemercikan cat yang ditarik sebagai kumpulan titik-titik berwarna. Sebagian besar kelompok cat di sekitar lokasi sentral, namun beberapa titik melayang ke tepinya. Dapatkah Anda menggunakan distribusi normal dari bilangan acak untuk menghasilkan lokasi titik-titik itu Dapatkah Anda juga menggunakan distribusi normal bilangan acak untuk menghasilkan palet warna Latihan I.5 Jalan acak Gaussian didefinisikan sebagai satu di mana ukuran langkah (bagaimana Jauh objek bergerak ke arah tertentu) dihasilkan dengan distribusi normal. Terapkan variasi jalan acak kami ini. I.5 Distribusi Kustom dari Bilangan Acak Akan tiba saatnya dalam hidup Anda bila Anda tidak menginginkan distribusi nilai acak yang seragam, atau yang Gaussian. Mari kita bayangkan sejenak bahwa Anda adalah pejalan kaki acak untuk mencari makanan. Bergerak secara acak di sekitar ruangan nampak seperti strategi yang masuk akal untuk menemukan sesuatu untuk dimakan. Lagi pula, Anda tidak tahu di mana makanan itu, jadi sebaiknya Anda mencari secara acak sampai Anda menemukannya. Masalahnya, seperti yang mungkin Anda perhatikan, adalah bahwa pejalan kaki acak kembali ke lokasi yang sebelumnya sering dikunjungi berkali-kali (ini dikenal dengan oversampling). Salah satu strategi untuk menghindari masalah semacam itu adalah, seringkali, mengambil langkah yang sangat besar. Hal ini memungkinkan alat bantu jalan untuk mencari makan secara acak di sekitar lokasi tertentu sementara secara berkala melompat sangat jauh untuk mengurangi jumlah oversampling. Variasi berjalan acak ini (dikenal dengan nama Lvy flight) memerlukan seperangkat probabilitas khusus. Meskipun bukan implementasi yang tepat dari penerbangan Lvy, kita dapat menyebutkan distribusi probabilitas sebagai berikut: semakin lama langkahnya, semakin kecil kemungkinannya untuk memilih langkah yang lebih pendek, semakin besar kemungkinannya. Sebelumnya dalam prolog ini, kita melihat bahwa kita dapat menghasilkan distribusi probabilitas khusus dengan mengisi sebuah array dengan nilai (beberapa diduplikasi sehingga mereka akan dipetik lebih sering) atau dengan menguji hasil random (). Kita bisa menerapkan penerbangan Lvy dengan mengatakan bahwa ada 1 peluang walker mengambil langkah besar. Sebuah kesempatan untuk mengambil langkah besar Namun, ini mengurangi probabilitas ke sejumlah opsi yang tetap. Bagaimana jika kita ingin membuat keputusan yang lebih umum, angka yang lebih tinggi, kemungkinan besar akan dipetik 3.145 akan cenderung dipetik dari 3.144, bahkan jika kemungkinan itu hanya sedikit lebih besar. Dengan kata lain, jika x adalah bilangan acak, kita bisa memetakan kemungkinan pada sumbu y dengan y x. Jika kita dapat mengetahui bagaimana cara menghasilkan distribusi bilangan acak sesuai dengan grafik di atas, maka kita akan dapat menerapkan metodologi yang sama ke kurva mana pun yang kita punya rumusnya. Salah satu solusinya adalah memilih dua nomor acak, bukan satu. Nomor acak pertama hanya itu, nomor acak. Yang kedua, bagaimanapun, adalah apa yang baik memanggil nilai acak kualifikasi. Ini akan memberitahu kita apakah akan menggunakan yang pertama atau membuangnya dan memilih yang lain. Angka yang memiliki kualifikasi waktu lebih mudah akan dipetik lebih sering, dan angka yang jarang lolos akan dipetik jarang. Berikut adalah langkah-langkahnya (untuk saat ini, mari pertimbangkan hanya nilai acak antara 0 dan 1): Pilih nomor acak: R1 Hitung probabilitas P yang harus memenuhi R1. Mari kita coba: P R1. Pilih nomor acak yang lain: R2 Jika R2 kurang dari P, maka kita telah menemukan nomor kitaR1 Jika R2 tidak kurang dari P, kembali ke langkah 1 dan mulai dari awal lagi. Di sini kita mengatakan bahwa kemungkinan bahwa nilai acak akan memenuhi syarat sama dengan nomor acak itu sendiri. Katakanlah kita memilih 0,1 untuk R1. Ini berarti R1 akan memiliki 10 peluang lolos. Jika kita memilih 0,83 untuk R1 maka akan memiliki peluang lolos ke 83. Semakin tinggi jumlahnya, semakin besar kemungkinan kita akan benar-benar menggunakannya. Berikut adalah sebuah fungsi (dinamai dengan metode Monte Carlo, yang dinamai untuk kasino Monte Carlo) yang menerapkan algoritma di atas, mengembalikan nilai acak antara 0 dan 1. Kami melakukan ini selamanya sampai kami menemukan nilai acak kualifikasi. Latihan I.6 Gunakan distribusi probabilitas kustom untuk memvariasikan ukuran langkah yang diambil oleh walker acak. Ukuran langkah dapat ditentukan dengan mempengaruhi kisaran nilai yang dipilih. Dapatkah Anda memetakan probabilitasnya secara eksponensial. Membuat kemungkinan bahwa nilai diambil sama dengan nilai kuadrat Distribusi seragam ukuran langkah. Ubahlah ini (Kemudian lihat juga bagaimana melakukan ini dengan lebih efisien menggunakan vektor.) I.6 Perlin Noise (Pendekatan yang Lebih Lembut) Generator bilangan acak yang bagus menghasilkan angka yang tidak memiliki hubungan dan tidak menunjukkan pola yang jelas. Seperti yang kita mulai lihat, sedikit keacakan bisa menjadi hal yang baik saat memprogram perilaku organik dan manusiawi. Namun, keacakan sebagai satu-satunya pedoman belum tentu alami. Algoritma yang dikenal sebagai Perlin noise, dinamai untuk penemu Ken Perlin, memperhitungkan konsep ini. Perlin mengembangkan fungsi noise saat mengerjakan film Tron yang asli di awal tahun 1980an, dirancang untuk menciptakan tekstur prosedural untuk efek yang dihasilkan komputer. Pada tahun 1997 Perlin memenangkan Academy Award dalam pencapaian teknis untuk pekerjaan ini. Perlin noise dapat digunakan untuk menghasilkan berbagai efek dengan kualitas alami, seperti awan, lansekap, dan tekstur berpola seperti marmer. Suara Perlin memiliki penampilan yang lebih organik karena menghasilkan rangkaian bilangan pseudo-random yang dipesan secara alami (mulus). Grafik di sebelah kiri bawah menunjukkan kebisingan Perlin dari waktu ke waktu, dengan sumbu x yang mewakili catatan waktu kelancaran kurva. Grafik di sebelah kanan menunjukkan bilangan acak murni dari waktu ke waktu. (Kode untuk menghasilkan grafik ini tersedia dalam unduhan buku yang menyertainya.) Gambar I.5: Gambar Kebisingan I.6: Pemrosesan Acak memiliki implementasi algoritma perlin noise yang terintegrasi: fungsi noise (). Fungsi noise () membutuhkan satu, dua, atau tiga argumen, karena noise dihitung dalam satu, dua, atau tiga dimensi. Mari kita mulai dengan melihat suara satu dimensi. Noise Detail Pemrosesan referensi kebisingan memberitahu kita bahwa noise dihitung selama beberapa oktaf. Memanggil fungsi noiseDetail () akan mengubah jumlah oktaf dan kepentingannya relatif terhadap satu sama lain. Hal ini pada gilirannya mengubah bagaimana fungsi noise berperilaku. Kuliah online oleh Ken Perlin memungkinkan Anda belajar lebih banyak tentang bagaimana kebisingan bekerja dari Perlin sendiri. Pertimbangkan menggambar lingkaran di jendela Pengolahan kami di lokasi x acak. Sebuah x-lokasi acak Sekarang, alih-alih lokasi x acak, kami menginginkan lokasi x-noise Perlin yang lebih halus. Anda mungkin berpikir bahwa semua yang perlu Anda lakukan adalah mengganti acak () dengan noise (). Yaitu lokasi x-noise Sementara secara konseptual, inilah yang ingin kita dokumentulasi dengan nilai x yang berkisar antara 0 dan lebarnya sesuai dengan Perlin noisethis bukanlah implementasi yang benar. Sedangkan argumen pada fungsi random () menentukan kisaran nilai antara minimum dan maksimum, noise () tidak bekerja seperti ini. Sebaliknya, kisaran output tetap selalu mengembalikan nilai antara 0 dan 1. Nah, lihat sebentar lagi kita bisa mengatasinya dengan mudah dengan fungsi Processings map (), tapi pertama-tama kita harus memeriksa apa sebenarnya noise () yang mengharapkan kita untuk lulus. Sebagai sebuah argumen. Kita bisa memikirkan satu dimensi Perlin noise sebagai urutan nilai linear dari waktu ke waktu. Sebagai contoh: Seberapa cepat kenaikan kita juga mempengaruhi kelancaran suara. Jika kita melakukan lompatan besar pada waktunya, maka kita akan melompat maju dan nilainya akan lebih acak. Coba jalankan kode beberapa kali, incrementing t dengan 0.01, 0.02, 0.05, 0.1, 0.0001, dan Anda akan melihat hasil yang berbeda. Pemetaan Kebisingan Sekarang siap menjawab pertanyaan tentang apa yang harus dilakukan dengan nilai noise. Begitu kita memiliki nilai dengan kisaran antara 0 dan 1, terserah kita untuk memetakan rentang itu sesuai dengan yang kita inginkan. Cara termudah untuk melakukannya adalah dengan fungsi Processings map (). Fungsi peta () mengambil lima argumen. Pertama adalah nilai yang ingin kita petakan, dalam hal ini n. Maka kita harus memberikan nilai kisaran saat ini (minimal dan maksimal), diikuti oleh kisaran yang kita inginkan. Dalam hal ini, kita tahu bahwa noise memiliki range antara 0 dan 1, tapi wed ingin menggambar lingkaran kita dengan kisaran antara 0 dan lebar jendela. Perhatikan bagaimana contoh di atas membutuhkan sepasang variabel tambahan: tx dan ty. Ini karena kita perlu melacak dua variabel waktu, satu untuk lokasi x objek Walker dan satu untuk lokasi y. Tapi ada yang agak aneh tentang variabel-variabel ini. Mengapa tx mulai dari 0 dan ty pada 10.000 Sementara angka-angka ini adalah pilihan yang sewenang-wenang, kami telah secara khusus menginisialisasi dua variabel waktu kami dengan nilai yang berbeda. Ini karena fungsi noise bersifat deterministik: ini memberi Anda hasil yang sama untuk waktu tertentu setiap hari. Jika kita meminta nilai noise pada saat yang sama t untuk kedua x dan y. Maka x dan y akan selalu sama, artinya objek Walker hanya akan bergerak sepanjang diagonal. Sebagai gantinya, kita hanya menggunakan dua bagian yang berbeda dari ruang kebisingan, dimulai dari 0 untuk x dan 10.000 untuk y sehingga x dan y dapat muncul untuk bertindak secara independen satu sama lain. Sebenarnya, tidak ada konsep aktual waktu bermain di sini. Metafora yang berguna untuk membantu kita memahami bagaimana fungsi noise bekerja, tapi sebenarnya apa yang kita miliki adalah ruang, bukan waktu. Grafik di atas menggambarkan urutan linear dari nilai noise dalam ruang satu dimensi, dan kita dapat meminta nilai pada lokasi x tertentu kapan pun kita mau. Sebagai contoh, Anda akan sering melihat sebuah variabel bernama xoff untuk menunjukkan x-offset sepanjang grafik noise, bukan t untuk waktu (seperti yang tercantum dalam diagram). Latihan I.7 Pada walker acak di atas, hasil fungsi noise dipetakan langsung ke lokasi Walker. Buat walker acak di mana Anda malah memetakan hasil dari fungsi noise () ke ukuran langkah Walker. Kebisingan Dua Dimensi Ide nilai kebisingan yang tinggal di ruang satu dimensi itu penting karena membawa kita ke diskusi ruang dua dimensi. Mari pikirkan hal ini sejenak. Dengan noise satu dimensi, kita memiliki urutan nilai dimana nilai tertentu sama dengan tetangganya. Karena nilainya dalam satu dimensi, hanya ada dua tetangga: nilai yang ada sebelum itu (ke kiri di grafik) dan yang datang setelah itu (ke kanan). Gambar I.10: Kebisingan 1D Gambar I.11: Kebisingan 2D Kebisingan dua dimensi bekerja dengan cara yang persis sama secara konseptual. Perbedaan tentu saja adalah bahwa kita arent melihat nilai-nilai sepanjang jalur linear, tapi nilai-nilai yang duduk di grid. Pikirkan sepotong kertas grafik dengan angka yang ditulis ke dalam setiap sel. Nilai yang diberikan akan sama dengan semua tetangganya: di atas, di bawah, ke kanan, ke kiri, dan sepanjang diagonal. Jika Anda memvisualisasikan kertas grafik ini dengan setiap nilai yang dipetakan ke kecerahan warna, Anda akan mendapatkan sesuatu yang terlihat seperti awan. Putih duduk di sebelah abu-abu terang, yang duduk di sebelah abu-abu, yang berada di sebelah abu-abu gelap, yang berada di sebelah hitam, yang berada di sebelah abu-abu gelap, dll. Inilah sebabnya mengapa suara pada awalnya ditemukan. Anda mengubah parameter sedikit atau bermain dengan warna agar gambar yang dihasilkan terlihat lebih mirip marmer atau kayu atau tekstur organik lainnya. Mari kita lihat sekilas bagaimana menerapkan noise dua dimensi di Processing. Jika Anda ingin mewarnai setiap piksel jendela secara acak, Anda memerlukan loop bersarang, yang mengakses setiap piksel dan memilih kecerahan acak. Kecerahan acak Untuk mewarnai setiap piksel sesuai dengan fungsi noise (), lakukan hal yang persis sama, hanya dengan memanggil random () suara panggilan yang bagus (). Kecerahan suara Perlin Ini adalah konsep awal yang bagus untuk memberi Anda nilai kebisingan untuk setiap lokasi (x. Y) di ruang dua dimensi kami. Masalahnya adalah bahwa wont ini memiliki kualitas mendung yang kita inginkan. Melompat dari pixel 200 ke pixel 201 terlalu besar dari lompatan melalui noise. Ingat, ketika kita bekerja dengan noise satu dimensi, kita menambahkan variabel waktu kita sebesar 0,01 setiap frame, bukan oleh 1 Solusi yang cukup bagus untuk masalah ini adalah dengan hanya menggunakan variabel yang berbeda untuk argumen kebisingan. Sebagai contoh, kita dapat menambahkan sebuah variabel yang disebut xoff setiap kali kita bergerak secara horisontal, dan variabel yoff setiap kali kita bergerak secara vertikal melalui loop bersarang. Contoh I.6: 2D Perlin noise Mulai xoff di 0. Untuk setiap xoff, mulai yoff di 0.

No comments:

Post a Comment