貝葉斯燈塔位置估計
我正在嘗試在 R 中學習 Stan,作為一個有趣的挑戰,我正在嘗試根據觀察到的閃光來估計燈塔的位置。但是我嘗試的模型不收斂(Rhat!= 1)或估計的參數分佈很大。
觀測到的數據是從(直線)海岸線 100 米外的一座燈塔發出的閃光。角度是均勻分佈的,但沿海岸線觀察到的閃光是重尾的。
n_flashes <- 50 loc <- c(0, 100) angles <- runif(n_flashes, -pi/2, pi/2) angles_x <- loc[2] * tan(angles) flashes <- loc[1] + angles_x
我想通過給定實際模型生成過程來估計燈塔的位置。這是我的 stan 模型:
data { int<lower=0> N; real flashes[N]; } parameters { real x_loc; real<lower=0> y_loc; real<lower=-pi()/2, upper=pi()/2> angle[N]; } model { x_loc ~ normal(0, 10); y_loc ~ normal(100, 10); for (i in 1:N) { flashes[i] ~ cauchy(x_loc + tan(angle[i]) * y_loc, 1); } }
(注意:我用 1 米標準偏差對閃光觀測進行建模,因為 Stan 要求我給出閃光[i] 的分佈)。
然後我從 R 調用模型:
n_flashes <- 50 loc <- c(0, 100) angles <- runif(n_flashes, -pi/2, pi/2) angles_x <- loc[2] * tan(angles) flashes <- loc[1] + angles_x stan_input <- list() stan_input$flashes <- flashes stan_input$N <- n_flashes fit <- stan("lighthouse.stan", data = stan_input)
但是這個模型有很大
Rhat
的。如何改進此模型以防止這種情況發生?如何在 stan 中建模角度?您將如何根據沿海岸線觀察到的閃光來模擬燈塔的位置?
這是一個著名的問題,被稱為海鷗燈塔,來自海鷗在 1988 年的一個例子。當在社會科學和物理學中再邁出一步時,它就會產生深遠的影響。您實際上有足夠的信息來通過驗收-拒絕測試來解決這個問題,但是如果您想使用 MCMC,請隨意。
讓我們以另一種方式看待您的問題,知道燈塔距離海岸 100 m 實際上是很多信息。那件事情很重要,否則您將不得不解決距離和位置問題。
附帶說明一下,Cauchy 分佈在 99.99% HDR 處為 636 個半四分位間距,因此如果您正在尋找窄區間,您幾乎可以忘記它。然而,如果你使用正態近似,它永遠不會收斂,因為這個問題違反了中心極限定理,如果你估計作為標準偏差,那麼如果那麼是樣本大小作為. 如果你這樣做了,你的估計會隨著你添加日期點而變得越來越糟。
您需要注意您正在觀察集合有一點燈塔將垂直於海灘的地方。注意不是定位它們是均勻分佈的,而是角度,. 我們沒有觀察角度,只觀察點的集合。
點與角的關係為
就角度而言,這可以表示為 自從
和在區域內是均勻的我們知道這是 所以,根據貝葉斯定理,如果垂直於燈塔的岸點是,則燈塔位於. 該點的估計量,因為您沒有關於該點的先驗信息是
如果您想讓這個問題更有趣,假設您不知道該位置距離海岸 100 米。你的問題他們變成了更適合 stan 的二維問題。你的問題就變成了
作為旁注,這個問題與同樣著名的 Agnesi 女巫有關,該問題由 Maria Agnesi 研究並於 1748 年出版,以及 Fermat 和 Grandi 在 1703 年研究的更基本的問題。她已將其包含在第一本真正的微積分教科書中。它通過積分和微分方程為學生提供代數教育。