FUENTE: Toda la información usada en este tutorial corresponde al equipo 00RTeam de la Universidad de Murcia y está disponible en http://gauss.inf.um.es/



Instrucciones

Para esta tarea deberás utilizar un fichero de datos paisesMundoRedC.csv que contiene la siguiente información sobre los diferentes países del mundo:

Enunciado

Lee el fichero de datos y asignarlo al objeto df. Comprueba que lo has leído bien.

df <- read.table( file = "http://gauss.inf.um.es/datos/paisesMundoRedC.csv", 
                  header = TRUE,
                  sep = ";",
                  dec = ".",
                  encoding = "UTF-8",
                  stringsAsFactors = FALSE )
head( df )
##                  Country                  EPI_regions
## AGO               Angola           Sub-Saharan Africa
## ALB              Albania    Central and Eastern Europ
## ARE United Arab Emirates Middle East and North Africa
## ARG            Argentina    Latin America and Caribbe
## ARM              Armenia Middle East and North Africa
## AUS            Australia    East Asia and the Pacific
##               GEO_subregion Population2005 GDP_capita.MRYA   landarea  EPI
## AGO         Southern Africa        15941.4          2314.4 1251895.62 39.5
## ALB          Central Europe         3129.7          4955.3   28346.12 84.0
## ARE       Arabian Peninsula         4495.8         22698.3   74776.60 64.0
## ARG           South America        38747.2         13652.4 2736296.00 81.8
## ARM          Eastern Europe         3016.3          5011.0   28272.73 77.8
## AUS Australia + New Zealand        20155.1         30677.9 7634643.84 79.8
##     FOREST FISH AGRICULTURE
## AGO   95.4 87.3        61.3
## ALB  100.0 62.5        75.6
## ARE  100.0 50.0        72.3
## ARG   75.9 58.8        79.9
## ARM   70.1   NA        94.2
## AUS  100.0 96.7        78.7

Apartado 1

  1. (0.5 puntos) ¿Cómo son los datos? ¿Qué estructura tienen? ¿Qué información contiene la variable GEO_subregion? Comentalo adecuadamente.

La función dim( ) examina las dimensiones del data frame. Nos da información sobre el número de casos o registros (filas) y el número de variables (columnas). Nuestro data frame df tiene 10 variables y 149 registros.

dim( df )
## [1] 149  10

La función str( ) permite examinar la estructura de los datos que contiene el data frame. Esta función proporciona información muy completa: qué tipo de objeto es tu base de datos (en nuestro caso, un data frame), número de observaciones (149 obs.) y número de variables (10 variables), y detalle de cada variable (su nombre, tipo o naturaleza, y el valor para las primeras observaciones).

str( df )
## 'data.frame':    149 obs. of  10 variables:
##  $ Country        : chr  "Angola" "Albania" "United Arab Emirates" "Argentina" ...
##  $ EPI_regions    : chr  "Sub-Saharan Africa" "Central and Eastern Europ" "Middle East and North Africa" "Latin America and Caribbe" ...
##  $ GEO_subregion  : chr  "Southern Africa" "Central Europe" "Arabian Peninsula" "South America" ...
##  $ Population2005 : num  15941 3130 4496 38747 3016 ...
##  $ GDP_capita.MRYA: num  2314 4955 22698 13652 5011 ...
##  $ landarea       : num  1251896 28346 74777 2736296 28273 ...
##  $ EPI            : num  39.5 84 64 81.8 77.8 79.8 89.4 72.2 54.7 78.4 ...
##  $ FOREST         : num  95.4 100 100 75.9 70.1 100 100 100 0 100 ...
##  $ FISH           : num  87.3 62.5 50 58.8 NA 96.7 NA NA NA 47.4 ...
##  $ AGRICULTURE    : num  61.3 75.6 72.3 79.9 94.2 78.7 76.4 71.4 95.9 80.8 ...
summary( df$GEO_subregion ) # detalle de la variable
##    Length     Class      Mode 
##       149 character character
table( df$GEO_subregion ) # tabla de frecuencias
## 
##       Arabian Peninsula Australia + New Zealand               Caribbean 
##                       5                       2                       5 
##          Central Africa            Central Asia          Central Europe 
##                       6                       5                      16 
##          Eastern Africa          Eastern Europe                 Mashriq 
##                       7                       7                       4 
##            Meso America           North America          Northeast Asia 
##                       8                       2                       5 
##         Northern Africa           South America              South Asia 
##                       5                      11                       6 
##         South East Asia           South Pacific         Southern Africa 
##                       8                       3                      10 
##          Western Africa          Western Europe    Western Indian Ocean 
##                      13                      19                       2

