viernes 24 de febrero de 2012

Comparación de modelos de pronósticos de CO y NOx en Buenos Aires, Bogotá y Santiago, con regresiones y redes neuronales en R, ggplot2 y openair

Para el congreso Argentina Ambiental 2012 he estado terminando un resumen extendido, y me tiene muy contento el hecho de aplicar estadística dentro del ámbito de los sistemas ambientales.

Para este congreso realicé un pronóstico de CO y  NOx para las ciudades de Buenos Aires, Bogotá y Santiago, comparando los resultados de una regresión y redes neuronales. A continuación presentaré dos gráficos que comparan los resultados de forma muy simple y didáctica.

Entonces, con las técnicas que no voy a presentar acá genere las regresiones y redes neuronales, y obtuve un CO y NOx pronosticado con cada técnica para cada ciudad. Pensé en graficar con ggplot2 aplicando un factor específico, y se me ocurrió en excel clasificar las  el valor absoluto de la diferencia de los pronósticado con lo original, según percentiles del original, así:

abs(diferencia)<P(20)=1; es decir, el valor absoluto de la diferencia debe cae dentro del percentil 20 del valor original para que de el valor de 1, y entonces generé la escala

abs(diferencia)

  • <P(20)=1
  • P(20)-P(40)=0.8
  • P(40)-P(60)=0.6
  • P(60)-P(80)=0.4
  • >P(80)=0.2

Y la fórmula en Excel 2010 es la siguiente:

SI(ABS(H2-S2)<PERCENTIL.INC($H$2:$H$3379;0.2);1;SI(Y(ABS(H2-S2)>PERCENTIL.INC($H$2:$H$3379;0.2);(ABS(H2-S2)<PERCENTIL.INC($H$2:$H$3379;0.4)));0.8;SI(Y(ABS(H2-S2)>PERCENTIL.INC($H$2:$H$3379;0.4);(ABS(H2-S2)<PERCENTIL.INC($H$2:$H$3379;0.6)));0.6;SI(Y(ABS(H2-S2)>PERCENTIL.INC($H$2:$H$3379;0.6);(ABS(H2-S2)<PERCENTIL.INC($H$2:$H$3379;0.8)));0.4;SI(ABS(H2-S2)>PERCENTIL.INC($H$2:$H$3379;0.8);0.2;0)))))

y ahí tenemos nuestro factor


Luego:


setwd("C:/r")
library(openair)
#Uso la librería openair ya que es ideal para trabajar con datos en formato típico
#attach es para manejar directamente las variables, pero acá no es necesario
aire1<-import("rpud-co.csv",sep=";",date.name="fecha",time.name="fecha" )
attach(aire1)
names(aire1)
aire2<-import("rpud-nox.csv",sep=";",date.name="fecha",time.name="fecha" )
attach(aire2)
names(aire2)
aire3<-import("rbai-co.csv",sep=";",date.name="fecha",time.name="fecha" )
attach(aire3)
names(aire3)
aire4<-import("rbai-nox.csv",sep=";",date.name="fecha",time.name="fecha" )
attach(aire4)
names(aire4)
aire5<-import("rbog-co.csv",sep=";",date.name="fecha",time.name="fecha" )
attach(aire5)
names(aire5)
aire6<-import("rbog-nox.csv",sep=";",date.name="fecha",time.name="fecha" )
attach(aire6)
names(aire6)
library(ggplot2)




Y ahora podemos graficar






