Está en la página 1de 22

See discussions, stats, and author profiles for this publication at: https://www.researchgate.

net/publication/305724964

Introducción al entorno R en hidrología.

Presentation · January 2011


DOI: 10.13140/RG.2.1.3920.6647

CITATIONS READS

0 153

1 author:

Daniel Blanco-Ward
University of Aveiro
57 PUBLICATIONS   154 CITATIONS   

SEE PROFILE

Some of the authors of this publication are also working on these related projects:

DOUROZONE: ozone risk for Douro's vineyards in present and future climates. View project

Team-Minho project View project

All content following this page was uploaded by Daniel Blanco-Ward on 30 July 2016.

The user has requested enhancement of the downloaded file.


Introducción al entorno R en hidrología.

Curso Internacional en Hidrología General y Aplicada


Daniel Blanco Ward
Centro de Estudios Hidrográficos, CEDEX, Madrid 2011
Introducción al entorno R: objetivos
Empezar a familiarizarse con R:
 Objetos que utiliza (matrices de datos, vectores, listas).
 Posibilidades gráficas, posibilidades de análisis estadístico
 Programación, generación de rutinas
Realizar un análisis exploratorio de datos con R:
 Histograma, diagrama lineal
 Agregación de la escala mensual a la anual
 Estadística descriptiva y control de gráficos
 Diagramas de caja
 Contraste de igualdad de varianzas y medias
 Correlogramas y gráficos cuantil-cuantil.
¿Qué es R?
Es un lenguaje de programación de alto nivel, usado
principalmente en el análisis estadístico de datos y la
elaboración de gráficos.
Es de dominio público, multiplataforma (Windows, Unix,
Linux, Mac) y de código abierto.
Es utilizado ampliamente por la comunidad estadística:
mucho soporte disponible en cuanto a foros, manuales de
uso del software, libros de estadística etc.
Salvo la interfaz proveída por el paquete Rcmdr, no
presenta menús sencillos de utilizar.
Lo que pierde en facilidad de uso lo gana en el alto
control, por parte del usuario, de todo tipo de funciones y
objetos utilizados.
Manos a la obra…
Crear un directorio nuevo para trabajar con R.
Copiar los ficheros Trillomensuales.txt y
AEDconR2011.R en ese directorio.
Llamar al programa R y cambiar el directorio de
trabajo mediante Menu/Archivo/Cambiar
directorio.
Abrir rutina mediante Menu/Archivo/Abrir script
 Seleccionar AEDconR2011.R