Apartado 2

  1. (0.5 puntos) Utiliza el siguiente código para seleccionar de nuestro conjunto de datos la información relativa a los países africanos. Será el conjunto de datos con el que trabajaremos a partir de ahora dfA.
indicesAfrica <- grep( "Africa", df$GEO_subregion ) 

dfA <- df[ indicesAfrica, ]

Como veis la función grep( ) busca en la variable GEO_subregion aquellas observaciones que contienen la palabra Africa y nos devuelve sus índices.

str( dfA )
## 'data.frame':    41 obs. of  10 variables:
##  $ Country        : chr  "Angola" "Burundi" "Benin" "Burkina Faso" ...
##  $ EPI_regions    : chr  "Sub-Saharan Africa" "Sub-Saharan Africa" "Sub-Saharan Africa" "Sub-Saharan Africa" ...
##  $ GEO_subregion  : chr  "Southern Africa" "Eastern Africa" "Western Africa" "Western Africa" ...
##  $ Population2005 : num  15941 7548 8439 13228 1765 ...
##  $ GDP_capita.MRYA: num  2314 630 1016 1143 11313 ...
##  $ landarea       : num  1251896 25227 115828 275748 559516 ...
##  $ EPI            : num  39.5 54.7 56.1 44.3 68.7 56 65.2 63.8 47.3 69.7 ...
##  $ FOREST         : num  95.4 0 17.8 64.5 79.2 97.2 100 78.4 94.8 98.4 ...
##  $ FISH           : num  87.3 NA 91.5 NA NA NA 91.2 52.4 46.3 74.1 ...
##  $ AGRICULTURE    : num  61.3 95.9 88.2 87.7 72.3 71.8 88.7 69.9 70.8 99.1 ...

Apartado 3

  1. (1 punto) Codifica adecuadamente las variables categóricas de dfA, quizás empleando la función factor( ).

Las variables Country, EPI_regions y GEO_subregion son de tipo chr cadena “character” (alfanumérico). Es necesario transformarlas a factor, de forma que R reconozca cada una de sus clases como niveles de las variables.

dfA$Country <- factor( dfA$Country ) # transformación de los datos chr a factor
dfA$EPI_regions <- factor( dfA$EPI_regions ) # transformación de los datos chr a factor
dfA$GEO_subregion <- factor( dfA$GEO_subregion ) # transformación de los datos chr a factor

Comprobamos que ahora ya son variables categóricas y vemos también cuáles son sus niveles. Por ejemplo para GEO_subregion:

str( dfA$GEO_subregion ) # te dice qué es el objeto
##  Factor w/ 5 levels "Central Africa",..: 4 2 5 5 4 1 5 1 1 1 ...
levels( dfA$GEO_subregion ) # muestra todos los niveles de la variable categórica
## [1] "Central Africa"  "Eastern Africa"  "Northern Africa" "Southern Africa"
## [5] "Western Africa"

Apartado 4

  1. (1 punto) Haz un resumen del conjunto de datos empleando la función summary( ). Comenta los resultados obtenidos

La función summary( ) proporciona estadísticos descriptivos para variables cuantitativas (rangos -mínimo, máximo-, primer y tercer cuartil, mediana y media), y las frecuencias absolutas para las variables categóricas o cualitativas.

