Duncan Golicher’s weblog

Research, scripts and life in Chiapas

Archive for July 2012

Homicidios en Mexico

leave a comment »

El INEGI de Mexico publica datos socio-economicos compilados de diversas fuentes en su sitio.

Se puede descargar los datos aqui.

Los datos son disponibles libremente al publico, pero es un reto procesar datos complejos de este tipo. Aqui hay codigo en R para ayudar.

http://rpubs.com/dgolicher/976

Lo mas interesante del ejercicio con homicidios es resumido en este grafico. Incluyo la tabla al fondo de este documento con los datos procesados.

Es notable que el numero de homicidios al nivel nacional no ha cambiado mucho desde 2001. La tendendencia subyacente era por abajo antes del la guerra contra el narcotrafico. Aun en 2009 la tasa era menor que en 1998. No hay datos disponibles en el sitio de INEGI todavia para los años 2010 y 2011 pero seria interesante verlos. Tal vez los cambios no han sido tan dramaticos como mucha gente piensa. Este surgiere que la mayoria de los homicidios todavia no estan vinculados con el narco trafico.

Al mismo tiempo el mensaje no es reconfortante en absoluto. La tasa de homicidio al nivel nacional SIEMPRE ha sido espantosa. La tasa es muy por encima de lo aceptable. Para poner las cifras en contexto, en el Reino Unido en 2009 se reportaron 670 homicidios en un pais de alrededor de 60 millones de habitantes. O sea, alrededor de 1 homicidio por cada 100,000 de la población. En cambio la cifra por Mexico fue 40 en 1998, se bajo hacia 20 antes de la crisis con el narco-trafico pero actualmente es alrededor de 30 y ya subiendo de nuevo. La tasa es mas alto que lo reportado aqui para Mexico.

http://en.wikipedia.org/wiki/List_of_countries_by_intentional_homicide_rate

Es possible que los datos de INEGO sobre estima la tasa un poco. Las cifras son “presuntos” homicidios reportado al ministerio publico. Una porcentaje de los incidentes tal vez tenia otra causa. Al mismo tiempo es interesante comparar el numero de incidentes con el numero de condenados por el crimen (alrededor de 5 veces menor). Hay dos explicaciones possibles. Los asesinos en Mexico cometen multiples crimenes antes de ser condenados, o hay muchos asesinos que no se agarran nunca. Cualquier explicación es muy preocupante.

Las buenas noticias es que el estado de Chiapas ha mostrado una reducción constante en la tasa de homicidios desde los años 90. Curiosamente la ciudad de Mexico tampoco es un sitio tan peligrosa (en terminos relativos) como se hubiera inaginado. Aunque si hay muchos homicidios en el DF, la población de la cuidad es grande, entonces la tasa por capita es por debajo de muchos estados rurales como Oaxaca y Guerrero. De hecho, homicidio en Mexico es mas comun en areas rurales que en las ciudades (tomando en cuenta la población). Este surgiere que el homicidio y la pobreza estan estrechamente vinculados. Una forma de conseguir un pais mas seguro sería enfrentar la pobreza. Aun con sus problemas de disponibilidad de armas de fuego la tasa en Los Estados Unidos es alrededor de 5 homicidios por cada 100,000, o sea cinco veces mas alta que el Reino Unido pero 4 veces mas baja que Mexico. La tasa en Chile es parecido al Reino Unido. El pais mas seguro de Europa aprentemente es España.

NOTA. LA LEYENDA DEBE DECIR 100,000 no 10,000.


