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:

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.