貝葉斯地理統(tǒng)計(jì)模型R-INLA-1

貝葉斯地理統(tǒng)計(jì)模型INLA

本次博客主要講述如何使用R-INLA軟件進(jìn)行空間分析,通過(guò)隨機(jī)嵌套偏微分方程方法和集成的嵌套Laplace漸進(jìn)法可為潛在高斯隨機(jī)場(chǎng)模型中的邊際分布提供準(zhǔn)確而有效的估計(jì)虫几。近年來(lái)已經(jīng)廣泛應(yīng)用于空間流行病學(xué)領(lǐng)域锤灿。

由于筆者水平有限,關(guān)于理論部分辆脸,可前往link但校,針對(duì)數(shù)學(xué)公式及理論部分,這里不贅述啡氢,簡(jiǎn)化數(shù)學(xué)公式状囱,強(qiáng)調(diào)如何應(yīng)用,及在R語(yǔ)言里面如何實(shí)現(xiàn)空执。

安裝INLA包

INLA官網(wǎng)The R-INLA project
如果在R里面下載速度非常慢浪箭,可以去 Index source 下載最新版Windows R-INLA 3.6里面穗椅,直接下載安裝包

# 穩(wěn)定版
 install.packages("INLA", repos=c(getOption("repos"), INLA="https://inla.r-inla-download.org/R/stable"), dep=TRUE)
 
#測(cè)試版
install.packages("INLA", repos=c(getOption("repos"), INLA="https://inla.r-inla-download.org/R/testing"), dep=TRUE)

然后在RStudio里面 Tool->install.packages辨绊,選擇下載的安裝包即可。

簡(jiǎn)述

空間自相關(guān)是地理研究中的涉及到的普遍問(wèn)題匹表。Tobler的第一地理定律:
“所有事物都與其他事物有關(guān)门坷,但附近的事物比遠(yuǎn)處的事物更相關(guān)∨鄱疲”
對(duì)于空間和時(shí)間上的對(duì)象都是如此默蚌,通常時(shí)間與空間是交互作用的。
我們知道苇羡,在流行病中绸吸,空間分析主要是對(duì)疾病數(shù)據(jù)進(jìn)行空間上與時(shí)間上描述,找出相關(guān)性设江,繪制疾病風(fēng)險(xiǎn)地圖锦茁,但是實(shí)際上空間分析非常復(fù)雜,計(jì)算量大且不容易直觀體現(xiàn)叉存。再疊加時(shí)間元素會(huì)讓讓人望而卻步码俩。R-INLA出現(xiàn)給解決此類問(wèn)題提供了便捷的工具,INLA代表集成嵌套拉普拉斯逼近歼捏,我們將進(jìn)一步了解其含義稿存!

INLA使用確定性貝葉斯方法集成嵌套拉普拉斯近似法笨篷。
貝葉斯(Bayesian)=使用貝葉斯定理,與概率論相反瓣履。
是基于推斷給定確定參數(shù)的數(shù)據(jù)集的概率(涉及設(shè)置先驗(yàn)B食帷)。如想了解有關(guān)更多詳細(xì)信息袖迎,您可以貝葉斯統(tǒng)計(jì)入門教程Bayesian Statistics安聘。

1. 案例數(shù)據(jù)

我們使用gstat包里面自帶的降雨數(shù)據(jù),里面包含了467個(gè)測(cè)量站點(diǎn)信息瓢棒,每個(gè)站點(diǎn)都會(huì)監(jiān)測(cè)該點(diǎn)的降雨量浴韭,然后包含了該地區(qū)的海拔高度的圖層,我們根據(jù)各個(gè)站點(diǎn)提取對(duì)應(yīng)位置的海拔高度脯宿,然后將數(shù)據(jù)分成test與train念颈,test100個(gè)點(diǎn)作為模型構(gòu)建,然后剩余的367個(gè)點(diǎn)作為validation驗(yàn)證连霉。

估計(jì)該區(qū)域的降雨量榴芳。

library(INLA)
library(gstat)
library(sf)
library(raster)
data(sic97)

