Introducción

En las siguientes secciones con el objetivo de comprender de manera práctica el uso de RStudio y lenguaje R, se desarrollarán cinco desafíos propuestos que buscan mostrar el conocimiento básico para el uso de R en RStudio.

Desafío 1: Realice otros 10 ejemplos con diferentes operadores matemáticos.

Además de las operaciones aritméticas presentadas, siendo estás la suma, multiplicación, división, logaritmo base 10, raíz cuadrada, seno y aproximación de números, hay otras operaciones aritméticas en R como son:

1) Resta

10-2
## [1] 8

2) Valor absoluto

abs(-3)
## [1] 3

3) Potencia

2**5
## [1] 32

4) División parte entera

15%/%4
## [1] 3

5) Módulo o Resto

15%%4
## [1] 3

6) Factorial

factorial(3)
## [1] 6

7) Exponencial

exp(2)
## [1] 7.389056

8) Logaritmo Natural

log(5)
## [1] 1.609438

9) Coseno

cos(pi)
## [1] -1

10) Tangente

tan(20*pi)
## [1] -2.449294e-15

Desafío 2: Realice ejemplos usando otros tipos de estructura de datos: elementos booleanos, factores, tablas, doubles, entre otros.

Otros tipos de estructuras de datos aparte de los vectores, matrices y listas son:

Booleanos

10==5
## [1] FALSE
4==4
## [1] TRUE

Factores

colores <- c("rojo", "azul", "rojo", "amarillo", "naranjo", "azul", "rojo", "rojo", "azul", "gris", "amarillo", "azul", "gris", "rojo", "azul", "naranjo")

factor(colores)
##  [1] rojo     azul     rojo     amarillo naranjo  azul     rojo     rojo    
##  [9] azul     gris     amarillo azul     gris     rojo     azul     naranjo 
## Levels: amarillo azul gris naranjo rojo

Tablas

nombre = c("Ana", "Jose", "Maria")
edad = c("17", "28", "22")
altura = c("1,54", "1,73", "1,67")

personas = data.frame(NOMBRE=nombre, EDAD=edad, ALTURA=altura)
head(personas)
##   NOMBRE EDAD ALTURA
## 1    Ana   17   1,54
## 2   Jose   28   1,73
## 3  Maria   22   1,67

Desafío 3: Construya una función que permita a un jugador jugar al piedra papel o tijeras.

Se realizó un programa simple que simula una partida del juego piedra, papel o tijera entre jugador e IA.

# Función que calcula e retorna el resultado
# Entradas: Dos enteros
# Salida: String
resultado = function(opJugador, opIA)
{
  # caso misma tirada
  if(opJugador == opIA){   
    return(cat("\nHan empatado"))
  } 
  
  # caso tirada piedra
  if(opJugador == 1){               
    if(opIA == 2){
      return(cat("\nHas perdido"))
    } else{
      return(cat("\nHas ganado"))     
    }
  }
  
  # caso tirada papel
  if(opJugador == 2){               
    if(opIA == 3){
      return(cat("\nHas perdido"))
    } else{
      return(cat("\nHas ganado"))     
    }
  }
  
  # caso tirada tijera
  if(opJugador == 3){               
    if(opIA == 1){
      return(cat("\nHas perdido"))
    } else{
      return(cat("\nHas ganado"))   
    }
  }
}

# Función que retorna la opción del jugador
# Entrada: Entero y string
# Salida: String
tirada = function(numero, jugador){
  if(numero == 1){
    return(cat("\n->", jugador,"ha tirado piedra"))
  }
  
  if(numero == 2){
    return(cat("\n->", jugador,"ha tirado papel"))
  }
  
  if(numero == 3){
    return(cat("\n->", jugador,"ha tirado tijera"))
  }
}

# Función que reproduce una partida de juego de piedra, papel o tijeras
# Entrada: -
# Salida: -
juego =  function(){
  opJugador =0
  cat("Iniciando jugada", "\nElija su opción", "\nPiedra: 1", "\nPapel: 2", "\nTijeras: 3")
  while(opJugador <= 0 || opJugador > 3){    
    cat("\nIngrese número: ")
    opJugador = scan(n=1, quiet=TRUE)        # obtiene selección del jugador
  }
  tirada(opJugador, "El jugador")
  cat("\nLa IA elige un número")
  opIA = sample(1:3,1)                       # se usa función random para la selección de la IA
  tirada(opIA, "La IA")
  resultado(opJugador, opIA)                 # se imprime resultado
}

#juego()                                     #como se llamaria la función

Una vez compilado todo el código, así sería una partida normal y ejecutar el programa juego()

Desafío 4

Desafío 4.1: Seleccione un conjunto de datos desde el paquete ‘datasets’ de R. Para ver los datasets disponibles en la consola puede utilizar la función “data()” o puede consultarlos en la página web

Una vez visto los conjuntos de datos del paquete ‘datasets’ en R, se seleccionó el conjunto de datos “Maternal Health Risk Data Set” encontrado en la página de UCI. La tabla de datos se importó a R bajo el nombre de “maternal”.

head(maternal)
##   Age SystolicBP DiastolicBP    BS BodyTemp HeartRate RiskLevel
## 1  25        130          80 15.00       98        86 high risk
## 2  35        140          90 13.00       98        70 high risk
## 3  29         90          70  8.00      100        80 high risk
## 4  30        140          85  7.00       98        70 high risk
## 5  35        120          60  6.10       98        76  low risk
## 6  23        140          80  7.01       98        70 high risk

Desafío 4.2: Describa el conjunto de datos y explique para que fue o podría ser utilizado. Puede usar la función help(‘nombre_del_dataset’). ¿Cuál es la fuente de los datos?

