Project

General

Profile

Download (8.67 KB) Statistics
| Branch: | Revision:
1
library(sp)                                                                                                                                                                          
2
library(spgrass6)                                                                                                                                                                    
3
library(rgdal)                                                                                                                                                                       
4
library(reshape)                                                                                                                                                                     
5
library(ncdf4)                                                                                                                                                                       
6
library(geosphere)                                                                                                                                                                   
7
library(rgeos)                                                                                                                                                                       
8
library(multicore)                                                                                                                                                                   
9
library(raster)                                                                                                                                                                      
10
library(lattice)                                                                                                                                                                     
11
library(rgl)                                                                                                                                                                         
12
library(hdf5)                                                                                                                                                                        
13
library(rasterVis)                                                                                                                                                                   
14
library(heR.Misc)
15
library(spBayes)
16

    
17

    
18
X11.options(type="X11")
19

    
20
ncores=20  #number of threads to use
21

    
22

    
23
### copy lulc data to litoria
24
setwd("data/lulc")
25
system("scp atlas:/home/parmentier/data_Oregon_stations/W_Layer* .")
26

    
27

    
28
setwd("/home/adamw/acrobates/projects/interp")       
29

    
30
projs=CRS("+proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=400000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
31
months=format(ISOdate(2004,1:12,1),"%b")
32

    
33
### load station data, subset to stations in region, and transform to sinusoidal
34
load("data/ghcn/roi_ghcn.Rdata")
35
load("data/allstations.Rdata")
36

    
37
d2=d[d$variable=="tmax"&d$date>=as.Date("2000-01-01"),]
38
d2=d2[,-grep("variable",colnames(d2)),]
39
st2=st[st$id%in%d$id,]
40
st2=spTransform(st2,projs)
41
d2[,c("lon","lat")]=coordinates(st2)[match(d2$id,st2$id),]
42
d2$elev=st2$elev[match(d2$id,st2$id)]
43
d2$month=format(d2$date,"%m")
44
#d2$value=d2$value/10 #convert to mm
45

    
46

    
47
## load topographical data
48
topo=brick(as.list(list.files("data/topography",pattern="rst$",full=T)))
49
topo=calc(topo,function(x) ifelse(x<0,NA,x))
50
names(topo)=c("aspect","dem","slope")
51
colnames(topo@data@values)=c("aspect","dem","slope")
52
projection(topo)=projs
53
NS=sin(subset(topo,subset="slope")*pi/180)*cos(subset(topo,subset="aspect")*pi/180);names(NS)="northsouth"
54
EW=sin(subset(topo,subset="slope")*pi/180)*sin(subset(topo,subset="aspect")*pi/180);names(EW)="eastwest"
55
slope=sin(subset(topo,subset="slope")*pi/180);names(slope)="slope"
56
topo2=stack(subset(topo,"dem"),EW,NS,slope)
57

    
58
## create binned elevation for stratified sampling
59
demc=quantile(subset(topo,subset="dem"))
60
demb=calc(subset(topo,subset="dem"),function(x) as.numeric(cut(x,breaks=demc)))
61
names(demb)="demb"
62
                                        #topo=brick(list(topo,demb))
63

    
64

    
65
### load the lulc data as a brick
66
lulc=brick(as.list(list.files("data/lulc",pattern="rst$",full=T)))
67
#projection(lulc)=
68
#plot(lulc)
69

    
70
## Enter lulc types (from Nakaegawa 2011)
71
lulct=as.data.frame(matrix(c(
72
  "Forest",1,
73
  "Shrub",2,
74
  "Grass",3,
75
  "Crop",4,
76
  "Mosaic",5,
77
  "Urban",6,
78
  "Barren",7,
79
  "Snow",8,
80
  "Wetland",9,
81
  "Water",10),byrow=T,ncol=2,dimnames=list(1:10,c("class","id"))),stringsAsFactors=F)
82
colnames(lulc@data@values)=lulct$class[as.numeric(gsub("[a-z]|[A-Z]|[_]|83","",layerNames(lulc)))]
83
layerNames(lulc)=lulct$class[as.numeric(gsub("[a-z]|[A-Z]|[_]|83","",layerNames(lulc)))]
84
lulc=calc(lulc,function(x) ifelse(is.na(x),0,x))
85
projection(lulc)=projs
86

    
87
### load the LST data
88
lst=brick(as.list(list.files("data/lst",pattern="rescaled.rst$",full=T)[c(4:12,1:3)]))
89
lst=lst-273.15
90
colnames(lst@data@values)=format(as.Date(paste("2000-",as.numeric(gsub("[a-z]|[A-Z]|[_]|83","",layerNames(lst))),"-15",sep="")),"%b")
91
layerNames(lst)=format(as.Date(paste("2000-",as.numeric(gsub("[a-z]|[A-Z]|[_]|83","",layerNames(lst))),"-15",sep="")),"%b")
92
projection(lst)=projs
93

    
94

    
95
######################################
96
## compare LULC with station data
97
stlulc=extract(lulc,st2) #overlay stations and LULC values
98
st2$lulc=do.call(c,lapply(apply(stlulc,1,function(x) which.max(x)),function(x) ifelse(is.null(names(x)),NA,names(x))))
99

    
100

    
101
### generate sample of points to speed processing
102
n=10000/length(unique(demb))
103
n2=30  #number of knots
104
s=sampleStratified(demb,size=n,sp=T)
105
#s=spsample(as(topo,"SpatialGrid"),n=n,type="regular")
106
s2=spsample(as(topo,"SpatialGrid"),n=n2,type="regular")
107

    
108
         
109
s=SpatialPointsDataFrame(s,data=cbind.data.frame(extract(topo,s),extract(topo2,s),extract(lulc,s),extract(lst,s)))
110
### drop areas with no LST data
111
#s=s[!is.na(s$Aug),]
112
s=s[apply(s@data,1,function(x) all(!is.na(x))),]
113

    
114
###  add majority rules lulc for exploration
115
s$lulc=apply(s@data[,colnames(s@data)%in%lulct$class],1,function(x) (colnames(s@data)[colnames(s@data)%in%lulct$class])[which.max(x)])
116

    
117

    
118
### spatial regression to fit lulc coefficients
119

    
120
niter=1250
121
mclapply(months,function(m){
122
  print(paste("###################################   Starting month ",m))
123
  f1=formula(paste(m,"~Shrub+Grass+Crop+Mosaic+Urban+Barren+Snow+Wetland+dem+eastwest+northsouth",sep=""))
124
  m1=spLM(f1,data=s@data,coords=coordinates(s),knots=coordinates(s2),
125
    starting=list("phi"=0.6,"sigma.sq"=1, "tau.sq"=1),
126
    sp.tuning=list("phi"=0.01, "sigma.sq"=0.05, "tau.sq"=0.05),
127
    priors=list("phi.Unif"=c(0.3, 3), "sigma.sq.IG"=c(2, 1), "tau.sq.IG"=c(2, 1)),
128
    cov.model="exponential",
129
    n.samples=niter, verbose=TRUE, n.report=100)
130
  assign(paste("mod_",m,sep=""),m1)
131
  save(list=paste("mod_",m,sep=""),file=paste("output/mod_",m,".Rdata",sep=""))
132
})
133

    
134

    
135
m1.s=mcmc(t(m1$p.samples),start=round(niter/4),thin=1)
136
bwplot(value~X2,melt(as.matrix(m1$p.samples)[,!colnames(m1$p.samples)%in%c("(Intercept)","sigma.sq","tau.sq","phi","northsouth","dem","eastwest")]))
137
densityplot(m1$p.samples)
138

    
139
### load oregon boundary for comparison
140
roi=spTransform(as(readOGR("data/regions/Test_sites/Oregon.shp","Oregon"),"SpatialLines"),projs)
141

    
142

    
143
bgyr=colorRampPalette(c("blue","green","yellow","red"))
144
pdf("output/lst_lulc.pdf",width=11,height=8.5)
145

    
146
### Summary plots of covariates
147
## LULC
148
at=seq(0.1,100,length=100)
149
levelplot(lulc,at=at,col.regions=bgyr(length(at)),
150
          main="Land Cover Classes",sub="Sub-pixel %")+
151
  layer(sp.lines(roi, lwd=1.2, col='black'))
152

    
153
## TOPO
154
at=unique(quantile(as.matrix(subset(topo2,c("eastwest","northsouth","slope"))),seq(0,1,length=100),na.rm=T))
155
levelplot(subset(topo2,c("eastwest","northsouth","slope")),at=at,col.regions=bgyr(length(at)),
156
          main="Topographic Variables",sub="")+
157
  layer(sp.lines(roi, lwd=1.2, col='black'))
158

    
159
#LST
160
at=quantile(as.matrix(lst),seq(0,1,length=100),na.rm=T)
161
levelplot(lst,at=at,col.regions=bgyr(length(at)),
162
                      main="MOD11A1 Mean Monthly LST")+
163
  layer(sp.lines(roi, lwd=1.2, col='black'))
164

    
165

    
166
### show fitted values
167
spplot(s,zcol="dem")+layer(sp.lines(roi,lwd=1.2,col="black"))+layer(sp.points(s2,col="blue",pch=13,cex=2))
168

    
169
histogram(~value|variable,data=melt(s@data[,colnames(s@data)%in%lulct$class]))
170

    
171
bwplot(lulc~value|variable,data=melt(s@data,id.vars="lulc",measure.vars=layerNames(lst)),horizontal=T)
172

    
173

    
174
xyplot(value~dem|variable,groups=lulc,melt(s@data[,c("dem","lulc",months)],id.vars=c("dem","lulc")),pch=16,cex=.5,
175
       main="Month-by-month scatterplots of Elevation and LST, grouped by LULC",
176
       sub="One point per (subsetted) pixel, per month"
177
       par.settings = list(superpose.symbol = list(pch=16,cex=.5)),auto.key=list(space="right",title="LULC"))+
178
  layer(panel.abline(lm(y~x),col="red"))+
179
  layer(panel.text(500,50,bquote(beta==.(round(coefficients(lm(y~x))[2],4)))))
180

    
181

    
182

    
183

    
184

    
    (1-1/1)