Cve_Entidad Desc_Entidad Hom1998 Hom1999 Hom2000 Hom2001 Hom2002 Hom2003 Hom2004 Hom2005 Hom2006 Hom2007 Hom2008 Hom2009 Hom2010
528 0 Total nacional 38 31 28 28 29 29 27 26 23 25 30 29
1202 1 Aguascalientes 19 17 14 15 18 18 18 22 23
7526 2 Baja California 24 27 19 18 18 17 19 14 31 122 24
10790 3 Baja California Sur 27 23 20 17 16 21 21 16 19 18 13
14054 4 Campeche 38 29 24 18 21 20 15 17 16 19 16 13
20376 5 Coahuila de Zaragoza 19 16 17 17 15 15 13 14 14 14 19 22
40476 6 Colima 34 29 26 28 22 23 20 18 16 17 19 17
46290 7 Chiapas 56 60 49 49 46 45 42 40 36 36 23 25
107278 8 Chihuahua 44 32 36 33 30 29 28 30 31 37 80 110
142162 9 Distrito Federal 22 21 18 20 20 19 18 18 17 18 17 16
151021 10 Durango 15 47 48 37 26 23 14 15 16 20 55 101
171626 11 Guanajuato 24 24 23 21 23 20 21 22 20 21 21 24
195803 12 Guerrero 60 56 59 54 47 40 33 36 40 41 44 60
237819 13 Hidalgo 28 26 22 22 20 15 15 18 15 15 16 15
281376 14 Jalisco 55 25 22 19 17 18 17 17 19
345827 15 México 50 49 46 46 45 44 42 37 17 17 19 19
410296 16 Michoacán de Ocampo 69 15 12 12 32 33 29 26 35 38 42 50
468641 17 Morelos 51 54 47 38 40 39 48 51 42 40 54 57
486188 18 Nayarit 49 27 33 32 21 20 19 23 35 36 35 35
497080 19 Nuevo León 14 14 13 15 13 13 12 15 15 18 16 15
523986 20 Oaxaca 46 56 66 72 66 70 72 68 41 45 36 25
815378 21 Puebla 39 33 33 30 30 29 26 21 21 22 22 21
927437 22 Querétaro 82 21 22 24 20 19 22 19 16 16 19
937331 23 Quintana Roo 54 55 67 54 58 52 37 25 24 34 49 53
942619 24 San Luis Potosí 23 24 24 18 18 12 18 16 12 17 21 26
972916 25 Sinaloa 45 47 42 44 43 43 44 48 51 52 68 72
982810 26 Sonora 54 42 33 34 28 28 28 35 31 36 37 38
1020247 27 Tabasco 19 12 11 9 14 16 6 4 8 21 26 24
1029631 28 Tamaulipas 40 37 27 23 20 28 27 30 29
1052276 29 Tlaxcala 16 34 46 50 50 41 40 39 34 34 36 29
1083590 30 Veracruz de Ignacio de la Llave 25 22 21 20 21 21 20 20 18 20 21 22
1192425 31 Yucatán 6 10 16 17 13 13 13 15 14 10
1247200 32 Zacatecas 28 20 21 20 22 20 20 21 16 19 13 15

Written by Duncan Golicher

July 22, 2012 at 7:33 am

Wettest June on record?

with one comment

On monday 2 July the UK Met office announced that June 2012 was the wettest on record.

How does the month really compare with previous years?

Here is an analysis in R that helps to show the patterns.

Click on this link to look at the analysis and R code

Written by Duncan Golicher

July 4, 2012 at 1:27 am

Posted in Uncategorized

A few useful R tricks

leave a comment »

As a result of running an introductory course on R I received queries on the following matters.

  1. How to import files with additional header lines.
  2. How to remove ALL non numeric characters from a column in one pass.
  3. How to add the position of the mean to boxplots.
  4. How to save multiple images in a file.
  5. How to use reshape to form tables with multiple measured variables.
  6.  How to paste numeric output into plot titles.

The code has been published here as my first test of the great new Knit html feature in Rstudio.

http://rpubs.com/dgolicher/727

The climate data downloaded from

http://www.metoffice.gov.uk/climate/uk/stationdata/

Here is a PDF showing some of the tricks.

https://dl.dropbox.com/u/2703650/R/NewRCourse/SomeRTricks.pdf

Or as an HTML  page.

https://dl.dropbox.com/u/2703650/R/NewRCourse/Rtricks.html

Here are some useful functions

### R code from vignette source ‘SomeRTricks.Rnw’
### Encoding: UTF-8

source(url(“http://tinyurl.com/Rexample/IntroFunctions.R”))

###################################################
### code chunk number 1: SomeRTricks.Rnw:92-93
###################################################
options(prompt=” “,continue=” “)

###################################################
### code chunk number 2: SomeRTricks.Rnw:96-97
###################################################
datasource<-”http://www.metoffice.gov.uk/climate/uk/stationdata/hurndata.txt&#8221;

###################################################
### code chunk number 3: SomeRTricks.Rnw:100-101 (eval = FALSE)
###################################################
## d<-read.table(datasource,skip=7)

###################################################
### code chunk number 4: SomeRTricks.Rnw:121-123
###################################################
d<-read.table(datasource,skip=7,fill=T,col.names=c(“Yr”,”Mon”,”tmax”,”tmin”,”af”,”rain”,”sun”,”comments”))
head(d)

###################################################
### code chunk number 5: SomeRTricks.Rnw:140-144
###################################################
clean<-function(x){
x<-as.character(x)
x<-gsub(“[^0-9,/.]“,”",x)
as.numeric(x)}

###################################################
### code chunk number 6: SomeRTricks.Rnw:150-152
###################################################
x<-”##%Meas126.34cm”
clean(x)

###################################################
### code chunk number 7: SomeRTricks.Rnw:159-161
###################################################
x<-”123.4cm^2″
clean(x)

###################################################
### code chunk number 8: SomeRTricks.Rnw:171-172
###################################################
d$Mon<-clean(d$Mon)

###################################################
### code chunk number 9: SomeRTricks.Rnw:179-182
###################################################
cleandf<-function(x){
x<-data.frame(lapply(x,clean))
x}

###################################################
### code chunk number 10: SomeRTricks.Rnw:185-186
###################################################
d<-cleandf(d)

###################################################
### code chunk number 11: SomeRTricks.Rnw:204-208
###################################################
library(car)
library(gplots)
Boxplot(rain~Mon,labels=Yr,data=d,col=”grey”)
plotmeans(rain~Mon,connect=F,add=T,data=d,n.label=F,barcol=”red”,col=”red”,pch=21)

###################################################
### code chunk number 12: SomeRTricks.Rnw:214-216
###################################################
Boxplot(tmax~Mon,labels=Yr,data=d,col=”grey”)
plotmeans(tmax~Mon,connect=F,add=T,data=d,n.label=F,barcol=”red”,col=”red”,pch=21)

###################################################
### code chunk number 13: SomeRTricks.Rnw:228-234
###################################################
library(mgcv)
Boxplot(rain~Mon,labels=Yr,data=d,col=”grey”)
mod<-gam(rain~s(Mon),data=d)
attach(d)
ablines2(mod,lwd=2,col=2,lty=2)
detach(d)

###################################################
### code chunk number 14: SomeRTricks.Rnw:243-244
###################################################
d<-d[d$Yr<2012,]

###################################################
### code chunk number 15: SomeRTricks.Rnw:250-255
###################################################
library(reshape)
d1<-melt(d,id=c(“Yr”,”Mon”),meas=c(“tmax”,”tmin”,”rain”))
d2<-data.frame(cast(d1,Yr~variable,mean))
head(d2)
str(d2)

###################################################
### code chunk number 16: SomeRTricks.Rnw:261-266
###################################################
plot(rain~tmin,data=d2)
mod<-lm(rain~tmin,data=d2)
attach(d2)
ablines(mod)
anova(mod)

###################################################
### code chunk number 17: SomeRTricks.Rnw:272-276
###################################################
plot(rain~tmax,data=d2)
mod<-lm(rain~tmax,data=d2)
ablines(mod)
anova(mod)

###################################################
### code chunk number 18: SomeRTricks.Rnw:283-288
###################################################
plot(rain~Yr,data=d2)
mod<-lm(rain~Yr,data=d2)
ablines(mod)
anova(mod)
confint(mod)

###################################################
### code chunk number 19: SomeRTricks.Rnw:294-299
###################################################
plot(tmin~Yr,data=d2)
mod<-lm(tmin~Yr,data=d2)
ablines(mod)
anova(mod)
confint(mod)

###################################################
### code chunk number 20: SomeRTricks.Rnw:303-308
###################################################
plot(tmax~Yr,data=d2)
mod<-lm(tmax~Yr,data=d2)
ablines(mod)
anova(mod)
confint(mod)

###################################################
### code chunk number 21: SomeRTricks.Rnw:316-320
###################################################
plot(acf(residuals(mod)))
library(lmtest)
dwtest(tmin~Yr,data=d2)

###################################################
### code chunk number 22: SomeRTricks.Rnw:329-331
###################################################
plot(acf(tmin))
detach(d2)

###################################################
### code chunk number 23: SomeRTricks.Rnw:340-346
###################################################
getstatdata<-function(x=”hurn”){
x1<-paste(“http://www.metoffice.gov.uk/climate/uk/stationdata/&#8221;,x,”data.txt”,sep=”")
d<-read.table(x1,skip=7,fill=T,col.names=c(“Yr”,”Mon”,”tmax”,”tmin”,”af”,”rain”,”sun”,”comments”))
d<-cleandf(d)
d<-data.frame(station=x,d)
d}

###################################################
### code chunk number 24: SomeRTricks.Rnw:353-356
###################################################
a<-c(“hurn”,”southampton”,”yeovilton”,”chivenor”,”camborne”,
“oxford”,”heathrow”,”eastbourne”,”manston”,”rossonwye”,”cardiff”,”cambridge”)
d<-lapply(a,getstatdata)

###################################################
### code chunk number 25: SomeRTricks.Rnw:361-364
###################################################
d<-do.call(“rbind”,d)
d<-d[!is.na(d$rain),]
d<-d[d$Yr<2012,]

###################################################
### code chunk number 26: SomeRTricks.Rnw:367-368 (eval = FALSE)
###################################################
## write.csv(d,file=”/home/duncan/climate.csv”,row.names=F)

###################################################
### code chunk number 27: SomeRTricks.Rnw:379-403
###################################################
rainmodels<-function(d)
{
d<-droplevels(d)
nm<-toupper(levels(d$station))
nm<-paste(nm,” Mean annual rain =”,round(mean(tapply(d$rain,d$Yr,sum)),0))

attach(d)
Boxplot(rain~Mon,labels=Yr,data=d,col=”grey”,main=nm)
mod<-gam(rain~s(Mon),data=d)
ablines2(mod,lwd=2,col=2,lty=2)
detach(d)
####################################
d1<-melt(d,id=c(“Yr”,”Mon”),meas=c(“rain”))
d2<-data.frame(cast(d1,Yr~variable,sum))
attach(d2)
####################################################
mod<-lm(rain~Yr)
an<-anova(mod)
pval<-round(an[5][1,],2)
nm<-paste(nm,”\n”,”P value=”,pval)
plot(rain~Yr,pch=21,bg=2,main=nm)
ablines(mod)
detach(d2)
}

###################################################
### code chunk number 28: SomeRTricks.Rnw:413-416
###################################################
pdf(“/home/duncan/rplots.pdf”)
lapply(split(d,d$station),rainmodels)
dev.off()

###################################################
### code chunk number 29: SomeRTricks.Rnw:420-427
###################################################
for(i in 1:22){
file=”/home/duncan/rplots.pdf”
cat(“\\includegraphics[page=",i,"]{“, file, “}”, sep=”")
if(i%%2==0){
cat(“\n\n”)
}
}

###################################################
### code chunk number 30: SomeRTricks.Rnw:439-464
###################################################
tminmodels<-function(d)
{
d<-droplevels(d)
nm<-toupper(levels(d$station))
nm<-paste(nm,” Mean annual minimum temp =”,round(mean(tapply(d$tmin,d$Yr,sum)),1))

attach(d)
Boxplot(tmin~Mon,labels=Yr,data=d,col=”grey”,main=nm)
mod<-gam(tmin~s(Mon),data=d)
ablines2(mod,lwd=2,col=2,lty=2)
detach(d)
####################################
d1<-melt(d,id=c(“Yr”,”Mon”),meas=c(“tmin”))
d2<-data.frame(cast(d1,Yr~variable,mean))
attach(d2)
####################################################
mod<-lm(tmin~Yr)
an<-anova(mod)
pval<-round(an[5][1,],4)
nm<-paste(nm,”\n”,”P value=”,pval)
nm<-paste(nm,”\n Increase per decade =”,10*round(coef(mod)[2],3))
plot(tmin~Yr,pch=21,bg=2,main=nm)
ablines(mod)
detach(d2)
}

###################################################
### code chunk number 31: SomeRTricks.Rnw:467-471
###################################################
pdf(“/home/duncan/rplots2.pdf”)
d<-d[!is.na(d$tmin),]
lapply(split(d,d$station),tminmodels)
dev.off()

###################################################
### code chunk number 32: SomeRTricks.Rnw:475-482
###################################################
for(i in 1:22){
file=”/home/duncan/rplots2.pdf”
cat(“\\includegraphics[page=",i,"]{“, file, “}”, sep=”")
if(i%%2==0){
cat(“\n\n”)
}
}

Written by Duncan Golicher

July 1, 2012 at 10:36 am

Follow

Get every new post delivered to your Inbox.

Join 51 other followers