summary( dfA )
##          Country                         EPI_regions         GEO_subregion
##  Algeria     : 1   Middle East and North Africa: 5   Central Africa : 6   
##  Angola      : 1   Sub-Saharan Africa          :36   Eastern Africa : 7   
##  Benin       : 1                                     Northern Africa: 5   
##  Botswana    : 1                                     Southern Africa:10   
##  Burkina Faso: 1                                     Western Africa :13   
##  Burundi     : 1                                                          
##  (Other)     :35                                                          
##  Population2005     GDP_capita.MRYA      landarea            EPI       
##  Min.   :   793.1   Min.   :  629.8   Min.   :  17410   Min.   :39.10  
##  1st Qu.:  5525.5   1st Qu.: 1008.1   1st Qu.: 147882   1st Qu.:51.30  
##  Median : 12883.9   Median : 1312.8   Median : 403759   Median :59.40  
##  Mean   : 21030.0   Mean   : 2506.2   Mean   : 642219   Mean   :59.16  
##  3rd Qu.: 28816.2   3rd Qu.: 2299.1   3rd Qu.: 968072   3rd Qu.:69.00  
##  Max.   :131529.7   Max.   :11313.3   Max.   :2492385   Max.   :78.10  
##                                                                        
##      FOREST            FISH        AGRICULTURE   
##  Min.   :  0.00   Min.   :23.90   Min.   :53.00  
##  1st Qu.: 73.30   1st Qu.:72.60   1st Qu.:69.30  
##  Median : 86.40   Median :79.10   Median :73.90  
##  Mean   : 78.51   Mean   :75.11   Mean   :74.87  
##  3rd Qu.: 98.40   3rd Qu.:87.05   3rd Qu.:81.60  
##  Max.   :100.00   Max.   :91.60   Max.   :99.10  
##                   NA's   :14

COMENTARIOS:

Apartado 5

  1. (1 punto) Selecciona las variables Population2005, landarea y GDP_capita.MRYA y calcula los descriptivos principales según el factor GEO_subregion.

Para la presentación de los resultados en una tabla usaremos la función tabular( ) (que es parte de la librería tables). Para presentar una tabla en un documento web:

  1. Primero se crea : definición de la tabla con tabular( )

  2. Después se imprime : visualización de la tabla con la función html( tt ) (que crea la tabla en código HTML).

    AVISO: Para una correcta visualización de las tablas tenéis que poner en el chunk la expresión results = 'asis'

library( tables ) # Presentación de tablas 

1. Crear o definir la tabla:

Calcular los descriptivos principales para las variables Population2005, landarea y GDP_capita.MRYA, según el factor GEO_subregion.

ttDescri <- tabular( GEO_subregion ~ # para cada uno de los niveles de este factor
                   ( Population2005 + landarea + GDP_capita.MRYA ) *  # de estas variables 
                   ( mean + sd + min + max ) +  # mostrar sus descriptivos
                   ( n = 1 ), # el núm. total de observaciones
                   data = dfA ) # base de datos que usamos

2. Visualizar la tabla:

Como estamos en un documento web, para visualizar la tabla usamos la función html( ).

# {r, results='asis'}

html( ttDescri,
      options = htmloptions( HTMLcaption = "DESCRIPTIVOS PARA GEO_subregion",
                             justification = "c",
                             pad = TRUE ) )
DESCRIPTIVOS PARA GEO_subregion
  Population2005 landarea GDP_capita.MRYA  
GEO_subregion mean sd min max mean sd min max mean sd min max n
Central Africa 15507 21283  1383.8  57549  875595  786168 265146 2313414 2038 1914.5  700.0  5835  6
Eastern Africa 23183 27067   793.1  77431  300392  413610  20904 1123717 1163  417.6  629.8  1982  7
Northern Africa 36940 23147 10102.5  74033 1262919 1079434 147881 2492385 4912 2209.6 2050.2  7758  5
Southern Africa 16388 15487  1032.4  47432  676391  418233  17410 1251896 4057 4095.1  631.5 11313 10
Western Africa 19871 34051  1586.3 131530  453551  453694  34106 1248146 1327  561.8  700.3  2299 13

Apartado 6

  1. (2 puntos) Calcula para la variable AGRICULTURE la media, mediana, desviación típica, el mínimo y el máximo según el factor GEO_subregion. Pon etiquetas representativas a las columnas.
tt <- tabular( ( REGIÓN = GEO_subregion ) ~ 
             ( AGRICULTURA = AGRICULTURE ) *
             ( (Media = mean) + 
               (Sd = sd) + 
               (Mínimo = min) + 
               (Máximo = max) + 
               (Mediana = median) ) +
             ( n = 1 ), 
             data = dfA )

