ここでは、モデル学習に用いた場所・期間と、予測に用いる場所・期間の利用可能な環境がどの程度似ているかを評価するための手法を紹介する。 利用可能な環境を「実現環境」と呼ぶ。
まずはじめに、北米とユーラシアを例に、実現環境の分布がどのように類似しているかをプロットする。ここでは、それぞれのデータセットから十分な数サンプルした後に、環境の主成分を計算し、主成分空間上で両地域の実現環境を表示する。
library(ecospat)
## Loading required package: ade4
## Loading required package: ape
## Loading required package: gbm
## Loaded gbm 2.1.8
## Loading required package: sp
## Registered S3 methods overwritten by 'adehabitatMA':
## method from
## print.SpatialPixelsDataFrame sp
## print.SpatialPixels sp
Load climate variable for all site of the Eurasian study area (column names should be x,y,X1,X2,…,Xn)
clim1<-read.table("~/hsdm/data/tabular/bioclim/current/clim.vulpesNA_100.txt",h=TRUE)
Load climate variable for all site of the North American study area (column names should be x,y,X1,X2,…,Xn)
clim2<-read.table("~/hsdm/data/tabular/bioclim/current/clim.vulpesEU_100.txt",h=TRUE)
Global climate for both ranges
clim12<-rbind(clim1,clim2)
Loading occurrence sites for the species (column names should be x,y)
occ.sp1<-na.exclude(read.table("~/hsdm/data/tabular/species/vulpes_na.txt",h=TRUE)[c(1,2)])
occ.sp2<-na.exclude(read.table("~/hsdm/data/tabular/species/vulpes_eu.txt",h=TRUE)[c(1,2)])
Create sp occurrence dataset by adding climate variables from the global climate datasets
occ.sp1<-na.exclude(ecospat.sample.envar(dfsp=occ.sp1,colspxy=1:2,colspkept=NULL,dfvar=clim1,colvarxy=1:2,colvar="all",resolution=1))
occ.sp2<-na.exclude(ecospat.sample.envar(dfsp=occ.sp2,colspxy=1:2,colspkept=NULL,dfvar=clim2,colvarxy=1:2,colvar="all",resolution=1))
Selection of variables to include in the analyses
names(clim12)
## [1] "x" "y" "bio_1" "bio_10" "bio_11" "bio_12" "bio_13" "bio_14"
## [9] "bio_15" "bio_16" "bio_17" "bio_18" "bio_19" "bio_2" "bio_3" "bio_4"
## [17] "bio_5" "bio_6" "bio_7" "bio_8" "bio_9"
Xvar<-c(3:21)
nvar<-length(Xvar)
Number of interation for the tests of equivalency and similarity
iterations<-100
Resolution of the gridding of the climate space
R=100
Row weigthing and grouping factors for ade4 functions
row.w.1.occ<-1-(nrow(occ.sp1)/nrow(rbind(occ.sp1,occ.sp2))) # prevalence of occ1
row.w.2.occ<-1-(nrow(occ.sp2)/nrow(rbind(occ.sp1,occ.sp2))) # prevalence of occ2
row.w.occ<-c(rep(0, nrow(clim1)),rep(0, nrow(clim2)),rep(row.w.1.occ, nrow(occ.sp1)),rep(row.w.2.occ, nrow(occ.sp2)))
row.w.1.env<-1-(nrow(clim1)/nrow(clim12)) # prevalence of clim1
row.w.2.env<-1-(nrow(clim2)/nrow(clim12)) # prevalence of clim2
row.w.env<-c(rep(row.w.1.env, nrow(clim1)),rep(row.w.2.env, nrow(clim2)),rep(0, nrow(occ.sp1)),rep(0, nrow(occ.sp2)))
fac<-as.factor(c(rep(1, nrow(clim1)),rep(2, nrow(clim2)),rep(1, nrow(occ.sp1)),rep(2, nrow(occ.sp2))))
Global dataset for the analysis and rows for each sub dataset
data.env.occ<-rbind(clim1,clim2,occ.sp1,occ.sp2)[Xvar]
row.clim1<-1:nrow(clim1)
row.clim2<-(nrow(clim1)+1):(nrow(clim1)+nrow(clim2))
row.clim12<-1:(nrow(clim1)+nrow(clim2))
row.sp1<-(nrow(clim1)+nrow(clim2)+1):(nrow(clim1)+nrow(clim2)+nrow(occ.sp1))
row.sp2<-(nrow(clim1)+nrow(clim2)+nrow(occ.sp1)+1):(nrow(clim1)+nrow(clim2)+nrow(occ.sp1)+nrow(occ.sp2))
Measures niche overlap along the two first axes of a PCA calibrated on all the pixels of the study areas
pca.cal <-dudi.pca(data.env.occ,row.w = row.w.env, center = T, scale = T, scannf = F, nf = 2)
Predict the scores on the axes
scores.clim12<- pca.cal$li[row.clim12,]
scores.clim1<- pca.cal$li[row.clim1,]
scores.clim2<- pca.cal$li[row.clim2,]
scores.sp1<- pca.cal$li[row.sp1,]
scores.sp2<- pca.cal$li[row.sp2,]
Calculation of environmental density
z1<- ecospat.grid.clim.dyn(scores.clim12,scores.clim1,th.sp= 0,scores.sp1,R)
z1$z.uncor<-z1$Z
z2<- ecospat.grid.clim.dyn(scores.clim12,scores.clim2,th.sp= 0,scores.sp2,R)
z2$z.uncor<-z2$Z
Plot realized environment
par(cex=1.5)
ecospat.plot.niche(z1,title="Realized environment in North America",name.axis1="PC1",name.axis2="PC2")
ecospat.plot.niche(z2,title="Realized environment in Eurasia",name.axis1="PC1",name.axis2="PC2")
ecospat.plot.niche.dyn (z1, z2, quant=0.8, title="Realized environment overlap",name.axis1="PC1",name.axis2="PC2", interest = 1, colz1 = "#00FF0050", colz2 = "#FF000050", colinter = "#0000FF50", colZ1 = "green3", colZ2 = "red3")
北米とユーラシアの実現環境。 青色が北米とユーラシアの実現環境の共通部分、赤色はユーラシアにしかない環境。
利用可能な環境がなにか、またどの程度類似しているかを把握することはモデルを新しいデータに投影する際に行うべきである。 これを行わないということは、モデル訓練に用いた場所・期間と予測に用いる場所・期間で環境が同様に利用可能で類似していることを仮定している。
また、モデルを新しい時空間に投影することは、作成したモデルによって実現ニッチ全体が補足されている、という仮定も暗に持っている。 例えば環境が地理的に不均質な場所では、限られた場所のみで学習させたモデルを学習データに含まれていない環境下に適応するべきでない。 階層モデルを用いることで、広域だが低解像度のモデルと局所的だが高解像度のモデルを結合させる試みもある。
生息適地モデルで扱う「ニッチ」とは、潜在的な適地の環境条件だけでなく分散の制約や生物間相互作用を含んでいる。したがって、今実現しているニッチが (生態学的・進化学的な要因で)変わるかどうかを考える必要がある。
例えば、異なる2つの大陸におけるアカギツネの実現ニッチは重ならない部分もあり、これは両方の大陸でアカギツネの基本ニッチの全体が補足されているわけではないことを意味する。
Calculation of occurence density
z1<- ecospat.grid.clim.dyn(scores.clim12,scores.clim1,th.sp= 0,scores.sp1,R)
z2<- ecospat.grid.clim.dyn(scores.clim12,scores.clim2,th.sp= 0,scores.sp2,R)
Plot niche overlap
par(cex=1.5)
ecospat.plot.niche(z1,title="North American niche",name.axis1="PC1",name.axis2="PC2")
ecospat.plot.niche(z2,title="Eurasian niche",name.axis1="PC1",name.axis2="PC2")
ecospat.plot.niche.dyn (z1=z1, z2=z2, quant=0.8, title="Niche overlap",name.axis1="PC1",name.axis2="PC2", interest = 1, colz1 = "#00FF0050", colz2 = "#FF000050", colinter = "#0000FF50", colZ1 = "green3", colZ2 = "red3")
青色が北米とユーラシアの実現ニッチの共通部分、赤色はユーラシアにしかないニッチ。
実現ニッチの変化を特定・予測するためには分散能力や進化による適応の速さ、創始者効果と遺伝的浮動などが役に立つかもしれないが、非常に難しい。
他には実際に実現ニッチをどのように把握・評価するかといった問題もある。これについては多くの研究があり、ニッチの等価性(厳密に等価か)やニッチの類似性(ランダムに比べて似ているか) を評価するための検定手法などが開発されている。