馬爾可夫版天氣預報,了解一下!

首先給大家介紹一下什麼是馬爾可夫鏈:

馬爾可夫鏈 因安德烈·馬爾可夫得名,是指數學中具有馬爾可夫性質的離散事件隨機過程。該過程中在給定當前知識或信息的情況下,過去對於預測將來是無關的。馬爾可夫鏈通常用來建模排隊理論和統計學中的建模。除此之外,馬爾可夫鏈也有眾多的生物學應用,特別是人口過程中可以幫助模擬生物人口過程的建模。隱蔽馬爾可夫模型還被用於生物信息學,用以編碼區域或基因預測。

簡單來說,馬爾可夫鏈的定義就是:

在時間和狀態都是離散的條件下,「過去」和「將來」沒有任何關係的隨機過程被稱為馬爾可夫鏈,簡記為

先來舉個栗子吧!我們親手試一下馬爾可夫鏈版的天氣預報~

假設任意相繼的兩天中,雨轉晴的概率為1/3,晴轉雨的概率為1/2。

已知12月1日為晴天,問 (a) 12月3日為晴天的概率?(b) 12月5日為雨天的概率?

首先我們採用 畫圖 的形式來推算:

結果發現,在12.1是晴天的條件下,12.3也是晴天的概率約等於0.4167。同理可以推算出12.5是雨天的概率約為0.5995。

想一想,如果想推算出一個月甚至半年之後的概率呢?繼續畫圖大概是會瘋掉的吧。。。

於是,我們想到了採用 矩陣 的數學方法!

我們給上面這個矩陣起個名字叫「P」,其所表示的是第一天和第二天的信息!

如果我們想求出第三天的信息,則只需要求出P的平方即可:

這是我們發現,和之前畫圖所得的結果是一樣的!

接下來 我們用同樣的方法可以算出12.5雨天的概率如下圖:

其約等於0.5995。

所以說,矩陣是一個既方便又好用的方法,那麼接下來我們討論一下在R中的計算過程吧。

以下內容翻譯自一篇文章:MARKOV CHAINS IN R

alexhwoods.com/markov-c

幾周前,我寫了一個關於馬爾可夫鏈的課程,當時我給出的例子是一個很常規的模型。我很喜歡寫這些內容,但是我發現如果你想用馬爾可夫鏈去完成一些更實際化的任務,那個課程恐怕只是個引子。所以,今天在這裡我想給大家一個更好的例子,一個與編程相關的例子!

汽車租賃問題

假如一家汽車租賃公司在Ottawa有三家分店:市中心、東區和西區,而且這三家分店都有送貨服務。於是這家公司的統計學家門得出:

  1. 市中心的情況:30%在市中心,30%在東區交付,40%在西區交付。
  2. 東區的情況:40%在市中心,40%在東區交付,20%在西區交付。
  3. 西區的情況:50%在市中心,30%在東區交付,20%在西區交付。

送貨後,司機則到最近的地點進行下一個投遞。這樣一來,司機當前的位置只能由ta之前的位置來決定。

這就是一個馬爾可夫鏈的實例,因為當前狀態對下一個狀態具有預測能力。在這個例子里,狀態就是市中心、東區和西區。

我們還可以用一個轉移概率矩陣(又叫躍遷矩陣,transition matrix)來模擬馬爾可夫鏈。

setting up the transition matrix:rentalStates <- c("Downtown", "East", "West")rentalTransition <- matrix(c(0.3, 0.3, 0.4, + 0.4, 0.4, 0.2, + 0.5, 0.3, 0.2), + byrow = T, nrow = 3, dimnames = list(rentalStates, rentalStates))rentalTransitionoutput: Downtown East WestDowntown 0.3 0.3 0.4East 0.4 0.4 0.2West 0.5 0.3 0.2

當然還有一種簡單的方式,我們叫它「markovchain」。讓我們將模型定義為markovchain,調用它相當於show()方法。

我們甚至可以把它當做矩陣的元素。