## Data preparation
df_rain = st_as_sf(sic_full)
df_train = st_as_sf(sic_obs)

rast_elev <- raster(demstd)
sic_full@data$altitude=extract(rast_elev,sic_full)

# plot
ggplot()+
  geom_sf(data=df_rain,size=0.2,fill=NA)+
  geom_sf(data=df_train,size=0.8,fill=NA,color="red")

image.png

如何判斷空間獨(dú)立性是在進(jìn)行空間分析前的首要步驟《搴常可以利用變異函數(shù)(variogram )圖來(lái)評(píng)估殘差中的空間(或時(shí)間)是否相互性窟感。判斷空間獨(dú)立性有一下兩點(diǎn)。

  • 1.對(duì)于隨機(jī)數(shù)據(jù)歉井,幾乎沒(méi)有自動(dòng)相關(guān)性柿祈,因此distance非常小,我們可以快速到達(dá)頂端哩至。
  • 2.對(duì)于梯度數(shù)據(jù)(空間上臨近位置數(shù)據(jù)相互關(guān)聯(lián))躏嚎,我們的distance很長(zhǎng),而且實(shí)際上緩慢到達(dá)頂端菩貌。

這里主要介紹如何判斷空間位置的點(diǎn)是否存相互獨(dú)立卢佣,更多關(guān)于Variogram,請(qǐng)參考此處Variograms & Kriging

# set the train and test
df_rain = st_as_sf(sic_full) 
xlat=as.data.frame(st_coordinates(df_rain)/1000)

df_rain=data.frame(ID=df_rain$ID,
              rainfall=df_rain$rainfall,
              altitude=df_rain$altitude,
              lat=xlat$X,lon=xlat$Y)

id=sic_obs@data$ID

test=df_rain %>% dplyr::filter(ID %in% id )
train=df_rain %>% dplyr::filter(!ID %in% id )

# test the spatial dependency
sp_df=df_rain
coordinates(sp_df) = ~lat+lon
plot(variogram(rainfall~1,sp_df))
image.png

由上圖可以知道箭阶,我們的降雨量信息在該區(qū)域是存在空間相關(guān)性的虚茶,那么下一步我們采用Matern函數(shù)來(lái)定義點(diǎn)與點(diǎn)之間的相關(guān)性(空間位置鄰近的點(diǎn)相互影響比較遠(yuǎn)點(diǎn)點(diǎn)大)。這里關(guān)于Matern correlation 不做過(guò)多介紹仇参,主要的目的是可以計(jì)算空間效應(yīng)嘹叫。在一般回歸方程中,我們可以加入自變量因變量冈敛,現(xiàn)在Matern函數(shù)定義好了空間效應(yīng)待笑,那么回歸方程:

下面我們將介紹如何計(jì)算100個(gè)降雨點(diǎn)之間的空間效應(yīng),并納入Regression model

2. INLA模型

INLA模型中抓谴,空間效應(yīng)的計(jì)算是重點(diǎn)暮蹂,這里利用每個(gè)測(cè)量點(diǎn)的經(jīng)緯度信息

2.1 Mesh格點(diǎn)

