Skip to content

Instantly share code, notes, and snippets.

@rodrigosantana
Created December 11, 2012 22:02
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 3 You must be signed in to fork a gist
  • Save rodrigosantana/4262669 to your computer and use it in GitHub Desktop.
Save rodrigosantana/4262669 to your computer and use it in GitHub Desktop.
Nome: Análise de dependência espacial Base de dados: s100 (Disponível no pacote geoR) Autor do script: Hélio Gallo Rocha Observações: Criei este GIst para otimizarmos os cometários e estudos propostos. Assim não é necessário ficar enviando anexos para a lista da R-BR, somente os comentários e link para o gist.
setwd("k:/2012/geoestatistica/s100")
## Script bastante "automatizado", sem nececissade de incerir dados como: sill
##verificação de dependencia espacial
library(geoR)
library(tcltk)# para carregar o eyefit, algumas máquinas ele não carrega.
library(scatterplot3d)
## gráficos: primeiro para ver a distribuição(o primeiro gráfico:
## Carregando a base de dados s100
data(s100)
## Atribuindo o objeto geodata s100 à um novo objeto chamado dados
## esta atribuição se deu unica e exclusivamente para não trocar
## o nome do objeto de trabalho ao longo de todo script proposto
## pelo Sr. Hélio originalmente.
dados <- s100
dados##Verificando o objetos criados
n=summary(dados)[[1]] # evita digitar n. de pontos, qaundo necessário
n
##Detecção de dados atípicos
#summary(dados$data)
#var(dados$data)
#cv=((sqrt(var(dados$data)))/(mean(dados$data)))*100
#cv
#hist(dados$data,xlab="Classe de Valores",ylab="Frequência",main="Histograma")
#boxplot(dados$data)
#plot(dados)
#plot(dados, scatter=TRUE, lowes=TRUE) # Gráficos: (dados no espaço), (dados vs coordX), (dados vs coordY), (Z vs Y vs X)
##DETECÇÃO DE TENDÊNCIAS - como não sabemos a unidade de X1 e X2, convencionei ser metro
## Os dados s100 estão contidos numa área de 1 m x 1 m , acho que nem seria necessário criar uma borda
## mas em casos onde o desenho da área é irregular, teremos de criar uma borda
## para limitar a área da krigagem
limite=read.table("recorte.txt",header=T)
plot(limite,type="l")
points(dados$coords)
points(dados,pt.div="quartile",bor=limite,xlab="Longitude", ylab="Latitude") # classifica os pontos em quartile
##Distâncias , normalmente se utiliza 60% da distância máxima
## fiz o calculo para três distâncias, 60%, 80% e 100%, pois cada caso é uma caso
uvec=12 ## pode mudar esse parâmetro
#uvec=seq(0,100,8) ## exemplo de uso do uvec,
##determina pontos de 0 a 100m, com dist.fixa de 8m
pairs.min=30 ## pode mudar esse parâmetro
par=pairs.min
## Plotar quatro gráficas para escolha visual de:
## 1. melhor distância máxima
## 2. Verificar existência de dependencia espacial
par(mfrow=c(1,4))
## hmax com 60 % da dist. máxima
hmax06 = summary(dados)[[3]][[2]]*0.6
##Calculo do semivariograma
vario06= variog(dados,uvec=uvec ,pairs.min=par,max.dist=hmax06, estimator="classical")
#Detecção de dependencia espacial com envelopamento
vario.ent06 <- variog.mc.env(dados, obj.var = vario06)
##Plotando
plot(vario06, envelope = vario.ent06, xl="60% da distância máxima")
## hmax com 80 % da dist. máxima
hmax08 = summary(dados)[[3]][[2]]*0.8
vario08= variog(dados,uvec=uvec,pairs.min=par,max.dist=hmax08, estimator="classical")
vario.ent08 <- variog.mc.env(dados, obj.var = vario08)
plot(vario08, envelope = vario.ent08, xl="80% da distância máxima")
## hmax com 100 % da dist. máxima
hmax01 = summary(dados)[[3]][[2]]
vario01= variog(dados,uvec=uvec,pairs.min=par,max.dist=hmax01, estimator="classical")
vario.ent01 <- variog.mc.env(dados, obj.var = vario01)
plot(vario01, envelope = vario.ent01, xl="100% da distância máxima")
## escolha da distância para o preparo do semivariograma
hmax=hmax08 ## é esta a distância usada em todo o script
vario= variog(dados,uvec=uvec,pairs.min=par,max.dist=hmax, estimator="classical")
vario.ent <- variog.mc.env(dados, obj.var = vario)
plot(vario, envelope = vario.ent, xl="distância escolhida")
##Significado do variog
##$u = são as distâncias que serão plotadas no eixo no semivariograma.
##$v = é a semivariância para cada distância.
##$n = número de pares de pontos em cada distância.
##$uvec => número de pontos
##sd = desvio padrão naquela distância
##var = variância dos dados
##$n.data = numero de pares trabalhados
##Tabela Resumo das Variancias
#Var06=c(vario06$v)
#Var08=c(vario08$v)
#Var01=c(vario01$v)
#Var=c(vario$v)
#dist06=c(vario06$u)
#dist08=c(vario08$u)
#dist01=c(vario01$u)
#disth=c(vario$u)
#n06=c(vario06$n)
#n08=c(vario08$n)
#n01=c(vario01$n)
#n0=c(vario$n)
#data.frame(n06,dist06,Var06,n08,dist08,Var08,n01,dist01,Var01,n0,disth,Var)
#tabela_resumo=edit(data.frame(n06,dist06,Var06,n08,dist08,Var08,n01,dist01,Var01,n0,disth,Var))
## AJUSTE "À SENTIMENTO"
## Temos de achar um modelo teórico que melhor se adeque ao semivariograma experimental
## obteremos os valores de C0: efeito pepita; alcance: distancia até onde há dep. espacial e
## C1: contribuição
plot(vario, envelope = vario.ent, xl="distância escolhida")
va1=eyefit(vario)
## os valores escolhidos no eyefit que iremos rodar nestas três linhas abaixo,
## serão utilizados nas validações, para escolha do melhor modelo teórico
## achei o modelo gaussiano o mais adequado
sillp=va1[[1]]$cov.pars[1] ##C1
alcance=va1[[1]]$cov.pars[2] ##phi
pepita=va1[[1]]$nugget ##C0
va1 ##valores escolhidos , normalmente nem precisa de rodar essas linhas,
##é só para verificar se estão certo
sillp
alcance
pepita
##Validação cruzada do modelo "à sentimento"
xv.va1=xvalid(dados,model=va1)##modelo va1
## Pode rodar direto, sem se preocupar, ao final será gerado um relatório
## Este relatório tem a finalidade de ajudar na escolha do melhor modelo
## alguns dados podem ser retirados do relatório
mstdva1=sum(xv.va1$std.error)/n##erro médio reduzido
sqrtva1=sqrt((sum(xv.va1$std.error^2))/n)##Desvio Padrão dos erros reduzidos
GDEva1= (sillp/(sillp+pepita))*100
corva1=cor(xv.va1$data,xv.va1$predicted)
reglin_va1=lm(xv.va1$data~xv.va1$predicted)
##data.frame(xv.va1$data,xv.va1$predicted, xv.va1$error, xv.va1$std.error, xv.va1$krige.var)
##edit(data.frame(xv.va1$data,xv.va1$predicted, xv.va1$error, xv.va1$std.error, xv.va1$krige.var))
##plot(reglin_va1)
summary(reglin_va1)
r2_va1=summary(reglin_va1)[[8]]
r2_va1
merrova1=mean(xv.va1$error)##média do erro de VA1 para compor a tebela
reglin_va1 ## valores da equação de regressão
summary(reglin_va1)
plot(xv.va1$data,xv.va1$predicted)
abline(reglin_va1)
summary(reglin_va1)[[8]] ## s.squared
anova(reglin_va1)
##MÉTODO DA VEROSSIMILHANÇA >>>> ML
ml=likfit(dados,ini=c(sillp,alcance),nugget=pepita)##C(SIGMASQ,PHI)##MÉTODO DA VEROSSIMILHANÇA>ML???
#ml
tausqml=ml$tausq ##C0 pepipa
sigmasqml= ml$sigmasq ##C1 patamar
phiml=ml$phi ## alcance
plot(vario,xlab="Distancia (h)",ylab="Semivariancia")
lines(ml,col="red")
xv.ml<-xvalid(dados,model=ml)
##xv.ml
mstdml=sum(xv.ml$std.error)/n ## média quanto mais próximo de 0 melhor
sqrtml=sqrt((sum(xv.ml$std.error^2))/n) ## desvio padrão quanto mais próximo de 1
GDEml = (sigmasqml/(sigmasqml+tausqml))*100
corml=cor(xv.ml$data,xv.ml$predicted)
reglin_ml=lm(xv.ml$data~xv.ml$predicted)
r2_ml=summary(reglin_ml)[[8]]
r2_ml
merroml=mean(xv.ml$error)
reglin_ml
anova(reglin_ml)
plot(xv.ml$data,xv.ml$predicted,xlab="Dados",ylab="Prediicted_ML", main="Gráfico de Validação Cruzada Verossimilhança \n Dados X Predição",cex.main=1.3)
abline(reglin_ml)
summary(reglin_ml)[[8]] ##r2
##QUADRADOS MINIMOS ORDINAL >>>>0LS
##modelo de validação cruzada
ols=variofit(vario,ini=c(sillp,alcance),nugget=pepita,wei="equal")
plot(vario,xlab="Distancia (h)",ylab="Semivariancia")
lines(ols,col="red")
xv.ols=xvalid(dados,model=ols)
##xv.ols
#ols
tauols=ols[[1]] ##C0
sigmaols =ols[[2]][1] ##C1
phiols=ols[[2]][2] ##alcance
mstdols=sum(xv.ols$std.error)/n
sqrtols=sqrt((sum(xv.ols$std.error^2))/n)
GDEols = (sigmaols/(sigmaols+tauols))*100
reglin_ols=lm(xv.ols$data~xv.ols$predicted)
r2_ols=summary(reglin_ols)[[8]]
r2_ols
merrools=mean(xv.ols$error)
reglin_ols
anova(reglin_ols)
plot(xv.ols$data,xv.ols$predicted)
abline(reglin_ols)
corols=cor(xv.ols$data,xv.ols$predicted)
summary(reglin_ols)[[8]] ##r2
##QUADRADOS MINIMOS PONDERADO >>> WLS????
wls=variofit(vario,ini=c(sillp,alcance),nugget=pepita)
plot(vario,xlab="Distancia (h)",ylab="Semivariancia", main="Quadrados Minímos Ponderados")
lines(wls,col="red")
xv.wls=xvalid(dados,model=wls)
#xv.wls
#wls
tauwls=wls[[1]] ##C0
sigmawls =wls[[2]][1] ##C1
phiwls=wls[[2]][2] ##alcance
mstdwls=sum(xv.wls$std.error)/n
sqrtwls=sqrt((sum(xv.wls$std.error^2))/n)
GDEwls = (sigmawls/(sigmawls+tauwls))*100
corwls=cor(xv.wls$data,xv.wls$predicted)
reglin_wls=lm(xv.wls$data~xv.wls$predicted)
r2_wls=summary(reglin_wls)[[8]]
r2_wls
merrowls=mean(xv.wls$error)
reglin_wls
anova(reglin_wls)
plot(xv.wls$data,xv.wls$predicted)
abline(reglin_wls)
summary(reglin_wls)#[[8]] ##r2
##MODELO GAUSSIANO
wlsg=variofit(vario,ini=c(sillp,alcance),nugget=pepita,cov.model="gaus")##C(SIGMASQ,PHI)
plot(vario,xlab="Distancia (h)",ylab="Semivariancia", main="Modelo Gaussiano")
lines(wlsg,col="maroon")
xv.wlsg=xvalid(dados,model=wlsg)
##xv.wlsg
#wlsg
tauwlsg=wlsg[[1]] ##C0
sigmawlsg =wlsg[[2]][1] ##C1
phiwlsg=wlsg[[2]][2] ##alcance
mstdwlsg=sum(xv.wlsg$std.error)/n
sqrtwlsg=sqrt((sum(xv.wlsg$std.error^2))/n)
GDEwlsg = (sigmawlsg/(sigmawlsg+tauwlsg))*100
corwlsg=cor(xv.wlsg$data,xv.wlsg$predicted)
corwlsg
reglin_wlsg=lm(xv.wlsg$data~xv.wlsg$predicted)
reglin_glm_wlsg=glm(xv.wlsg$data~xv.wlsg$predicted)
reglin_glm_wlsg
reglin_wlsg
r2_wlsg=summary(reglin_wlsg)[[8]] ##fator de deteminação da validação curuzada entre data X predicted
r2_wlsg *100
merrowlsg=mean(xv.wlsg$error)
reglin_wlsg
anova(reglin_wlsg)
plot(xv.wlsg$data,xv.wlsg$predicted)
abline(reglin_wlsg)
summary(reglin_wls)[[8]] ##r2
##Cálculo do Erro Absoluto --- Somatória???
ea_va1=sum((xv.va1$predicted)-(xv.va1$data))
ea_ml=sum((xv.ml$predicted)-(xv.ml$data))
ea_ols=sum((xv.ols$predicted)-(xv.ols$data))
ea_wls=sum((xv.wls$predicted)-(xv.wls$data))
ea_wlsg=sum((xv.wlsg$predicted)-(xv.wlsg$data))
##significado da validação cruzada xvalid
#?xvalid
#$data - os dados originais.
#$predicted - os valores previstos pela validação cruzada.
#$krige.var - a variação de previsão de validação cruzada.
#$error - as diferenças de dados - valor previsto ($data-$predicted) .
#$std.error os erros dividida pela raiz quadrada das variâncias de predição.
#$prob - a probabilidade cumulativa no valor original com uma distribuição normal com parâmetros dados com os resultados de validação cruzada.
#?variog
##Significado do variog vario
##$u = são as distâncias que serão plotadas no eixo no semivariograma.
##$v = é a semivariância para cada distância.
##$n = número de pares de pontos em cada distância.
##$uvec => número de pontos
##sd = desvio padrão naquela distância
##var = variância dos dados
##$n.data = numero de pares trabalhados.
##PLOTANDO TODOS OS MODELOS
plot(vario,xlab="Distancia (h)",ylab="Semivariancia")
lines(va1,col="red")
lines(ml,col="green")
lines(ols,col="maroon")
lines(wls, col="black")
lines(wlsg,col="cyan")
summary(dados)
###KRIGAGEM
## serão calculadas cinco krigagens correspondendo aos cinco modelos de ajuste
loci=expand.grid(seq(-0.0391304,1.0391304,l=400),seq(-0.0391304,1.0391304,l=400))
limite=read.table("recorte.txt",header=T)
kc=krige.conv(dados,loc=loci,border=limite,krige=krige.control(obj=va1))
kc2=krige.conv(dados,loc=loci,border=limite,krige=krige.control(obj=ml))
kc3=krige.conv(dados,loc=loci,border=limite,krige=krige.control(obj=ols))
kc4=krige.conv(dados,loc=loci,border=limite,krige=krige.control(obj=wls))
kc5=krige.conv(dados,loc=loci,border=limite,krige=krige.control(obj=wlsg))
l=4#escolha do n. de classificações do mapa, pode mudar
##Todas as Krigagens, não consegui ajustar exatamente os pontos com a krigagem, ficou um pouco deslocado.
par(mfrow=c(2,3))
points(dados,pt.div="quartile",bor=limite, xlab="Longitude", ylab="Latitude")
image(kc,loc=loci,border=limite,val=kc$predict,col="gray"(seq(1,0.1,l=l)),xlab=" ",ylab=" ", main="Krigagem à sentimento")
#legend.krige(c(0.2,0.8),c(1,1.1),cex.leg=0.7,val=kc2$predict,col=gray(seq(1,0.1,l=l)),off=0.8)
par(new=TRUE)
points(dados,pt.div="quartile",bor=limite, xlab="Longitude", ylab="Latitude")
#points(dados$coords)
image(kc2,loc=loci,border=limite,val=kc2$predict,col="gray"(seq(1,0.1,l=l)),xlab=" ",ylab=" ", main="Krigagem com Modelo Verosimilhança - ML")
#legend.krige(c(0.2,0.8),c(-0.2,-0.1),cex.leg=0.7,val=kc2$predict,col=gray(seq(1,0.1,l=l)),off=0.8)
par(new=TRUE)
points(dados,pt.div="quartile",bor=limite)#,xlab="Longitude", ylab="Latitude")
#points(dados$coords)
image(kc3,loc=loci,border=limite,val=kc3$predict,col="gray"(seq(1,0.1,l=l)),xlab=" ",ylab=" ", main="Krigagem com Modelo Mínimo Ordinal- OLS")
#legend.krige(c(0.2,0.8),c(-0.2,-0.1),cex.leg=0.7,val=kc3$predict,col=gray(seq(1,0.1,l=l)),off=0.8)
par(new=TRUE)
points(dados,pt.div="quartile",bor=limite,xlab="Longitude", ylab="Latitude")
#points(dados$coords)
image(kc4,loc=loci,border=limite,val=kc4$predict,col="gray"(seq(1,0.1,l=l)),xlab=" ",ylab=" ", main="Krigagem com Modelo Mínimo Ponderado- WLS")
#legend.krige(c(0.2,0.8),c(-0.2,-0.1),cex.leg=0.7,val=kc4$predict,col=gray(seq(1,0.1,l=l)),off=0.8)
par(new=TRUE)
points(dados,pt.div="quartile",bor=limite,xlab="Longitude", ylab="Latitude")
#points(dados$coords)
image(kc5,loc=loci,border=limite,val=kc5$predict,col="gray"(seq(1,0.1,l=l)),xlab=" ",ylab=" ", main="Krigagem com Modelo Gaussiano- WLSG")
#legend.krige(c(0.2,0.8),c(-0.2,-0.1),cex.leg=0.7,val=kc4$predict,col=gray(seq(1,0.1,l=l)),off=0.8,)
par(new=TRUE)
points(dados,pt.div="quartile",bor=limite,xlab="Longitude", ylab="Latitude")
## perceberam que tentei colocar no mesmo mapa o mapa da krigagem e os pontos classificados em quartile
## ficou meio deslocado, quem puder ajudar a ajustar...
## tenho um método, que é bastante chato, quem souber com autoajustar, passe...
## se ninguém conseguir, eu passo como faço, ai está o começo
## 1. plotar primeiro os pontos classificados em quartile
#points(dados,pt.div="quartile",bor=limite)
#2. Meço no monitor a distãncia da borda do ponto (0,0), no meu deu 0,5 cm e
## de (0, 0,2) deram 2,25 cm , faço uma regra de três..........
###### Montagem da tabela comparativa de resultados
##Nome dos Modelos
Asentimento=c("Asentimento")
Verossimilhança=c("Verossimilhança-ML")
OLS=c("Minimo Ordinal-OLS")
WLS=c("Minimo Ponderado-WLS")
WLSG=c("Gaussiano")
Minimo=c("Minimo")
Máximo=c("Máximo")
MODELO=c(Asentimento,Verossimilhança,OLS,WLS,WLSG,Minimo,Máximo)
c0=c(pepita,tausqml,tauols,tauwls,tauwlsg)
c0=c(pepita,tausqml,tauols,tauwls,tauwlsg,summary(c0)[[1]],summary(c0)[[6]])
c1=c(sillp,sigmasqml,sigmaols,sigmawls,sigmawlsg)
c1=c(sillp,sigmasqml,sigmaols,sigmawls,sigmawlsg,summary(c1)[[1]],summary(c1)[[6]])
Patamar=c(c0+c1)
Alcance=c(alcance,phiml,phiols,phiwls,phiwlsg)
Alcance=c(alcance,phiml,phiols,phiwls,phiwlsg,summary(Alcance)[[1]],summary(Alcance)[[6]])
ER=c(mstdva1,mstdml,mstdols,mstdwls,mstdwlsg) ##erro médio reduzido
ER=c(mstdva1,mstdml,mstdols,mstdwls,mstdwlsg,summary(ER)[[1]],summary(ER)[[6]])##erro médio reduzido
mean_error=c(merrova1,merroml,merrools,merrowls,merrowlsg)#Média do Erro
mean_error=c(merrova1,merroml,merrools,merrowls,merrowlsg,summary(mean_error)[[1]],summary(mean_error)[[6]])#Média do Erro
Ser=c(sqrtva1,sqrtml,sqrtols,sqrtwls,sqrtwlsg)##Desvio Padrão dos erros reduzidos
Ser=c(sqrtva1,sqrtml,sqrtols,sqrtwls,sqrtwlsg,summary(Ser)[[1]],summary(Ser)[[6]])##Desvio Padrão dos erros reduzidos
SerM=c(2-sqrtva1,2-sqrtml,2-sqrtols,2-sqrtwls,2-sqrtwlsg)
SerM=c(2-sqrtva1,2-sqrtml,2-sqrtols,2-sqrtwls,2-sqrtwlsg,2-summary(SerM)[[1]],2-summary(SerM)[[6]])
GDE=c(GDEva1,GDEml,GDEols,GDEwls,GDEwlsg)
GDE=c(GDEva1,GDEml,GDEols,GDEwls,GDEwlsg,summary(GDE)[[1]],summary(GDE)[[6]])
R2_dataXpredictede=c(r2_va1,r2_ml,r2_ols,r2_wls,r2_wlsg)
R2_dataXpredictede=c(r2_va1,r2_ml,r2_ols,r2_wls,r2_wlsg,summary(R2_dataXpredictede)[[1]],summary(R2_dataXpredictede)[[6]])
Correlação=c(corva1,corml,corols,corwls,corwlsg)
Correlação=c(corva1,corml,corols,corwls,corwlsg,summary(Correlação)[[1]],summary(Correlação)[[6]])
EA=c(ea_va1,ea_ml,ea_ols,ea_wls,ea_wlsg)
EA=c(ea_va1,ea_ml,ea_ols,ea_wls,ea_wlsg,summary(EA)[[1]],summary(EA)[[6]])
mean_krigevar=c(summary(kc$krige.var)[[4]],summary(kc2$krige.var)[[4]],summary(kc3$krige.var)[[4]],summary(kc4$krige.var)[[4]],summary(kc5$krige.var)[[4]])
mean_krigevar=c(summary(kc$krige.var)[[4]],summary(kc2$krige.var)[[4]],summary(kc3$krige.var)[[4]],summary(kc4$krige.var)[[4]],summary(kc5$krige.var)[[4]],summary(mean_krigevar)[[1]],summary(mean_krigevar)[[6]])
mean_predict=c(summary(kc$predict)[[4]],summary(kc2$predict)[[4]],summary(kc3$predict)[[4]],summary(kc4$predict)[[4]],summary(kc5$predict)[[4]])
mean_predict=c(summary(kc$predict)[[4]],summary(kc2$predict)[[4]],summary(kc3$predict)[[4]],summary(kc4$predict)[[4]],summary(kc5$predict)[[4]],summary(mean_predict)[[1]],summary(mean_predict)[[6]])
## veja os valores AIC, escolha o menor e o maior
AIC(reglin_va1) ##reglin=regressão linear ...reglin_av1=lm(xv.va1$data~xv.va1$predicted) , sendo va1 - asentimento
AIC(reglin_ml)
AIC(reglin_ols)
AIC(reglin_wls)
AIC(reglin_wlsg)
##especificar aqui o AIC menor e o maior
aic_min=(AIC(reglin_ml))##especificar
aic_max=(AIC(reglin_wlsg))##especificar
aic_min
aic_max
dif_va1=((AIC(reglin_va1))-(aic_min))
dif_ml=((AIC(reglin_ml))-(aic_min))
dif_ols=((AIC(reglin_ols))-(aic_min))
dif_wls=((AIC(reglin_wls))-(aic_min))
dif_wlsg=((AIC(reglin_wlsg))-(aic_min))
dif_va1
dif_ml
dif_ols
dif_wls
dif_wlsg
AKAIKE=c(dif_va1,dif_ml,dif_ols,dif_wls,dif_wlsg,aic_min,aic_max)
AK=data.frame(AKAIKE)
#BIC(reglin_va1)
#BIC(reglin_ml)
#BIC(reglin_ols)
#BIC(reglin_wls)
#BIC(reglin_wlsg)
#bic_min=(BIC(reglin_ml))##especificar
#bic_max=(BIC(reglin_wlsg))##especificar
##bic_min
#bic_max
#difb_va1=((BIC(reglin_va1))-(bic_min))
#difb_ml=((BIC(reglin_ml))-(bic_min))
#difb_ols=((BIC(reglin_ols))-(bic_min))
#difb_wls=((BIC(reglin_wls))-(bic_min))
##difb_wlsg=((BIC(reglin_wlsg))-(bic_min))
##difb_va1
##difb_ml
##difb_ols
##difb_wls
##difb_wlsg
##BIC=c(difb_va1,difb_ml,difb_ols,difb_wls,difb_wlsg,bic_min,bic_max)
##data.frame(BIC)
tabela_resumo_B=edit(data.frame(MODELO,c0,c1,Patamar,Alcance, ER, Ser,SerM,mean_error,GDE,R2_dataXpredictede,Correlação,EA,mean_krigevar,mean_predict,AKAIKE))#,BIC))
write.table(tabela_resumo_B, file="k:\\2012/geoestatistica/s100/akaike.xls", sep = '\t',col.names = NA)
# Variogramas direcionais:
vario.4 <- variog4(dados, max.dist = hmax)
plot(vario.4, lwd=3)
plot(variog(dados, max.dist=hmax))
lines.variomodel(cov.model="exp", cov.pars=c(1,.3), nug=0, max.dist=hmax)
lines.variomodel(cov.model="mat", cov.pars=c(.85,.2), nug=0.1, kappa=1,max.dist=hmax, lty=2)
lines.variomodel(cov.model="sph", cov.pars=c(.8,.8), nug=0.1,max.dist=hmax, lwd=2)
par(mfrow=c(2,3))
vario0=variog(dados,max.dist=hmax,pairs.min=par,direction=pi,estimator="modulus")
vario45 = variog(dados,max.dist=hmax, pairs.min=par,direction=pi/4,estimator="modulus")
vario90 = variog(dados,max.dist=hmax, pairs.min=par,direction=pi/2,estimator="modulus")
vario135 = variog(dados,max.dist=hmax, pairs.min=par,direction= (pi/4 + pi/2) ,estimator="modulus")
plot(vario0, xlab="zero")
plot(vario45, xlab="quarenta e cinco")
plot(vario90, xlab="noventa")
plot(vario180, xlab="cento e trinta e cinco")
###########################
#Após escolha da direção, fazer ajuste, no caso foi ? graus
variodir=vario45
variodir = variog(dados,max.dist=hmax,direction=pi/4,estimator="modulus")
plot(variodir)
dir=eyefit(variodir) # Ajusta a olho (a sentimento) (chute inicial para o método iterativo (método numérico))
summary (dir)
taudir=dir[[1]]$nugget ##C0
sigmasqdir =dir[[1]]$cov.pars[1] ##C1
phidir=dir[[1]]$cov.pars[2] ##phi
#####valores escolhidos
taudir
sigmasqdir
phidir
xv.dir=xvalid(dados,model=dir)##modelo modulous com direção escolhida
xv.dir
mean(xv.dir$error)
mean(xv.dir$std.error)
sqrt((sum(xv.dir$std.error^2))/n)
GDEdir=(sigmasqdir/(sigmasqdir+tausqdir))*100
GDEdir
plot(xv.dir$data, xv.dir$predict)
sqrt((sum(xv.dir$predict^2))/n)
sqrt((sum(xv.dir$error^2))/n)
wlsdir=variofit(variodir,ini=c(sigmasqdir,phidir),nugget=tausqdir)
plot(variodir,xlab="Distancia (h)",ylab="Semivariancia")
lines(wls,col="red")
xv.wlsdir=xvalid(dados,model=wls)
xv.wlsdir
wlsdir
tauwlsdir=wlsdir[[1]] ##C0
sigmawlsdir =wlsdir[[2]][1] ##C1
phiwlsdir=wlsdir[[2]][2] ##alcance
#####valores escolhidos
tauwlsdir
sigmawlsdir
phiwlsdir
plot(xv.wlsdir$data,xv.wlsdir$predicted)
cor(xv.wlsdir$data,xv.wlsdir$predicted)
sum(xv.wlsdir$std.error)/n
sqrt((sum(xv.wlsdir$std.error^2))/n)
GDEwls = (sigmawlsdir/(sigmawlsdir+tauwlsdir))*100
GDEwls
plot(variodir, xlab="Distância escolhida(h)", ylab="Semivariograma (classical)")
lines(wlsdir)
##$u = são as distâncias que serão plotadas no eixo no semivariograma.
##$v = é a semivariância para cada distância.
##$n = número de pares de pontos em cada distância.
##$uvec => número de pontos
##sd = desvio padrão naquela distância
##var = variância dos dados
##$n.data = numero de pares trabalhados.
####vario2 - modulus
vario2 = variog(dados, max.dist=hmax, pairs.min=30, estimator="modulus") # estimador do semivariograma (estimador robusto de Cressie e Hawkins, 1980), faz o semivariograma considerando o estimador robusto, dados sem outliers os dois ficam parecidos, qdo fica diferente eles ficam muito diferentes...
vario2
vario2$ind.bin
plot(vario2, xlab="Distância (h)", ylab="Semivariograma (Cressie e Hawkins)")#SÓ PARA DADOS COM OUTLIERS
va2=eyefit(vario2)##esférico???
va2#####valores escolhidos
sigmava2=va2[[1]]$cov.pars[1] ##C1
phiva2=va2[[1]]$cov.pars[2] ##phi
tauva2=va2[[1]]$nugget ##C0
sigmava2
phiva2
tauva2
plot(xv.va2$data,xv.va2$predicted)
cor(xv.va2$data,xv.va2$predicted)
xv.va2=xvalid(dados,model=va2)##modelo va2 = sph?
xv.va2 ## modelo exponencial
sum(xv.va2$std.error)/n
sqrt((sum(xv.va2$std.error^2))/n)
GDEva2= (sigmava2/(sigmava2+tauva2))*100
GDEva2
gde1=(tauva2/(sigmava2+tauva2))*100
gde1
plot(vario2, xlab="Distância (h)", ylab="Semivariograma (Cressie e Hawkins)")
lines(va2,col="red")
summary(xv.va2)
summary(dados)
anova((data.frame(MODELO,c0,c1,Patamar,Alcance,mean_std_error,mean_error,SQRT,SQRTm,GDE,R2_dataXpredictede,Correlação)))##data.frame(nomes,mean_krigevar,mean_predict))
summary(kc$krige.var)[[4]]
summary(kc$predict)##[[4]]
###KRIGAGEM VA1
boxplot(kc$krige.var)
boxplot(kc$predict)
hist(kc$krige.var)###data,xlab="Classe de Valores",ylab="Frequência",main="Histograma")
hist(kc$predict)
###KRIGAGEM ml
kc2=krige.conv(dados,loc=loci,border=limite,krige=krige.control(obj=ml))
image(kc2,loc=loci,border=limite,val=kc2$predict,col="gray"(seq(1,0.1,l=5)))##l=5(n. classes)
legend.krige(c(348030,348210),c(7637910,7637925),cex.leg=0.7,val=kc2$predict,col=gray(seq(1,0.1,l=5)),off=0.8)
summary(kc2$krige.var)[[4]]
summary(kc2$predict)[[4]]
boxplot(kc2$krige.var)
boxplot(kc2$predict)
hist(kc2$krige.var)
hist(kc2$predict)
###KRIGAGEM ols
kc3=krige.conv(dados,loc=loci,border=limite,krige=krige.control(obj=ols))
image(kc3,loc=loci,border=limite,val=kc3$predict,col="gray"(seq(1,0.1,l=5)))##l=5(n. classes)
legend.krige(c(348030,348210),c(7637910,7637925),cex.leg=0.7,val=kc3$predict,col=gray(seq(1,0.1,l=5)),off=0.8)
summary(kc3$krige.var)[[4]]
summary(kc3$predict)[[4]]
boxplot(kc3$krige.var)
boxplot(kc3$predict)
hist(kc3$krige.var)###data,xlab="Classe de Valores",ylab="Frequência",main="Histograma")
hist(kc3$predict)
###KRIGAGEM wls
kc4=krige.conv(dados,loc=loci,border=limite,krige=krige.control(obj=wls))
image(kc4,loc=loci,border=limite,val=kc4$predict,col="gray"(seq(1,0.1,l=5)))##l=5(n. classes)
legend.krige(c(348030,348210),c(7637910,7637925),cex.leg=0.7,val=kc4$predict,col=gray(seq(1,0.1,l=5)),off=0.8)
summary(kc4$krige.var)[[4]]
summary(kc4$predict)[[4]]
boxplot(kc4$krige.var)
boxplot(kc4$predict)
hist(kc4$krige.var)###data,xlab="Classe de Valores",ylab="Frequência",main="Histograma")
hist(kc4$predict)
###KRIGAGEM wlsg
kc5=krige.conv(dados,loc=loci,border=limite,krige=krige.control(obj=wlsg))
image(kc5,loc=loci,border=limite,val=kc5$predict,col="gray"(seq(1,0.1,l=5)))##l=5(n. classes)
legend.krige(c(348030,348210),c(7637910,7637925),cex.leg=0.7,val=kc4$predict,col=gray(seq(1,0.1,l=5)),off=0.8)
summary(kc4$krige.var)[[4]]
summary(kc4$predict)[[4]]
boxplot(kc4$krige.var)
boxplot(kc4$predict)
hist(kc4$krige.var)###data,xlab="Classe de Valores",ylab="Frequência",main="Histograma")
hist(kc4$predict)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment