Creemos algunos indicadores e interpretemos sus resultados
# Subamos la data; esta en formato .csv y la tengo guardada
# en una unidad externa
es<- read.csv("D:/clasesInsumos/esCantidad2.txt",
stringsAsFactors=FALSE)
#revisemos los primeros 6 casos
head(es)
## Anios Total Oficial Privada
## 1 1980 74 49 25
## 2 1981 78 51 27
## 3 1982 83 54 29
## 4 1983 90 56 34
## 5 1984 90 56 34
## 6 1985 91 57 34
# verifiquemos que tipo de data he obtenido
dim(es) # 26 obervaciones y 4 variables
## [1] 26 4
# veamos que tipo de variables tiene nuestro objeto
sapply(es, function(tipo) class(tipo))
## Anios Total Oficial Privada
## "integer" "integer" "integer" "integer"
# voy a cambiar la variable 'Anios' de "integer" a "date"
# para ello extraigo el valor con la funcion strptime()
# posteriormente convierto el resultado en fecha.
# el codigo me va a añadir informacion sobre mes y dia,
# como no se la doy, me toma como mes y dia el que corresponde a hoy.
# aplico luego la funcion as.Date()
es$Anios <-as.Date(strptime(es$Anios, '%Y'))
head(es)
## Anios Total Oficial Privada
## 1 1980-11-20 74 49 25
## 2 1981-11-20 78 51 27
## 3 1982-11-20 83 54 29
## 4 1983-11-20 90 56 34
## 5 1984-11-20 90 56 34
## 6 1985-11-20 91 57 34
# creemos el grafico
plot(es$Total ~ es$Anios, type='l')
Creemos ahora las tasas de variaciones tanto del total de las instituciones como de las ioes e ipes
# recordemos la formula de la tasa de variacion
# (f2-f1)/f1*100
# hay una funcion en R que nos permite calcular sin problema
# diferencias como las que nos interesa aqui diff()
diff(es$Total)
## [1] 4 5 7 0 1 2 3 0 7 3 2 2 2 0 0 5 13 10 6 0 4 8 5
## [24] 5 1
# podemos comprobar que este es nuestro resultado deseado,
# produciendo 'manualmente' las cinco primeras diferencias:
es$Total[2] - es$Total[1]; es$Total[3] - es$Total[2]; es$Total[4] - es$Total[3]; es$Total[5] - es$Total[4]
## [1] 4
## [1] 5
## [1] 7
## [1] 0
# ahora solo tenemos que dividir entre cada dato anterior:
diff(es$Total)/es$Total*100
## [1] 5.4054054 6.4102564 8.4337349 0.0000000 1.1111111 2.1978022
## [7] 3.2258065 0.0000000 7.2916667 2.9126214 1.8867925 1.8518519
## [13] 1.8181818 0.0000000 0.0000000 4.4642857 11.1111111 7.6923077
## [19] 4.2857143 0.0000000 2.7397260 5.3333333 3.1645570 3.0674847
## [25] 0.5952381 2.3668639
# comprobemos nuevamente que este es el resultado que buscamos:
(es$Total[2] - es$Total[1])/ es$Total[1]*100
## [1] 5.405405
# uno mas
(es$Total[3] - es$Total[2])/es$Total[2] *100
## [1] 6.410256
# Teniendo claro la forma en que trabaja la funcion dif()
# creemos las tasas de variaciones que nos interesan (vamos
#a recibir una advertencia, aqui la hemos suprimido)
es<-transform(es, varTotal = diff(es$Total)/es$Total*100,
varIOES = diff(es$Oficial)/es$Oficial*100,
varIPES = diff(es$Privada)/es$Privada*100)
es
## Anios Total Oficial Privada varTotal varIOES varIPES
## 1 1980-11-20 74 49 25 5.4054054 4.081633 8.000000
## 2 1981-11-20 78 51 27 6.4102564 5.882353 7.407407
## 3 1982-11-20 83 54 29 8.4337349 3.703704 17.241379
## 4 1983-11-20 90 56 34 0.0000000 0.000000 0.000000
## 5 1984-11-20 90 56 34 1.1111111 1.785714 0.000000
## 6 1985-11-20 91 57 34 2.1978022 0.000000 5.882353
## 7 1986-11-20 93 57 36 3.2258065 1.754386 5.555556
## 8 1987-11-20 96 58 38 0.0000000 -3.448276 5.263158
## 9 1988-11-20 96 56 40 7.2916667 3.571429 12.500000
## 10 1989-11-20 103 58 45 2.9126214 -1.724138 8.888889
## 11 1990-11-20 106 57 49 1.8867925 0.000000 4.081633
## 12 1991-11-20 108 57 51 1.8518519 1.754386 1.960784
## 13 1992-11-20 110 58 52 1.8181818 0.000000 3.846154
## 14 1993-11-20 112 58 54 0.0000000 0.000000 0.000000
## 15 1994-11-20 112 58 54 0.0000000 0.000000 0.000000
## 16 1995-11-20 112 58 54 4.4642857 1.724138 7.407407
## 17 1996-11-20 117 59 58 11.1111111 8.474576 13.793103
## 18 1997-11-20 130 64 66 7.6923077 3.125000 12.121212
## 19 1998-11-20 140 66 74 4.2857143 1.515152 6.756757
## 20 1999-11-20 146 67 79 0.0000000 1.492537 -1.265823
## 21 2000-11-20 146 68 78 2.7397260 4.411765 1.282051
## 22 2001-11-20 150 71 79 5.3333333 1.408451 8.860759
## 23 2002-11-20 158 72 86 3.1645570 1.388889 4.651163
## 24 2003-11-20 163 73 90 3.0674847 0.000000 5.555556
## 25 2004-11-20 168 73 95 0.5952381 0.000000 1.052632
## 26 2005-11-20 169 73 96 2.3668639 2.739726 2.083333
Comparemos las gráficas con cifras absolutas con respecto a las variaciones:
par(mfrow=c(2,1))
plot(es$Total ~ es$Anios, type='l')
plot(es$varTotal ~ es$Anios, type='l')
Observe cómo obtenemos una informacion totalmente distintas si en lugar de las cifras absolutas empleamos la tasa de variacion. El gráfico de cifras absolutas nos indica que hay un crecimiento sostenido de las instituciones de educación superior. Eso es cierto. Sin embargo, cuando analizamos cual fue el comportamiento año a año del número de instiuciones de educación superior observamos que hubo años en que el numero no creció,en otros, desaparecieron instituciones en tanto que en otros años hubo un crecimiento que podríamos considerar como explosivo de instituciones de educación superior.
Hacia 1983 se produce una caída en el número de instituciones, luego, a finales de los 80 se produce un incremento lento, que possteriormente se dispara para decaer nuevamente a principio de los 90. Entre 1995 y 1997 se produce el mayor crecimiento en el número de instituciones de educación superior en los 26 años analizados, que luego se desacelera hasta caer por completo hacia 1998. En el 2000 se producen nuevos incrementos más bien tímidos e irregularen el número de instituciones.
Veamos ahora el porcentaje de instituciones de educacion superior
# reduzcamos la cantidad de decimales a 1 cifra usando la
# funcion round()
es <- transform(es,
porIOES = round(es$Oficial/es$Total*100,1),
porIPES = round(es$Privada/es$Total*100,1))
Vamos a graficar esta información usando una visualización no demasiado útil. Después trabajaremos algunas gráficas que son más convenientes para mostrar la evolución porcentual de una variable, en el tiempo.
# creamos el grafico con la primera variable
# fijamos el limite del eje y para que incluya todos
#los valores de las dos variables
plot(es$porIOES ~ es$Anios, type='l', ylim=c(33, 70))
#agregamos la segunda variable con un color distinto
lines(es$porIPES~ es$Anios, col='blue')
# agregamos leyenda
legend('topright', col=c('black', 'blue'),
c('IOES', 'IPES'),
lty=1)
Interprete el gráfico. Por ahora estamos haciendo gráficos exploratorios, por tanto no estamos incluyendo información que sería de gran importancia si quisieramos incluir el gráfico en un informe.
Vamos a crear ahora otra tasa muy usada, la densidad poblacional. Aquí, en el numerador colocamos el total de la población y en el denominador el área. El resultado lo interpretamos en habitantes por kilómetros cuadros (o habitante por el tipo de medida de superficie empleado). Aprovecharemos tambien para aprender nuevas funciones
#leemos un archivo que ha sido exportado desde excel en
# en formato csv. En esos casos y como en nuestro pais
# se emplea la coma como separador de decimales, se
# emplea el punto y coma para saparar los valores.
#Tenemos que decirle eso a R para que lea la data correctamente
densidad2002 <- read.csv("D:/clasesInsumos/clase1/caracas_parroquias_densidadpoblacio2002.csv",
sep=";", dec=",",
stringsAsFactors=FALSE)
Los nombresde las parroquias tienen acento, por ello, aparecen signos extraños. R los lee:
densidad2002[1]
## parroquia
## 1 Altagracia
## 2 Antimano
## 3 Candelaria
## 4 Caricuao
## 5 Catedral
## 6 Coche
## 7 El Junquito
## 8 El Paraíso
## 9 El Recreo
## 10 El Valle
## 11 La Pastora
## 12 La Vega
## 13 Macarao
## 14 San Agustín
## 15 San Bernardino
## 16 San José
## 17 San Juan
## 18 San Pedro
## 19 Santa Rosalía
## 20 Santa Teresa
## 21 Sucre
## 22 23 de Enero
pero posiblemente al utilizar algun paquete para hacer análisis, podríamos tener problemas. Intentemos cambiar esos nombres. En otras palabras, es necesario limpiar la data antes de hacer cualquier análisis:
# utilizamos la funcion grep() para ubicar el nombre que deseamos, en este caso las vocales acentuadas:
grep('í', densidad2002$parroquia, perl=T, value=TRUE)
## [1] "El Paraíso" "San Agustín" "Santa Rosalía"
# con la funcion gsub() intentaremos cambiar la i acentuada
# le indicamos a la funcion en primer lugar que queremos cambiar,
# le decimos por que cosa la queremos cambiar
# le decimos donde debe buscar
gsub('í', 'i', densidad2002$parroquia)
## [1] "Altagracia" "Antimano" "Candelaria" "Caricuao"
## [5] "Catedral" "Coche" "El Junquito" "El Paraiso"
## [9] "El Recreo" "El Valle" "La Pastora" "La Vega"
## [13] "Macarao" "San Agustin" "San Bernardino" "San José"
## [17] "San Juan" "San Pedro" "Santa Rosalia" "Santa Teresa"
## [21] "Sucre" "23 de Enero"
#para que el cambio se produzca, debemos cambiar la variable
densidad2002$parroquia <- gsub('í', 'i', densidad2002$parroquia)
#Eliminamos la e acentuada
densidad2002$parroquia <- gsub('é', 'e', densidad2002$parroquia)
#acortamos '23 de Enero' a simplemente 'veintitres'
densidad2002$parroquia <- gsub('23 de Enero', 'veintitres', densidad2002$parroquia)
#llevamos todos los nombres a minuscula
densidad2002$parroquia <- tolower(densidad2002$parroquia)
# verificamos los cambios
head(densidad2002)
## parroquia hombres mujeres superficie
## 1 altagracia 20680 22266 3.7
## 2 antimano 73638 72698 29.5
## 3 candelaria 28488 32038 1.2
## 4 caricuao 79319 83457 24.8
## 5 catedral 2649 2770 1.0
## 6 coche 28679 28510 13.0
#Agreguemos la variable total sumando las variables
# hombre y mujer, si bien podriamos hacer los calculos
# directamente, pero hagamos el codigo mas legible.
# creamos tambien la variable densidad poblacional
densidad2002 <-transform(densidad2002,
totalPoblacion =hombres+mujeres)
densidad2002 <-transform(densidad2002,
densidad = round(totalPoblacion/superficie))
Podemos crear ahora grupos de parroquias según la densidad poblacional. Usemos un cluster jerárquico:
#creamos la distancia
denDis <- dist(densidad2002$densidad)
# generamos el cluster
denHcl <-hclust(denDis)
# generamos el cluster
plot(denHcl, labels= densidad2002$parroquia)
# obtengamos 4 grupos de esta clasificacion
rect.hclust(denHcl, k=4, border='darkred')
Note que hemos creado un índice con base en la densidad poblacional. Podemos indicar que hay, en este caso, cuatro grupos de parroquias caracterizado por:
densidad poblacional extrema, La Candelaria;
densidad poblacional alta: 23 de Enero, Santa Teresa, San Agustin y San Juan;
densidad poblacional media: San Pedro, El Paraiso, La Vega, Altagracia, La Pastora, San José, y Santa Rosalia
denidad poblacional baja: El Junquito, Macarao Caricuao, Sucre, Catedral, El Recreo, San Bernardino, Coche, Antimano y el Valle.
Quizá sea conveniente dividir este último grupo, pues la situació de El Junquito y Macarao definitivamente no es similar a la de San Bernardino, por ejemplo. Sin embargo, podemos captar la utilidad de la herramienta empleada.