tt # mostrar el resultado
##                                                             
##                  AGRICULTURA                                
##  REGIÓN          Media       Sd     Mínimo Máximo Mediana n 
##  Central Africa  79.28       11.174 69.9   99.1   76.75    6
##  Eastern Africa  77.41       12.403 54.4   95.9   78.00    7
##  Northern Africa 66.04        8.136 53.0   74.8   68.40    5
##  Southern Africa 69.74        4.681 61.3   74.7   71.80   10
##  Western Africa  78.82        7.131 65.9   88.7   78.80   13

Apartado 7

  1. (1 punto) Imprime la tabla de forma elegante.

AVISO: Para una correcta visualización de las tablas tenéis que poner en el chunk la expresión results = 'asis'

# {r, results='asis'}

html( tt,
      options = htmloptions( HTMLcaption = "AGRICULTURA",
                             justification = "c",
                             pad = TRUE ) )
AGRICULTURA
  AGRICULTURA  
REGIÓN Media Sd Mínimo Máximo Mediana n
Central Africa 79.28 11.174 69.9 99.1 76.75  6
Eastern Africa 77.41 12.403 54.4 95.9 78.00  7
Northern Africa 66.04  8.136 53.0 74.8 68.40  5
Southern Africa 69.74  4.681 61.3 74.7 71.80 10
Western Africa 78.82  7.131 65.9 88.7 78.80 13

Apartado 8

  1. (1 punto) Haz un gráfico de dispersión para estudiar la relación entre el tamaño de la población de cada país (Population2005) y el producto interior bruto (GDP_capita.MRYA). Colorea los puntos según el factor GEO_subregion.
library( ggplot2 ) # Hacer gráficos
ggplot( data = dfA, 
        aes( x = Population2005, y = GDP_capita.MRYA ) ) + 
  geom_point( aes( colour = GEO_subregion ), size = 2 ) + # Colorea los puntos en función de las subregiones
  scale_colour_discrete( name = "Subregiones africanas",
                         breaks = c("Northern Africa", "Southern Africa", 
                                    "Eastern Africa", "Western Africa", "Central Africa"),
                         labels = c("Norte", "Sur", "Este", "Oeste", "Central") ) + # texto de la leyenda
  labs( title = "PIB según población y subregiones (2005)",
        x = "Población",
        y = "PIB") # etiquetas para título y ejes

Apartado 9

  1. (2 puntos) Realiza un gráfico de tu interés para el conjunto de datos empleando la librería ggplot2

La variable EPI es el Environmental Performance Index. Este índice puntúa a cada país entre 0 y 100 según sus resultados medioambientales. Vamos a hacer un gráfico que muestre un ranking de los diez países africanos según el índice EPI, de forma que los países Country aparezcan ordenados por su puntuación global. Para cada país también mostraremos a qué region pertenece EPI_regions.

library( dplyr ) # Manipulación de data frames
dfA_EPItop10 <- top_n( dfA, 10, EPI) # ordenación de los 10 primeros según EPI
# Gráfico base
ggEPI <- ggplot( dfA_EPItop10, 
                aes( x = reorder( Country, EPI ),
                     y = EPI, 
                     fill = EPI_regions ) ) +
          geom_bar( stat = "identity" ) +
          scale_fill_manual( name = "Región",
                             labels = c( "Norte de África", "África Subsahariana" ),
                             values = c( "#00AFBB", "#E7B800" ) ) +
          ylim( 0, 100 ) +
          labs( title = "Ranking del índice EPI",
                subtitle = "(índice 0 - 100)") +
          coord_flip( ) 
# Editarlo 
ggEPI + theme( axis.title.x = element_blank(),
               axis.title.y = element_blank(),
               axis.text.x = element_text(size = 8),
               axis.text.y = element_text(size = 12),
               plot.title = element_text( size = 20, colour = "grey39", face = "bold"),
               plot.subtitle = element_text( size = 15, colour = "grey39"),
               legend.text = element_text(size = 10),
               legend.title = element_text(size = 12),
               legend.position = "right" )