2 nov 2019

Resolviendo un examen de introducción a R


Universidad Autónoma de Santo Domingo
Parcial 2. Seminario de investigación | noviembre 2019

1.       Introducción a la programación en R. Dados los vectores: edad<-c(18,12,17,22,16,24) y mujer<-c(0,0,0,1,1,1) [1=mujer] (5 punto cada una).

1.1. Obtener mediante el uso de operadores lógicos, un vector llamado edadMM con las edades de las mujeres menores de edad [1pt.].

edad<-c(18,12,17,22,16,24)
mujer<-c(0,0,0,1,1,1)

edadMM <- edad[mujer==1 & edad>17]
edadMM
[1] 22 24

1.2. Indique en cuales posiciones se encuentran las mujeres menores de edad [1pt.].

which(mujer==1 & edad<=17)
[1] 5

1.3. Usando la función grep, recupere todas las edades que inicien con 1 [1pt.].

edad[grepl("^1.",edad)]
[1] 18 12 17 16

1.4. Obtenga el promedio de edad para hombres mayores de 15 años [1pt.].

mean(edad[mujer==0 & edad>15])
[1] 17.5

1.5. Cree un data.frame llamado seminario1 con los vectores indicados [1pt.].

seminario1 <- data.frame(edad, mujer, edadMM)
seminario1
  edad mujer edadMM
1   18     0     22
2   12     0     24
3   17     0     22
4   22     1     24
5   16     1     22
6   24     1     24


2.       Estadística descriptiva. Utilice la base de datos iris, disponible en R, para realizar las siguientes tareas [5 pts.]:

2.1. Verifique en qué posición e indique (mediante indexación numérica) a cual especie corresponde la flor con la menor longitud del pétalo (petal.length) [1pt.].

attach(iris)
names(iris)

#Posición
pos <- which(Petal.Length == min(Petal.Length))
pos
[1] 23

Species[pos]
[1] setosa
Levels: setosa versicolor virginica

2.2. Obtener el promedio de la longitud del pétalo (Petal.Length), según la especie (Species) ¿Puedo a partir de esta comparación establecer un efecto causal entre las variables? [1pt.]

aggregate(Petal.Length, list(Species), mean)
   Group.1     x
1     setosa 1.462
2 versicolor 4.260
3  virginica 5.552

2.3. Obtenga el promedio de sepal.length para aquellas plantas de la especie virginica que tengan una longitud de pétalo (Petal.Length) por encima del promedio. [1pt. + 1 bono]  

mean(Sepal.Length[Species=="virginica" & Petal.Length>mean(Petal.Length)])
[1] 6.588

2.4. Obtenga el gráfico de correlación entre sepal.length y Petal.Length, luego interprete sus resultados ¿puedo indicar independencia entre estas variables? [1pt.]. 

plot(Sepal.Length,Petal.Length)

2.5. Mediante variables binarias (vectores lógicos) indique que cantidad y porcentaje de las flores observadas tienen una Petal.Length a más de dos desviaciones de su media [1pt.].

zx <- (Petal.Length - mean(Petal.Length ))/sd(Petal.Length )

# Cantidad
sum(abs(zx)>2)
[0] 0

# porcentaje
mean(abs(zx)>2)
[0] 0


3.       Manejo de base de datos. Utilice el paquete dplyr para responder las siguientes preguntas [8 pts.].

3.1. Utilice la data CO2, disponible en R, para obtener las siguientes representaciones por grupo para las categorías de las plantas (Plant): i) mayor nivel de contaminación (conc); ii) mínimo nivel de contaminación (conc), iii) porcentaje y iv) número de plantas con niveles de contaminación por encima del promedio global [4pt.]. 

library(dplyr)
CO2 %>%
  group_by(Plant) %>%
  select(Plant,conc) %>%
   summarise(mayorn = max(conc),
          minin = min(conc),
          "número" = sum(conc>mean(conc)),
            porcentaje = mean(conc>mean(conc)))

# A tibble: 12 x 5
   Plant mayorn minin número porcentaje
   <ord>  <dbl> <dbl>  <int>      <dbl>
 1 Qn1     1000    95      3      0.429
 2 Qn2     1000    95      3      0.429
 3 Qn3     1000    95      3      0.429
 4 Qc1     1000    95      3      0.429
 5 Qc3     1000    95      3      0.429
 6 Qc2     1000    95      3      0.429
 7 Mn3     1000    95      3      0.429
 8 Mn2     1000    95      3      0.429
 9 Mn1     1000    95      3      0.429
10 Mc2     1000    95      3      0.429
11 Mc3     1000    95      3      0.429
12 Mc1     1000    95      3      0.429

3.2. Utilice la base de datos econmath, de la librería Wooldrige, recodificar la variable de horas de estudios en los grupos 0-5; 6-15; y >15 y obtenga: i) edad promedio (age), horas de trabajo promedio (work), la calificación mediana (colgpa) y el número total de observaciones por grupo. Segmente sus resultados por sexo (male). Explique brevemente sus resultados [4pt.].

library(dplyr)
library(wooldridge)

econmath %>%
  mutate(Rstudio = case_when(
                    between(study, 0, 5) ~ "0-5",
                    between(study, 6, 15) ~ "6-15",
                    study > 15 ~ ">15"))   %>%
  group_by(Rstudio, male) %>%
  summarise(EdadMedia = mean(age),
            TrabajoM = mean(work),
            CalificaM = median(colgpa),
            ObsTotal = n())

# A tibble: 7 x 6
# Groups:   Rstudio [4]
  Rstudio  male EdadMedia TrabajoM CalificaM ObsTotal
  <chr>   <int>     <dbl>    <dbl>     <dbl>    <int>
1 >15         0      19.4     9.29      2.84      150
2 >15         1      19.5     7.16      2.88      116
3 0-5         0      19.6    14.0       3.09       23
4 0-5         1      19.3     7.78      2.67       68
5 6-15        0      19.3     9.81      2.81      255
6 6-15        1      19.5     7.42      2.8       242
7 NA          1      19.5     6         3.20        2

4.       Datos atípicos. De la librería de Wooldrige, utilice la data wage1 para verificar [7 pts.]:
4.1. Verifique que porcentaje de los salarios (wage) observados se encuentran a más de 1.96 desviaciones estándar de su promedio.

library(wooldridge)
mean(abs(scale(wage1$wage))>1.96)
[1] 0.04752852

4.2. Utilice el criterio de Tukey para identificar los posibles datos atípicos de la variable salario (wage).
# ---------------------------
attach(wage1)
q1 <- quantile(wage, 0.25)
q3 <- quantile(wage, 0.75)

iqr<-q3-q1 # Rango = IQR(x)
ati_tukey <- wage<(q1-1.5*iqr) | wage>(q3+1.5*iqr)

#Posiciones
which(ati_tukey) %>% head()
[1] 10 15 16 28 29 31

#Valores
wage[ati_tukey] %>% head()
[1] 18.18 22.20 17.33 12.50 12.50 13.00

#porcentaje de atipicos
mean(ati_tukey)
[1] 0.06844106

#cantidad
sum(ati_tukey)
[1] 36

Recodificación de variables usando dplyr en R

Una base de datos suele tener diversos tipos de variables del tipo cualitativo y cuantitativo. En función del tipo de variables aplicamos di...