using the Markov Chain package in R:mcRental <- new("markovchain", states = rentalStates, byrow = T, transitionMatrix = rentalTransition, name = "Rental Cars")# We can access the transition matrix just by calling the mc objectmcRentaloutput:Rental Cars A 3 - dimensional discrete Markov Chain with following states Downtown East West The transition matrix (by rows) is defined as follows Downtown East WestDowntown 0.3 0.3 0.4East 0.4 0.4 0.2West 0.5 0.3 0.2

還可以使用mcRental。

mcRental[1] # the probabilities that we go Downtown, East, and West, given that we are currently Downtownoutput:Downtown East West 0.3 0.3 0.4

還可以用plot(mcRental)來繪圖:

好啦,我們再來看看統計問題。如果現在是鬧市區,在兩次送貨的過程中,概率是多少呢?

為了回答這個問題,我們必須找到每一種可能,我們可以讓兩次送貨的重點回到市中心,然後把它們的概率加在一起。

# Here is a question to set up some of the functions # Given we are downtown, what is the probability we will be downtown in two trips?# We can go Downtown -> Downtown, a <- 0.3 * 0.3# East -> Downtown (note that to we have to get the probability of going Downtown from the East location),b <- 0.3 * 0.4# West -> Downtown (same logic here)c <- 0.4 * 0.5a + b + c # The probability that we will be downtown in 2 trips.[1]0.41

我們得到,長遠看來,我們得到的結果是相同的。

a much easier way:mcRental ^ 2output:Rental Cars^2 A 3 - dimensional discrete Markov Chain with following states Downtown East West The transition matrix (by rows) is defined as follows Downtown East WestDowntown 0.41 0.33 0.26East 0.38 0.34 0.28West 0.37 0.33 0.30

上面所示的矩陣表示兩次送貨中從一個地方到另一個地方的概率。

這個步驟可以被操作很多次,它是合理的,隨著次數增加,預測的能力就會變小。我們可以通過把轉移概率矩陣提高到足夠大來證明這個事實。

mcRental^20output:Rental Cars^20 A 3 - dimensional discrete Markov Chain with following states Downtown East West The transition matrix (by rows) is defined as follows Downtown East WestDowntown 0.3888889 0.3333333 0.2777778East 0.3888889 0.3333333 0.2777778West 0.3888889 0.3333333 0.2777778

當起點完全不相關時,這種分布被稱為平穩分布。它可以用線性代數法來計算,但是還有一個方法叫做steadyStates()。這裡有一個可以利用這個方法的問題。

計程車公司有70名司機,每個司機每天要完成30趟送貨,問有多少司機最終會到西區?

首先,我們要把轉移概率矩陣提高到30,並確保起點相同。然後,把標量70乘上平穩分布,將會得出期望值的向量。

solution to problem:mcRental ^ 3070*steadyStates(mcRental)output: Downtown East West[1,] 27.22222 23.33333 19.44444

這裡有幾個很棒的函數,其中有兩個值得強調一下!

條件分布只需在矩陣中拉出一行,我很喜歡這個方法,因為這強調了馬爾可夫鏈的核心條件概率。

conditionalDistribution(mcRental, "Downtown")output:Downtown East West 0.3 0.3 0.4

匯總函數提供了一個更全面的視角,有點超綱,但很有價值。

summary(mcRental)output:Rental Cars Markov chain that is composed by: Closed classes: Downtown East West Recurrent classes: {Downtown,East,West}Transient classes: NONE The Markov chain is irreducible The absorbing states are: NONE

References:

https://baike.baidu.com/item/馬爾可夫鏈/6171383?fr=aladdin

mast.queensu.ca/~stat45

cran.r-project.org/web/

什麼是馬爾可夫鏈模型,通俗易懂,詳細具體?

作者:Bella

編輯:Hal 9000


推薦閱讀:

全國開啟「番茄炒蛋」模式,防蚊黑科技了解下?
在 Linux 字元界面中獲取天氣預報

TAG:天氣預報 | 自然科學 |