主要經(jīng)緯度轉(zhuǎn)換時(shí)候寞缝,需要變成Matrix。為什么要產(chǎn)生Mesh格點(diǎn)仰泻,NLA在計(jì)算上很有效荆陆,因?yàn)樗褂肧PDE(隨機(jī)偏微分方程)來(lái)估計(jì)數(shù)據(jù)的空間自相關(guān)。
這涉及使用離散的采樣位置的“Mesh網(wǎng)格”集侯,將其插值以估計(jì)空間中的連續(xù)過(guò)程(請(qǐng)參見(jiàn)非常有用的圖)被啼。
主要是利用inla.mesh.2d() 產(chǎn)生Constrained Refined Delaunay Triangulation (CRDT)三角形的網(wǎng)格單元,根據(jù)坐標(biāo)位置產(chǎn)生內(nèi)部三角形研究區(qū)域與外部緩沖區(qū)棠枉。使得所有的采樣點(diǎn)都能落在三角形區(qū)域內(nèi)浓体,然后計(jì)算每個(gè)三角形是否包含采樣點(diǎn)位置信息。(詳情請(qǐng)見(jiàn))
inla.mesh.2d() 常用參數(shù):

  • loc 用作初始三角剖分節(jié)點(diǎn)的坐標(biāo)矩陣
  • loc.domain 定義空間域的多邊形的坐標(biāo)
  • max.edge 內(nèi)部(和外部)區(qū)域的最大允許三角形邊緣長(zhǎng)度辈讶。 值應(yīng)在與坐標(biāo)大小相關(guān)的比例尺上命浴。 值越低,三角形越多贱除。
  • offset 擴(kuò)大點(diǎn)與內(nèi)部(和外部)區(qū)域的邊緣之間的距離的量生闲。 將正值視為絕對(duì)距離,將負(fù)數(shù)視為乘數(shù)月幌。
  • cutoff 點(diǎn)之間允許的最小距離碍讯。 這允許將非常靠近的點(diǎn)放置在同一三角形中扯躺。 特別需要注意的是捉兴,我們不希望三角形的角度非常銳化,因?yàn)槿切卧谕队皶r(shí)效果會(huì)較差缅帘。
test_loc = cbind(test$lat, test$lon) #Matrix
train_loc = cbind(train$lat, train$lon)

## 1. MESH
Mesh=inla.mesh.2d(loc.domain = test_loc,
                  max.edge = c(20,100),
                  cutoff = 1)
plot(Mesh)
points(test_loc,col = "red", pch = 1)

summary(Mesh)

100個(gè)test點(diǎn)全部包含在488個(gè)Mesh網(wǎng)格點(diǎn)中轴术,Vertices:488


image.png

2.2 SPDE model

SPDE模型定義在488(m)個(gè)尺寸的網(wǎng)格上难衰,而我們的y(n)有100個(gè)點(diǎn)钦无。
我們需要一種將m個(gè)網(wǎng)格頂點(diǎn)鏈接到n個(gè)響應(yīng)的方法。
這是通過(guò)投影儀矩陣(A)實(shí)現(xiàn)的盖袭。
該投影儀矩陣是使用inla.spde.make.A()函數(shù)構(gòu)建的失暂。鏈接好好,我們計(jì)算Matern相關(guān)函數(shù)鳄虱,在網(wǎng)格上構(gòu)建SPDE模型弟塞。 alpha = 2是默認(rèn)值。

# Making the A matrix
A.test=inla.spde.make.A(Mesh,loc=test_loc)
dim(A.test)

## SPDE
spde=inla.spde2.matern(mesh=Mesh,alpha = 2)
spde$n.spde

## index of spatial field
s.index=inla.spde.make.index(name="w",
                             n.spde = spde$n.spde)

str(s.index)

SPDE模型非常復(fù)雜拙已。因此决记,為了幫助跟蹤哪些元素與哪些效果相關(guān),我們可以創(chuàng)建一個(gè)索引Index倍踪。注意這里的name是w系宫,可以寫成spatial feild索昂,意思是每個(gè)點(diǎn)對(duì)應(yīng)的空間效應(yīng)。在這種情況下扩借,我們的空間數(shù)據(jù)全部在一組中椒惨。

2.4 Stack data

在2.1中,我們告知R-INLA我們?cè)诰W(wǎng)格的哪些頂點(diǎn)具有采樣位置潮罪,這給了我們投影儀矩陣A.test康谆。 在第2.2節(jié)中,我們定義了SPDE模型嫉到。 我們需要告知R-INLA沃暗,在哪些采樣位置我們有y(response)的數(shù)據(jù)以及在哪里有x(協(xié)變量)數(shù)據(jù)。 由于協(xié)變量可能在與響應(yīng)變量存在于不同位置何恶,因此這一步我們需要整和協(xié)變量描睦。使用函數(shù)inla.stack

## stack
Xm <- model.matrix(~ -1 + altitude, data = test)

X=data.frame(altitude=Xm[,1])

