R

貝葉斯燈塔位置估計

  • January 6, 2017

我正在嘗試在 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 年研究的更基本的問題。她已將其包含在第一本真正的微積分教科書中。它通過積分和微分方程為學生提供代數教育。

引用自:https://stats.stackexchange.com/questions/254907

comments powered by Disqus