La base de datos entrega información sobre la edad (Age), presión arterial sistólica (SystolicBP), presión arterial diastólica (DiastolicBP), azúcar en sangre (BS), temperatura corporal (BodyTemp), frecuencia cardíaca (HeartRate) y nivel de riesgo (Risk Level). Todos estos, son los factores de riesgo responsables y significativos de la mortalidad materna, que es una de las principales preocupaciones de los ODS de la ONU.

Por un lado, estos datos fueron utilizados en un estudio que hacían monitoreo efectivo de mujeres embarazadas, principalmente en un área rural de un país en desarrollo, con la ayuda de tecnología habilitada para detección portátil, que también notifica a las mujeres embarazadas y su familia sobre las condiciones de salud. Por otro lado, se utilizaban los datos para desarrollar un sistema para monitorear y predecir el nivel de riesgo de una mujer embarazada.

El conjunto de datos debe de ser atribuido como fuente a Marzia Ahmed (Universidad Internacional Daffodil, Dhaka, Bangladesh) y Mohammod Kashem (Universidad de Ciencia y Tecnología de Dhaka, Gazipur, Bangladesh) (Ahmed y Kashem, 2020).

Embarazo

Desafío 4.3: Describa cada variable, indique a qué tipo de variable corresponde, indique qué valores puede tomar y su unidad de medida.

Las variables utilizadas en este conjunto de datos son:

-> Age: Edad de una mujer durante el embarazo. Tipo de variable: Ratio y discreta. Valores a tomar: enteros. Unidad de medida: años.

-> SystolicBP: Valor superior de la Presión Arterial. Tipo de variable: Ratio y discreta. Valores a tomar: enteros. Unidad de medida: mmHg.

-> DiastolicBP: Valor más bajo de la Presión Arterial. Tipo de variable: Ratio y discreta. Valores a tomar: enteros. Unidad de medida: mmHg

-> BS: los niveles de glucosa en sangre que se expresan en términos de una concentración molar. Tipo de variable: Intervalo y continuo. Valores a tomar: reales. Unidad de medida: mmol/L

-> BodyTemp: La temperatura corporal de la mujer durante el embarazo. Tipo de variable: Intervalo y continuo. Valores a tomar: reales. Unidad de medida: C°.

-> HeartRate: Una frecuencia cardíaca normal en reposo en latidos por minuto. Tipo de variable: Ratio y discreta. Valores a tomar: enteros. Unidad de medida: lat/min.

-> RiskLevel: Nivel de Intensidad de Riesgo Predicho durante el embarazo considerando el atributo anterior. Tipo de variable: Ordinal y politómica. Valores a tomar: carácter. Unidad de medida: –.

Desafío 4.4: Ejecute la función summary(“conjunto_de_datos”). ¿Qué puede observar?

summary(maternal)
##       Age          SystolicBP     DiastolicBP           BS        
##  Min.   :10.00   Min.   : 70.0   Min.   : 49.00   Min.   : 6.000  
##  1st Qu.:19.00   1st Qu.:100.0   1st Qu.: 65.00   1st Qu.: 6.900  
##  Median :26.00   Median :120.0   Median : 80.00   Median : 7.500  
##  Mean   :29.87   Mean   :113.2   Mean   : 76.46   Mean   : 8.726  
##  3rd Qu.:39.00   3rd Qu.:120.0   3rd Qu.: 90.00   3rd Qu.: 8.000  
##  Max.   :70.00   Max.   :160.0   Max.   :100.00   Max.   :19.000  
##     BodyTemp        HeartRate     RiskLevel        
##  Min.   : 98.00   Min.   : 7.0   Length:1014       
##  1st Qu.: 98.00   1st Qu.:70.0   Class :character  
##  Median : 98.00   Median :76.0   Mode  :character  
##  Mean   : 98.67   Mean   :74.3                     
##  3rd Qu.: 98.00   3rd Qu.:80.0                     
##  Max.   :103.00   Max.   :90.0

Como se puede observar, la función summary(‘conjunto de datos’) da una descripción de los datos utilizados en el dataset, entregando valores mínimos, máximos, mediana, promedio, entre otros. Todos como números reales, a excepción de la variable RiskLevel que muestra su clase y modo, puesto que es un carácter. En otras palabras, con summary(‘conjunto de datos’) obtiene resúmenes de datos.

Desafío 4.5: Ejecute la función plot(“conjunto_de_datos”). ¿Qué puede observar?

plot(maternal)

Como se puede observar, la función plot(‘conjunto de datos’) crea gráficos con los tipos de datos dentro del conjunto de datos. Si se restringieran las variables dentro del plot se obtendrían diferentes tipos de gráficas.

plot(maternal$HeartRate, maternal$BS)

plot(maternal$Age, maternal$SystolicBP)

Desafío 5

Documente los desafíos 1-4 en un documento creado usando R-RStudio y el lenguaje Markdown y publíquelo en rpubs https://rpubs.com/. Este desafío se desarrolló a lo largo de este documento.

Referencias

  1. Ahmed M., Kashem M.A., Rahman M., Khatun S. (2020) Review and Analysis of Risk Factor of Maternal Health in Remote Area Using the Internet of Things (IoT). In: Kasruddin Nasir A. et al. (eds) InECCE2019. Lecture Notes in Electrical Engineering, vol 632. Springer, Singapore. https://link.springer.com/chapter/10.1007/978-981-15-2317-5_30

  2. Ahmed M., Kashem M.A. IoT based Risk Level Prediction Model for Maternal Health Care in the Context of Bangladesh, STI-2020, [under publication in IEEE]. https://ieeexplore.ieee.org/document/9350320

  3. UCI Machine Learning Repository: Maternal Health Risk Data Set Data Set. (2020). https://archive.ics.uci.edu/ml/datasets/Maternal+Health+Risk+Data+Set