N=nrow(test)
N
## 5.1 test stack
stack.test=inla.stack(tag="test",
  data=list(y=test$rainfall),
  A = list(1,1,A.test),
  effects= list(
    Intercept = rep(1, N),
    X = X,
    w = s.index))
dim(inla.stack.A(stack.test))

stack.test中包括:

  • data 響應(yīng)變量(y)
  • A 乘數(shù)向量。 通常是一系列1(用于截距导而,隨機(jī)效果和固定效果)忱叭,及指定的空間A矩陣。
  • effect 效果今艺。 需要分別指定截距韵丑,隨機(jī)效果,模型矩陣和SPDE虚缎。 A與effect是相互聯(lián)系的撵彻。 要添加效果,必須在乘數(shù)向量上再加上1(在正確的位置)实牡。

2.5 Fit model

## 7. fit model
formula = y ~ -1+Intercept+altitude+f(w, model = spde)

fit=inla(formula = formula,
         data = inla.stack.data(stack.test,spde=spde),
         family = "gaussian",
         control.compute = list(dic = TRUE,waic = TRUE),
         control.predictor = list(A = inla.stack.A(stack.test),compute=TRUE)
)

summary(fit)

這里100個(gè)test數(shù)據(jù)顯示海拔的系數(shù)為0.005(-0.03-0.04)沒(méi)有統(tǒng)計(jì)學(xué)意義陌僵。
說(shuō)明海拔對(duì)該地區(qū)的降雨沒(méi)有多大影響。

Fixed effects:
mean sd 0.025quant 0.5quant 0.975quant mode kld
Intercept 0.000 31.623 -62.086 -0.001 62.034 0.000 0
altitude 0.005 0.018 -0.030 0.005 0.040 0.005 0

模型參數(shù)估計(jì)

邊際效應(yīng)创坞;詳情見(jiàn) INLA 參數(shù)介紹

模型估計(jì)

ggField(fit, Mesh, Groups = 1) +
  scale_fill_brewer(palette = "Blues") 

plot(SpFi.w$marginals.range.nominal[[1]], type = "l",
     xlab = "range nominal", ylab = "Density") 
image.png

image.png

模型驗(yàn)證

未完待續(xù)碗短。。题涨。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末偎谁,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子纲堵,更是在濱河造成了極大的恐慌巡雨,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件席函,死亡現(xiàn)場(chǎng)離奇詭異铐望,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門正蛙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)炕舵,“玉大人,你說(shuō)我怎么就攤上這事跟畅⊙式睿” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵徊件,是天一觀的道長(zhǎng)奸攻。 經(jīng)常有香客問(wèn)我,道長(zhǎng)虱痕,這世上最難降的妖魔是什么睹耐? 我笑而不...
    開(kāi)封第一講書人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮部翘,結(jié)果婚禮上硝训,老公的妹妹穿的比我還像新娘。我一直安慰自己新思,他們只是感情好窖梁,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著夹囚,像睡著了一般纵刘。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上荸哟,一...
    開(kāi)封第一講書人閱讀 48,970評(píng)論 1 284
  • 那天假哎,我揣著相機(jī)與錄音,去河邊找鬼鞍历。 笑死舵抹,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的劣砍。 我是一名探鬼主播惧蛹,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼秆剪!你這毒婦竟也來(lái)了赊淑?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤仅讽,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后钾挟,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體洁灵,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了徽千。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片苫费。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖双抽,靈堂內(nèi)的尸體忽然破棺而出百框,到底是詐尸還是另有隱情,我是刑警寧澤牍汹,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布铐维,位于F島的核電站,受9級(jí)特大地震影響慎菲,放射性物質(zhì)發(fā)生泄漏嫁蛇。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一露该、第九天 我趴在偏房一處隱蔽的房頂上張望睬棚。 院中可真熱鬧,春花似錦解幼、人聲如沸抑党。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)新荤。三九已至,卻和暖如春台汇,著一層夾襖步出監(jiān)牢的瞬間苛骨,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來(lái)泰國(guó)打工苟呐, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留痒芝,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓牵素,卻偏偏與公主長(zhǎng)得像严衬,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子笆呆,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345