Los primeros comandos
help.start() y help()
getwd() y setwd()
ls(), ls(pattern=“year*”)
rm(), rm(ls(pattern=“year*”), rm(list=ls())
shell(), shell(“del datos.txt”), shell(“dir *.*”)
Ficheros .RData y .Rhistory
History(), loadhistory(), save.history()
save.image() y q()
Importar datos y conocer su estructura
Importamos un fichero de datos en código ASCII.
Trillomensuales <- read.table(“Trillomensuales.txt”, header=TRUE, sep=“;”)
Comenzamos a conocer su estructura mediante el comando
str(Trillomensuales)
Nombre Tipo
Indroea Cuantitativa discreta entera
Año Cuantitativa discreta entera
Mes Cuantitativa discreta entera
Qmedmes Cuantitativa de ratio decimal
Año.hidrologico.num Cuantitativa discreta entera
Mesp Cualitativa nominal
Elaboración de un histograma
attach(Trillomensuales)
hist(qmedmes)
hist(qmedmes, freq=FALSE, ylim=c(0,0.1), col="blue",
main="Estación de aforos de Trillo", xlab="Caudal medio mensual",
ylab="Densidad", breaks=18, cex.lab=0.8, cex.main=1)
Diagramas lineales sencillos
win.graph(37.5,20)
plot(qmedmes, main="Estación de aforos 3005", type="l", lty=1,
col="blue", xlab="Orden en la serie", ylab="Caudal medio mensual
m3/s", cex.main=1, cex.main=0.9, cex.lab=0.8)
Agregación de datos y generación de
estadísticos descriptivos
Agregación de datos.
qanual <- tapply(qmedmes, año.hidrologico.num, mean)
round(qanual,2)
1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944
NA 20.52 52.58 32.04 NA NA 24.35 47.20 14.71 15.38 10.46 9.02
Generación de estadísticos descriptivos.
max(año.hidrologico.num, na.rm=TRUE)
[1] 2007
estads <- summary(qanual)
summary(qanual)[6]
Max.
52.58
Generando variables tipo carácter
Generamos variables tipo carácter.
paste("MedArit: ",round(estads[4],2),sep="")->media
paste("DEstan: ", round(sd(qanual, na.rm=TRUE),2),sep="") -> desvest
media
[1] "MedArit: 18.59“

Unimos de nuevo varias de ellas de dos en dos.


Estas variables serán desplegadas después como leyenda..
paste(media,mediana,sep="; ")->paraleyenda1
paraleyenda1
[1] "MedArit: 18.59; Mediana: 16.54"
Ajuste de tendencia mediante regresión
simple
años <- levels(factor(año.hidrologico.num))
aj_qanual <- lm(qanual ~ as.numeric(años))
summary(aj_qanual)
Residuals:
Min 1Q Median 3Q Max
-17.23 -5.95 -1.36 5.19 26.64
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 416.21 103.44 4.02 0.00 ***
as.numeric(años) -0.20 0.05 -3.84 0.00 ***
Residual standard error: 9.31 on 70 degrees of freedom
Multiple R-squared: 0.17, Adjusted R-squared: 0.16
F-statistic: 14.78 on 1 and 70 DF, p-value: 0.00
Calculo de una media móvil de 11 años y
las desviaciones unitarias acumuladas
Para el calculo de las medias móviles se utiliza la
función filter()
suavizado11 <- filter(qanual, filter=rep(1/11,11), side=1)
Para el cálculo de las desviaciones unitarias
acumuladas
qanual1 <- qanual - mean(qanual, na.rm=TRUE)
qanual2 <- cumsum(ifelse(is.na(qanual1), 0, qanual1))/sd(qanual1, na.rm=TRUE)
Gráfico lineal de varias series temporales
con control sobre los ejes y leyendas I
par(xaxs="i", yaxs="i")#Especifico como argumento axes=FALSE
plot(qanual ~ años, main="Estación de aforos de Trillo", type="l", lty=1,
col="blue", xlab="Año hidrológico", ylab="Caudal medio anual m3/s",
cex.lab=0.8, xlim=c(1930,2010), ylim=c(0,80), axes=FALSE, cex.main=0.9)

#Dibujo los ejes aparte con control sobre las etiquetas y su espaciado
axis(1, at=seq(1930,2010,10),label=seq(1930,2010,10),cex.axis=.8,las=2,
tck=1, col="darkgray", lty=3, pos=0)
axis(1, at=seq(1930,2010,10),label=FALSE,cex.axis=.8,las=1)

#Dibujo las series de la media móvil y la línea de tendencia


lines(suavizado11~años, col="darkblue", lty=1, lwd=2)
abline(aj_qanual, col="red3", lty=1, lwd=2)

#Dibujo una leyenda identificando los diversos componentes del gráfico


legend("topleft",bg="white",c("Qmed","Media","Tendencia","Media
móvil","DUA"), col=c("blue","darkgreen","red3","darkblue","red"),
lty=c(1,1,1,1,3),lwd=2,cex=0.8)
Gráfico lineal de varias series temporales
con control sobre los ejes y leyendas II
Adición de la tendencia y estadísticos descriptivos
de subgrupos de datos de la serie original I
#Selecciono aquellos caudales medios anuales mayor que el 3Q de la serie total
naños<-length(años)
dstc<-matrix(ncol=1,nrow=naños)
for (i in 1:naños){if((!is.na(qanual[i])) && (qanual[i] >estads[5]))
qanual[i]->dstc[i]}

#Dibujo los que satisfacen esa condición como puntos rojos


points(años,dstc,col="red",bg="red",pch=21)

#Vuelvo a calcular una línea de tendencia para dibujarla después junto a sus
estadísticos.
lm(dstc~as.numeric(años))->reglintc
abline(reglintc,col="red",lwd=2,lty=2)
summary(reglintc)

paste("Tendencia 3Q: ", -0.23, sep="") ->tendencia3Q


paste("Significación 3Q: ", "0.13", sep="") -> significacion3Q
paste(tendencia3Q,significacion3Q,sep="; ")->paraleyenda5
legend("topright",bg="white",c(paraleyenda5),cex=0.8)
Adición de la tendencia y estadísticos descriptivos
de subgrupos de datos de la serie original II
Digrama de cajas o “boxplots”
mesordenado <- factor(mesp,
levels=c("Octubre", "Noviembre", "Diciembre", "Enero", "Febrero", "Marzo",
"Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre"))
boxplot(qmedmes ~ mesordenado,
names=c("Oct","Nov","Dic","Ene","Feb","Mar","Abr","May","Jun","Jul","Ago","
Sep"), col="red", axis=FALSE, ylim=c(0,max(qmedmes,na.rm=TRUE)+10),
main="Estación de aforos de Trillo")
Contraste de hipótesis de igualdad de varianzas y
medias entre los años hidrológicos 1951-78 y
1980-07
#Convertimos qanual en una serie temporal y la seccionamos con el
comando windows
qanual.1933_2007.ts <- ts(qanual, start=1933)
qanual.1951_1979.ts <- window(qanual.1933_2007.ts, start=1951, end=1979)

#Aplicamos el test de igualdad de varianzas


var.test(qanual.1951_1979.ts, qanual.1980_2007.ts)
F = 3.3212, num df = 28, denom df = 27, p-value = 0.002528

#Aplicamos el test de igualdad de medias


t.test(qanual.1951_1979.ts, qanual.1980_2007.ts, var.equal=FALSE)
Welch Two Sample t-test
t = 4.1937, df = 43.772, p-value = 0.0001314
sample estimates: mean of x mean of y
21.66198 13.12208
Correlogramas
acf(qanual.1933_2007.ts, main="Correlograma est. 3005: 1933-2007",
xlab="Desfase anual", ylab="Autocorrelación", cex.lab=0.8,
na.action=na.pass)….
Gráficos cuantil-cuantil o “qqplots” I
xnorm <- rnorm(72, mean=18.59, sd=10.18); xnorm.sd <- (xnorm -
mean(xnorm))/sd(xnorm)
qanualsinnasd <- (qanualsinna - mean(qanualsinna))/sd(qanualsinna)
qqplot(xnorm.sd, qanualsinnasd, col="blue", xlab="Distribución normal",
ylab="Distribución Qanual")
abline(0,1, lty=3, col="red")
Graficos cuantil-cuantil o “qqplots” II
qanualsinnalogsd <- (log10(qanualsinna) -
mean(log10(qanualsinna)))/sd(log10(qanualsinna))
qqplot(xnorm.sd, qanualsinnalogsd, col="blue", xlab="Distribución
normal", ylab="Distribución Qanual", main="Ajuste Log10 Qanual
3005 a distribución normal")
abline(0,1, lty=3, col="red")

View publication stats