> p7 <-ggplot(aire6)+aes(x=bog_nox_regpro, y=CO)+geom_point(binwidth = 1, aes(size = factor(bog_dif_co_reg),colour = factor(bog_dif_co_reg)))+scale_colour_brewer(type="seq", palette=1)+annotate("text", x = 150,y = 15, label = "R2 = 0.45", colour = "black", size=8)+ opts(title="NOx Bogotá Regresión")+opts(legend.position="none")+ xlab("NOx Pronosticado (ppb)")+ylab("NOx Original (ppb)")
> p10 <- ggplot(aire6)+aes(x=bog_nox_neupro, y=CO)+geom_point(binwidth = 1, aes(size = factor(bog_dif_co_neu),colour = factor(bog_dif_co_neu)))+scale_colour_brewer(type="seq", palette=1)+annotate("text", x = 150,y = 15, label = "R2 = 0.45", colour = "black", size=8)+ opts(title="NOx Bogotá Neuronal")+opts(legend.position="none")+ xlab("NOx Pronosticado (ppb)")+ylab("NOx Original (ppb)")
> p8 <-ggplot(aire4)+aes(x=bai_nox_reg_pro, y=ba_nox_original)+geom_point(binwidth = 1, aes(size = factor(bai_dif_nox_reg),colour = factor(bai_dif_nox_reg)))+scale_colour_brewer(type="seq", palette=1)+annotate("text", x = 140,y = 300, label = "R2 = 0.40", colour = "black", size=8)+ opts(title="NOx Buenos Aires Regresión")+opts(legend.position="none")+ xlab("NOx Pronosticado (ppb)")+ylab("NOx Original (ppb)")
> p11 <-ggplot(aire4)+aes(x=bai_nox_neu_pro, y=ba_nox_original)+geom_point(binwidth = 1, aes(size = factor(bai_dif_nox_neu),colour = factor(bai_dif_nox_neu)))+scale_colour_brewer(type="seq", palette=1)+annotate("text", x = 100,y = 300, label = "R2 = 0.33", colour = "black", size=8)+ opts(title="NOx Buenos Aires Neuronal")+opts(legend.position="none")+ xlab("NOx Pronosticado (ppb)")+ylab("NOx Original (ppb)")
> p9 <-ggplot(aire2)+aes(x=p_nox_reg_pro, y=p24nox)+geom_point(binwidth = 1, aes(size = factor(p_dif_nox_reg),colour = factor(p_dif_nox_reg)))+scale_colour_brewer(type="seq", palette=1)+annotate("text", x = 170,y = 400, label = "R2 = 0.73", colour = "black", size=8)+ opts(title="NOx Santiago Regresión")+opts(legend.position="none")+ xlab("NOx Pronosticado (ppb)")+ylab("NOx Original (ppb)")
> p12 <- ggplot(aire2)+aes(x=p_nox_neu_pro, y=p24nox)+geom_point(binwidth = 1, aes(size = factor(p_dif_nox_neu),colour = factor(p_dif_nox_neu)))+scale_colour_brewer(type="seq", palette=1)+annotate("text", x = 170,y = 400, label = "R2 = 0.80", colour = "black", size=8)+ opts(title="NOx Santiago Neuronal")+opts(legend.position="none")+ xlab("NOx Pronosticado (ppb)")+ylab("NOx Original (ppb)"
> p7 <-ggplot(aire6)+aes(x=bog_nox_regpro, y=CO)+geom_point(binwidth = 1, aes(size = factor(bog_dif_co_reg),colour = factor(bog_dif_co_reg)))+scale_colour_brewer(type="seq", palette=1)+annotate("text", x = 150,y = 15, label = "R2 = 0.46", colour = "black", size=8)+ opts(title="NOx Bogotá Regresión")+opts(legend.position="none")+ xlab("NOx Pronosticado (ppb)")+ylab("NOx Original (ppb)")
> p10 <- ggplot(aire6)+aes(x=bog_nox_neupro, y=CO)+geom_point(binwidth = 1, aes(size = factor(bog_dif_co_neu),colour = factor(bog_dif_co_neu)))+scale_colour_brewer(type="seq", palette=1)+annotate("text", x = 150,y = 15, label = "R2 = 0.45", colour = "black", size=8)+ opts(title="NOx Bogotá Neuronal")+opts(legend.position="none")+ xlab("NOx Pronosticado (ppb)")+ylab("NOx Original (ppb)")
> p8 <-ggplot(aire4)+aes(x=bai_nox_reg_pro, y=ba_nox_original)+geom_point(binwidth = 1, aes(size = factor(bai_dif_nox_reg),colour = factor(bai_dif_nox_reg)))+scale_colour_brewer(type="seq", palette=1)+annotate("text", x = 140,y = 300, label = "R2 = 0.40", colour = "black", size=8)+ opts(title="NOx Buenos Aires Regresión")+opts(legend.position="none")+ xlab("NOx Pronosticado (ppb)")+ylab("NOx Original (ppb)")
> p11 <-ggplot(aire4)+aes(x=bai_nox_neu_pro, y=ba_nox_original)+geom_point(binwidth = 1, aes(size = factor(bai_dif_nox_neu),colour = factor(bai_dif_nox_neu)))+scale_colour_brewer(type="seq", palette=1)+annotate("text", x = 100,y = 300, label = "R2 = 0.33", colour = "black", size=8)+ opts(title="NOx Buenos Aires Neuronal")+opts(legend.position="none")+ xlab("NOx Pronosticado (ppb)")+ylab("NOx Original (ppb)")
> p9 <-ggplot(aire2)+aes(x=p_nox_reg_pro, y=p24nox)+geom_point(binwidth = 1, aes(size = factor(p_dif_nox_reg),colour = factor(p_dif_nox_reg)))+scale_colour_brewer(type="seq", palette=1)+annotate("text", x = 170,y = 400, label = "R2 = 0.73", colour = "black", size=8)+ opts(title="NOx Santiago Regresión")+opts(legend.position="none")+ xlab("NOx Pronosticado (ppb)")+ylab("NOx Original (ppb)")
> p12 <- ggplot(aire2)+aes(x=p_nox_neu_pro, y=p24nox)+geom_point(binwidth = 1, aes(size = factor(p_dif_nox_neu),colour = factor(p_dif_nox_neu)))+scale_colour_brewer(type="seq", palette=1)+annotate("text", x = 170,y = 400, label = "R2 = 0.80", colour = "black", size=8)+ opts(title="NOx Santiago Neuronal")+opts(legend.position="none")+ xlab("NOx Pronosticado (ppb)")+ylab("NOx Original (ppb)")



Y con esta fórmula sensacional de la receta de cocina para R, el Cookbook for R


> multiplot <- function(..., plotlist=NULL, cols) {
+     require(grid)
+ 
+     # Make a list from the ... arguments and plotlist
+     plots <- c(list(...), plotlist)
+ 
+     numPlots = length(plots)
+ 
+     # Make the panel
+     plotCols = cols                          # Number of columns of plots
+     plotRows = ceiling(numPlots/plotCols) # Number of rows needed, calculated from # of cols
+ 
+     # Set up the page
+     grid.newpage()
+     pushViewport(viewport(layout = grid.layout(plotRows, plotCols)))
+     vplayout <- function(x, y)
+         viewport(layout.pos.row = x, layout.pos.col = y)
+ 
+     # Make each plot, in the correct location
+     for (i in 1:numPlots) {
+         curRow = ceiling(i/plotCols)
+         curCol = (i-1) %% plotCols + 1
+         print(plots[[i]], vp = vplayout(curRow, curCol ))
+     }
+ 
+ }

obtenemos

multiplot(p7, p8, p9, p10, p11, p12,cols=3)


multiplot(p7, p8, p9, p10, p11, p12,cols=3)





Referencias:
R Development Core Team (2011). R: A language and environment for statistical computing. R
  Foundation for Statistical Computing, Vienna, Austria. ISBN 3-900051-07-0, URL
  http://www.R-project.org/.
H. Wickham. ggplot2: elegant graphics for data analysis. Springer New York, 2009.
Teetor Paul. Cookbook for R. Pub. O'Really Media. 2011. 978-0-596-80915-7

lunes 20 de febrero de 2012

La Estupidez de @ChileLiberal

Ok, todo partió con esto: El fabuloso tweet de @chileliberal


Se quejaban por la contaminación de HidroAysén, pero ahora queman neumáticos.
Feb 20 via web Favorite Retweet Reply

Osea, no quiero entrar en el detalle de los sistemas complejos, de la falta de diálogo entre las ciencias "exactas", y las ciencias "blandas", menos aún en la multi, pluri o transdisciplinaeridad, ya que cualquier persona que conozca la realidad de la zona y/o tenga sentimientos por la zona, se da cuenta que las declaraciones anteriores no son mas que una estúpidez, con todo respecto claro.

Bueno, les respondí con esto:


Y con ustedes... La Estupidez: "@chileliberal Se quejaban por la contaminación de HidroAysén, pero ahora queman neumáticos."
Feb 20 via web Favorite Retweet Reply

Ok, quizás me excedí, pero aveces cuando uno es muy ligero para decir las cosas, simplemente no se entiende. En otras palabras: Sometimes you gotta be tough.

Ellos reaccionaron y me añadieron la la lista de los "idiotas"... Luego me dijeron que eso me pasa por trollarlos y que ellos nunca trolean a nadie... ellos.


Entonces, como me dió mucha risa todo esto, y como me consideran un idiota, decidí darles un análisis a estos llamados a establecer un movimientos político INTEGRADOR... TAN PERO TAN AFECTUOSOS, SOLIDARIOS, HUMILDES Y TODAS ESAS MIERDAS... y que mejor que con R


library(twitteR)
chileliberal <- getUser('chileliberal')
#Gotu
cltweets <- userTimeline('chileliberal')
cltweetslarge <- userTimeline('chileliberal',n=1000)

#cltweetslarge podría haber tenido muchos nomres, sobra la imaginación pero pa que tanto

library(tm)
#esta librería es Text Data Mining
mydata.corpus <- Corpus(VectorSource(df))
df <- twListToDF(cltweetslarge)
attach(df)
names(df)

> names(df)
 [1] "text"         "favorited"    "replyToSN"    "created"      "truncated"  
 [6] "replyToSID"   "id"           "replyToUID"   "statusSource" "screenName

#Por supuesto que estamos interesados en text

mydata.corpus <- Corpus(VectorSource(text))
#construyendo el cuerpo
mydata.corpus <- tm_map(mydata.corpus, tolower)
#sacando minúsculas
mydata.corpus <- tm_map(mydata.corpus, removePunctuation)
#removiendo puntuaciones
my_stopwords <- c(stopwords('english'), 'prolife', 'prochoice', 'lo', 'que', 'una', 'del', 'por', 'las','eso','con','hay','para', 'los')
#Sacando la basura (http://www.youtube.com/watch?v=b67rpm3zxTo) creo que me faltó por eliminar algunas palabras
#pero estos cabros de @chileliberal escriben puros monosílabos

#me imagino que ya cachan donde va esto

mydata.dtm <- TermDocumentMatrix(mydata.corpus)
mydata.dtm

> mydata.dtm
A term-document matrix (694 terms, 100 documents)

Non-/sparse entries: 940/68460
Sparsity           : 99%
Maximal term length: 17
Weighting          : term frequency (tf)

#Ahora vamos a encontrar los términos frecuentes
findFreqTerms(mydata.dtm, lowfreq=2)

#Que tenemos...
> findFreqTerms(mydata.dtm, lowfreq=2)
  [1] "1939"            "ahí"             "ahora"           "alejandrovial" 
  [5] "alexisarayab"    "algo"            "alguien"         "algunos"       
  [9] "amor"            "antofagasta"     "años"            "artículo"      
 [13] "así"             "asumo"           "aunque"          "aysén"         
 [17] "ayseninos"       "bajo"            "bala"            "bien"          
 [21] "bloquear"        "bolivia"         "bueno"           "buenos"        
 [25] "cada"            "camioneros"      "carnaval"        "casa"          
 [29] "caso"            "centralismo"     "cerrado"         "chile"         
 [33] "chilenos"        "ciudad"          "coihaique"       "cómo"          
 [37] "confech"         "conoce"          "contra"          "cuando"        
 [41] "cubanos"         "debe"            "demandas"        "depeche"       
 [45] "derecho"         "desde"           "desplazamiento"  "destruir"      
 [49] "día"             "días"            "drogas"          "educación"     
 [53] "ellos"           "empezó"          "entre"           "esa"           
 [57] "escuelas"        "ese"             "esos"            "españa"        
 [61] "estado"          "están"           "este"            "estoy"         
 [65] "estudiantes"     "estudiantil"     "exactamente"     "falklands"     
 [69] "falso"           "fascismo"        "fascistas"       "físico"        
 [73] "fue"             "fuerza"          "gente"           "gobierno"      
 [77] "goya"            "hace"            "hidroaysén"      "historia"      
 [81] "hombre"          "hoy"             "impiden"         "isat"          
 [85] "jaimeparadahoyl" "jmvl27"          "ladysol"         "latercera"     
 [89] "legítimo"        "les"             "libro"           "libros"        
 [93] "lolitashu"       "mejor"           "menos"           "milicos"       
 [97] "mismo"           "mode"            "morrissey"       "mucho"         
[101] "muerte"          "museo"           "nadie"           "narvandi"      
[105] "nazis"           "neumáticos"      "niña"            "notable"       
[109] "nuestro"         "nuevo"           "olviden"         "oscargomeza"   
[113] "otras"           "otros"           "país"            "paso"          
[117] "pero"            "porque"          "preparador"      "problemas"     
[121] "protestar"       "protestas"       "qué"             "queman"        
[125] "quemaron"        "recursos"        "región"          "rodin"         
[129] "sebastiangomeza" "seguro"          "ser"             "serena"        
[133] "sergioibarra"    "sido"            "sobre"           "sociales"      
[137] "sólo"            "somos"           "son"             "supuesto"      
[141] "sus"             "también"         "tener"           "tengo"         
[145] "tienen"          "todo"            "todos"           "trolleado"     
[149] "unos"            "van"             "ver"             "via"           
[153] "viendo"     

#Wow, aparezco ahí, elemento 133, pero no me interesó ver que es lo escribían... así es

#Pero vamos a centrarnos en la palabra "fascismo" y veamos como se enlaza con otras palabras

 findAssocs(mydata.dtm, 'fascismo', 0.20)
       fascismo         bloquee      comunidada      grupúsculo       imponerse
           1.00            0.57            0.57            0.57            0.57
        imponga           parte        porfiado            puro            seas
           0.57            0.57            0.57            0.57            0.57
         sitiar           sitie         sujetos     oscargomeza       coihaique
           0.57            0.57            0.57            0.56            0.39
     camioneros          fuerza         aplasta           armas          calles
           0.31            0.31            0.27            0.27            0.27
   carerrajismo          conoce           creoq        despejar      diferencia
           0.27            0.27            0.27            0.27            0.27
        enemigo           estas          formar            gran httptconqhaisy5
           0.27            0.27            0.27            0.27            0.27
       incendio        ingresos          juntos        libertad        milicias
           0.27            0.27            0.27            0.27            0.27
      necesaria      procurarse         propios    protestantes       reichstag
           0.27            0.27            0.27            0.27            0.27
       rosvidie           sobre
           0.27            0.25

#luego, removimos los términos que no nos sirven
mydata.dtm2 <- removeSparseTerms(mydata.dtm, sparse=0.97)
#construimos nuestro dataframe
mydata.df <- as.data.frame(inspect(mydata.dtm2))
#y escalamos
mydata.df.scale <- scale(mydata.df)
#construimos cluster
d <- dist(mydata.df.scale, method = "euclidean")
fit <- hclust(d, method="ward")
#y graficamos
plot(fit, main="La Estupidez de ChileLiberal")
rect.hclust(fit, k=6, border="red")
rect.hclust(fit, k=6, border="red")


Nótese Como aparece Chile, Estado, SebastianGomezA (no tengo idea quien es... and i don't care), ladysol????, hasta que llegmaos que del mismo brazo que se desprende región, se divide en dos, escuelas. y FASCISTAS, que se divide en AYSENINOS Y NEUMÁTICOS... interesante.

Por otra parte vemos como DERECHO deriva directamente a FASCISMO (les gusta mucho esta palabra a esta gente) y a OscarGomezA (GIYF; not this case)

¿Podríamos decir que @chileliberal son en realidad fascistas?
No, pero si usan mucho esa palabra.

¿Pueden llamar a cualquiera Idiota?
Las palabras y los insultos no son mas que el reflejo de que es cada uno por dentro.

Referencias:
 R Development Core Team (2011). R: A language and environment for statistical computing. R Foundation for Statistical Computing, Vienna, Austria. ISBN 3-900051-07-0, URL http://www.R-project.org/

Jeff Gentry (2012). twitteR: R based Twitter client. R package version 0.99.18. http://CRAN.R-project.org/package=twitteR.

Heuristic Andrew (2011). Text Data Mining with Twitter and R http://heuristically.wordpress.com/2011/04/08/text-data-mining-twitter-r.

domingo 12 de febrero de 2012

Abrir bases de datos Access (.mdb) en UBUNTU

Resulta que estaba con el típico problema de que en el disco duro portátil había un virus que me impedía ver las carpetas, y si pensamos que en una de esas tengo información en .mdb que tengo que procesar, inputar datos, regresionar, aplicar redes neuronales... etc y elaborar el resumen para Argentina Ambiental 2012 PARA 4 DÍAS MAS, comprenderán que estaba en un grave aprieto. Mas encima, la base de datos debería estar lista HOY para enviarla para mis colaboradores de Argentina... bueno.

Busque información (GIYF), y me salian puras leseras, que taringa, que la carpeta $RECYCLE:BIN, que la carpeta RECYCLE, etc etc. Luego reinicié con Ubuntu y podía ver perfectamente todas las carpetas, pero no sabía cual borrar, borré una, reinicié, no funcionó, borré otra, tampoco... y así. Hasta que ahora borré todas las sospechosas de virus y extenciones extrañas .exe, etc. Pero me aburrí, asi que busque alguna forma de abrir bases de datos Access en Ubuntu, y lo logré!

Se llama MDB VIEWER,  y me permite importar los archivos .mdb y expotarlos to whatever hahahah

That easy!

viernes 20 de enero de 2012

"Gobierno Mundial de los Estados Unidos..." STOP SOPA! STOP PIPA!

megaupload







Todos los que creemos en la libertad de conocimiento y en la libertad de Internet nos hemos visto golpeados con el cierre de Megaupload por parte del FBI de los Estados Unidos de Norte América. Esta acción se realiza dentro del contexto de las protestas mundiales en contra de la aprobación de: Acta en contra de la Pirateria Online (Stop Online Piracy Act; SOPA) y el Acta para Proteger la Propiedad Intelectual (Protect Intelectual Property Act; PIPA).




Para detener la aprobación de estas leyes del que parece que es el "GOBIERNO MUNDIAL DE LOS ESTADOS UNIDOS", se han unido Google, Twitter, Paypal, Amazon, EBAY, Bloomberg, WIKIPEDIA y otros en la Coalición de la Red (NET Coalition) cuya agenda incluye:


  • Promover derechos de autor, marcas y protección de los datos balanceados en Estados Unidos e Internacionalmente
  • Preservar el regimen legal de compañías que se inspiren en la innovación y apoyen la existencia de aplicaciones  y servicios orientadas a los consumidores libres de regulaciones que imponen responsabilidad excesiva a las empresas host, y localizar y facilitar el acceso a contenidos en Internet.
  • Promover las políticas de protección del consumidor que facilitan decisiones bien informadas de los consumidores respecto la accesibilidad de información personal en Internet.



En respuesta el colectivo de activistas de Internet #Anonymous asegura que dará el mayor ataque de su historia contra sitios web de Estados Unidos y la Industria Musical.

Creo que la propuesta de SOPA y PIPA tienen un alcance global de tal magnitud e importancia que nos concierne a todos los que usamos Internet como forma de expresión del conocimiento libre. Esto es algo similar al problema de la educación en Chile, sólo los que tengan el dinero podrán acceder a los contenidos y al conocimiento. Por eso considero que las acciones de protesta tienen que traspasar Internet, dejar la máscara de Anonymous y salir a la calle, de forma pacífica, demostrando el enojo y rabia en contra de estas propuestas, en todo el mundo.

Algunos dichos de Mahatma Ghandi:

Cuando una ley es injusta, lo correcto es desobedecer


No hay camino a la libertad, la libertad es el camino


No hay camino para la paz, la paz es el camino


Los grilletes de oro son mucho peores que los de hierro



domingo 8 de enero de 2012

¿Democracia Ambiental entre Pudahuel y Las Condes? Calidad de Aire en Santiago usando OpenAir

Estuve trabajando para una tarea de Contaminación Atmosférica con mi profesora Laura Gallardo del CMM de la Universidad de Chile y no encontré mejor ocasión para ocupar las librerías OpenAir desarroladas por David Carslaw del King's Collegue London y Karl Ropkins de University of Leeds.
En esta presentación solo me concentraré en presentar la librería openair, y algunas de sus asombrosas funciones.
Partimos por lo primero:
Ingresamos al SINCA y bajamos datos, yo bajé de Las Condes y Pudahuel, PM10, PM2.5, O3 y Velocidad del Viento del año 2011. La Dirección no estaba disponible lamentablemente, y por eso no pudo ser posible realizar algunos análisis
#Estoy usando RStudio, es genial!
library(openair)
setwd("c:/data")
aire<-import("2011.csv", date.name="fecha", time.name="fecha")
    date1     date2      o3lc    pm10lc    pm23lc      wslc     pm10p     pm25p
"POSIXct"  "POSIXt" "numeric" "numeric" "numeric" "numeric" "numeric" "numeric"
      o3p       wsp
"numeric" "numeric"

#Los datos están en online
#puedes intentar los siguiente
aire<-read.csv(url("http://aire.cenma.cl/sibarra/wp-content/uploads/2012/01/2011.csv"))
#Y luego importar a openair, no lo he hecho así
#Es muy importane el orden de los datos para importar con openair
#Lo mas fácil es mantener el formato "d/m/y H:M"
#Además la opción date.name y time.name indica el nombre de la columna que
#tiene la fecha y la hora, en este caso la misma columna, mas fácil
attach(aire)
names(aire)
[1] "date"   "o3lc"   "pm10lc" "pm23lc" "wslc"   "pm10p"  "pm25p"  "o3p"  
[9] "wsp"  
#En mi hoja de datos la variable fecha tiene el nombre de "fecha"
#pero una vez que es reconocido en openair, cambia a date
head(aire)
                 date   o3lc pm10lc pm23lc   wslc pm10p pm25p   o3p   wsp
1 2011-01-01 00:00:00 10.920   23.0  14.92 0.6695  27.5 11.75 7.564 1.143
2 2011-01-01 01:00:00  1.247   48.5  26.08 0.9834  45.5 17.33    NA 1.096
3 2011-01-01 02:00:00  1.247   46.5  27.92 0.9106  44.5 14.00    NA 1.252
4 2011-01-01 03:00:00  1.908   36.5  24.83 0.9791  40.0 17.00    NA 1.455
5 2011-01-01 04:00:00  5.959   39.0  18.92 2.0230  30.0 14.00 1.360 1.492
6 2011-01-01 05:00:00 11.500   34.5  17.00 1.2390  29.0 10.42    NA 1.505
#Ahora estamos listos para empezar
timePlot(aire,pollutant=c("pm10p","pm10lc"),lwd=4,lty=1, main="MP10 en Pudahuel y Las Condes (ug/m^3)")
#Se aprecian mayores concentraciones en Pudahuel




timePlot(aire,pollutant=c("pm25p","pm25lc"),lwd=4,lty=1, main="PM2.5 en Pudahuel y Las Condes (ug/m^3)")
##Se aprecian mayores concentraciones en Pudahuel







timePlot(aire,pollutant=c(o3p","o3lc"),lwd=4,lty=1, main="O3 en Pudahuel y Las Condes (ppb)")
#Se aprecian mayores concentraciones en Las Condes

timePlot(aire,pollutant=c("pm10p","pm10lc"),lwd=4,lty=1, main="PM10 en Pudahuel y Las Condes (ug/m^3)", group=T, avg.time="month")
#Es claro como se alcanzan mayores concentraciones de PM10 en Pudahuel

timePlot(aire,pollutant=c("pm25p","pm25lc"),lwd=4,lty=1, main="PM2.5 en Pudahuel y Las Condes (ug/m^3)", group=T, avg.time="month")
#Sucede lo mismo con el PM2.5 que con el PM10


timePlot(aire,pollutant=c("o3p","o3lc"),lwd=4,lty=1, main="O3 en Pudahuel y Las Condes (ppb)", group=T, avg.time="month")
#Para el caso del Ozono, se aprecian mayores concentraciones en Las Condes, pero #en invierno mayores en Pudahuel.



calendarPlot(aire,pollutant="pm10p", year=2011)
#Esta función es muy gráfica, y permite ver los dias con diferente promedio
#diarios de contaminación, PM10 en este caso
#Acá se ve como se alcanzan promedios diarios superiores a 250 (ug/m^3)
#En Mayo, Junio y Julio, que es un valor alto y dañino a la salud

calendarPlot(aire,pollutant="o3lc", year=2011)
#Caso contrario, el Ozono en Las Condes indica que el máximo promedio diario
#se da a los 40 (ppb), que es un valor alto y dañino a la salud


  
timeVariation(aire,pollutant=c("o3lc","o3p"), ylab="Concentración (ppb)", main="Concentraciones de O3 en Las Condes y Pudahuel")
#En esta gráfica se vé cláramente como en Las Condes
#se alcanzan mayores superiores de Ozono que en Pudahuel



timeVariation(aire,pollutant=c("pm10lc","pm10p"), ylab="Concentración (ppb)", main="Concentraciones de PM10 en Las Condes y Pudahuel")
#Caso contrario, se aprecian mayores concentraciones de PM10
#En Pudahuel, que en Las Condes


trendLevel(aire,pollutant="pm25p",y="wsp", main="Velocidad del Viento y PM2.5 en Pudahuel")
#Este gráfico es muy ilustrativo
#En él se ve como altos promedios diarios de PM2.5 se alcanzan
#A velocidades bajas, que varían desde la calma
#hasta 1 (m/s) aproximadamente


corPlot(aire, type="season")
#Finalmente, esta función permite obtener un correlograma
#bastante sencillo, en donde por ejemplo
#el PM10 de Pudahuel tiene R^2=81 con el PM2.5 de Pudahuel
#Sin embargo, con el PM10 de Las Condes R^2 es 30, en primavera



Una de las conclusiones es la democracia ambiental entre el PM10-PM2.5 y O3 en Pudahuel y Las Condes. Mientras en el sector poniente de la capital se alcanzan valores críticos y "visibles" sobre las normas, en verano tambien se alcanzan valores críticos, pero en el sector oriente, y es "invisible".

Encontré que esta librería es muy ilustrativa, permite comunicar los resultados de forma fácil y sobre todo, es muy fácil de usar. Espero ir a KCL a hacer mi doctorado. Ahí estoy en conversaciones!