티스토리 뷰
반응형
1. SDM 패키지 설치 및 입력데이터와 환경데이터 입력하기
1) SDM 패키지에서 받아들이는 입력파일 형태로 GIS shp파일을 변경한다.
- 다음과 같은 구조가 아니면 오류가 발생한다.
2) SDM 패키지를 R프로그램에서 설치한다.
# sdm 패키지 설치
install.packages('sdm')
# or
# devtools::install_github('babaknaimi/sdm')
# 라이브러리 불러오기
library(sdm)
3) SDM 패키지를 원할하게 실행하기 위해 부수적인 패키지를 InstallAll()함수로 설치한다.
SDM패키지를 설치한 후 처음 한번만 실행한다..
InstallAll()
4) SDM과 생물종 분포모델을 개발하는데 필요한 패키지 불러오기
library(raster)
library(dismo)
library(dplyr)
library(tidyr)
library(mapview)
library(rgeos)
5) 생물종 위치자료 불러오기
# 남색이마잠자리 shp 파일 경로 지정
file <- "./남색이마잠자리_pt.shp"
# shp 파일 불러오기
sp <- shapefile(file)
head(sp)
class(sp)
5) 현재 기후환경 데이터 불러오기
# bioclim data 해상도 10분(해상도 300km) 짜리 다운로드하기
bio <- raster::getData('worldclim', var='bio', res=10)
# bioclim data 이름 확인하기(bio1~bio19)
bio names(bio)
# bio 변수 1번인 평균기온 출력하고 그 위에 남색이마잠자리 위치포인터 올리기
plot(bio[[1]])
points(sp)
# bio변수 자료형태 확인하기
class(bio[[1]])
6) 잠자리 위치가 있는 지역으로 대상지역을 한정하기
# 대상지역 한정하기
# 대상지역 shp파일 경로 지정하기
ext <- "./남색이마잠자리_AOI.shp"
# shape 파일 불러오기
sp_ext <- shapefile(ext)
head(sp_ext)
class(sp_ext)
# 직접 좌표값을 xmin, xmax, ymin, ymax 순으로 입력해서 사각형 영역 설정
#e <- extent(-25,60,-50,50)
#e
# 마우스를 이용해서 사각형 영역 설정방법
# e <- drawExtent()
# GIS shp파일을 이용해서 사각형 영역 설정방법
e <- extent(sp_ext)
e
# 대상지역 안에 있는 입력데이터만 선택하기
spg <- crop(sp, e)
points(sp,col='red')
# 대상지역 안에 있는 기후환경 자료 생성하기
bioc <- crop(bio, e)
# 기후환경자료와 입력데이터 중첩하여 출력하기
plot(bioc[[1]])
points(sp)
# 대상지역으로 한정된 bioclimate 기후자료 19개를 QGIS에서 사용하기 위해 GIS 래스터 asc파일로 저장하기
for (x in 1:19) {
print(names(bioc[[x]]))
writeRaster(bioc[[x]], paste('wc10_asc/','bio_',x,'.asc'), NAflag=-9999, overwrite=TRUE)
}
2. SDM 분포모델 실행하기
3편으로 >>>> 2023.03.03 - [머신러닝 & 딥러닝] - R기반 SDM패키지를 이용하여 생물종 분포모델 - 3편
6) 생물종 분포모델 실행하기
7) 미래 기후환경 데이터 기반 생물종 분포모델 실행하기
8) 현재와 미래의 분포가능성 비교 분석하기
3. SDM 전체 실행 코드
# 남색이마잠자리 분포변화 예측
# Error in .updateGDAL(object, v, cell, band, setminmax) :
# no longer supported
# devtools::install_url('https://cran.r-project.org/src/contrib/Archive/raster/raster_3.5-15.tar.gz')
# devtools::install_url('https://cran.r-project.org/src/contrib/Archive/dismo/dismo_1.3-5.tar.gz')
# sdm 패키지 설치
# install.packages('sdm')
# or
# devtools::install_github('babaknaimi/sdm')
# 라이브러리 불러오기
library(sdm)
#installAll() # only firest time after installing the sdm package
library(dismo)
library(dplyr)
library(tidyr)
library(mapview)
library(raster)
library(rgeos)
# 작업폴더 설정
setwd("c:/R_work")
getwd()
#남색이마잠자리 shp 파일 지정
file <- "./남색이마잠자리_pt.shp"
# shape 파일 불러오기
sp <- shapefile(file)
head(sp)
class(sp)
# bioclim data 해상도 10분(해상도 300km) 짜리 다운로드하기
bio <- raster::getData('worldclim', var='bio', res=10)
bio
names(bio)
# bio 변수 1번인 평균기온 출력하고 그 위에 남색이마잠자리 위치포인터 올리기
plot(bio[[1]])
points(sp)
class(bio[[1]])
# 대상지역 한정하기
ext <- "./남색이마잠자리_AOI.shp" # shape 파일 지정
sp_ext <- shapefile(ext) # shape 파일 불러오기
head(sp_ext)
class(sp_ext)
# 직접 좌표값을 xmin, xmax, ymin, ymax 순으로 입력해서 사각형 영역 설정
# e <- extent(-25,60,-50,50)
# e
e <- extent(sp_ext)
e
# 마우스를 이용해서 사각형 영역 설정
# e <- drawExtent()
spg <- crop(sp, e)
points(sp,col='red')
bioc <- crop(bio, e)
plot(bioc[[1]])
points(sp)
# 기후자료 GIS 래스터 asc파일로 저장하기
for (x in 1:19) {
print(names(bioc[[x]]))
writeRaster(bioc[[x]], paste('wc10_asc/','bio_',x,'.asc'), NAflag=-9999, overwrite=TRUE)
}
#------------
library(usdm)
vif(bioc)
ex <- raster::extract(bioc,spg)
class(ex)
head(ex)
head(spg)
ex_df = as.data.frame(ex)
ex_df
coordinates(ex_df) <- c('lon','lat')
raster::shapefile(ex_df, "ex_val.shp")
v <- vifstep(ex)
#vifcor
v
bioc <- exclude(bioc, v)
#--------------------
library(sdm)
head(sp)
d <- sdmData(sp~., sp, predictors= bioc, bg = list(method='gRandom',n=1000))
d
getmethodNames()
m <- sdm(sp~., d, methods=c('glm','brt','rf','tree','mars','maxent','svm'), replication=c('sub','boot'),
test.p=30,n=3, parallelSetting=list(ncore=4,method='parallel'))
m
roc(m[[c(1,7,13,19,25,31,37)]])
roc(m[[c(4,10,16,22,28,34,40)]])
#m@models$species$rf$`13`@object
gui(m)
p <- predict(m, bioc,filename='pr_Brachydiplax_bioc.img' ,overwrite=TRUE)
p
names(p)
plot(p[[c(1,7,13,19,25,31,37)]])
plot(p[[c(4,10,16,22,28,34,40)]])
p1 <- predict(m, bio,filename='pr_Brachydiplax.img' ,overwrite=TRUE)
p1
names(p1)
plot(p1[[c(1,7,13,19,25,31,37)]])
p2 <- predict(m, bio,filename='pr_Brachydiplax.img' ,mean=T ,overwrite=TRUE)
p2
names(p2)
plot(p2)
#en1 <- ensemble(m, bio, filename='en.img',setting=list(method='weighted',stat='tss',opt=2))
en <- ensemble(m, p, filename='en_Brachydiplax_bioc.img',setting=list(method='weighted',stat='tss',opt=2))
cl <- colorRampPalette(c('#3E49BB','#3498DB','yellow','orange','red','darkred'))
plot(en , col=cl(200))
##################
biof <- raster::getData('CMIP5', var='bio', res=10, rcp=85, model='CN', year=70)
biof
plot(biof[[1]])
names(biof) <- names(bio)
biofc <- crop(biof, e)
for (x in 1:19) {
print(names(biofc[[x]]))
writeRaster(biofc[[x]], paste('future_CMIP5_asc/','bio_',x,'.asc'), NAflag=-9999, overwrite=TRUE)
}
en1 <- ensemble(m, biofc, filename='enf_future.img',setting=list(method='weighted',stat='tss',opt=2))
#--------------
plot(en1, col=cl(200))
cl <- colorRampPalette(c('#3E49BB','#3498DB','yellow','orange','red','darkred'))
#------
plot(en, col=cl(200))
plot(en1, col=cl(200))
proj4string(spg) <- projection(en)
library(mapview)
mapview(en,col.regions=cl(200)) + spg
#-----------
ch <- en1 - en
cl <- colorRampPalette(c('red','orange','yellow','gray','green','blue'))
plot(ch,col=cl(200))
writeRaster(ch, filename = "chagne_results.tif", format="GTiff", overwrite=T)
반응형
'머신러닝 & 딥러닝' 카테고리의 다른 글
R기반 래스터 다중공선성 확인하기 (0) | 2023.03.15 |
---|---|
R기반 SDM패키지를 이용하여 생물종 분포모델 - 3편 (0) | 2023.03.07 |
R기반 SDM 패키지를 이용한 생물종 분포 모델-1편 (0) | 2023.03.04 |
위성사진(Satellite Imagery) 자료 다루기 1편 (0) | 2023.02.24 |
JSON 데이터와 CSV데이터를 랜덤으로 생성하기 (0) | 2023.02.12 |
댓글