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.
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:
10-2
## [1] 8
abs(-3)
## [1] 3
2**5
## [1] 32
15%/%4
## [1] 3
15%%4
## [1] 3
factorial(3)
## [1] 6
exp(2)
## [1] 7.389056
log(5)
## [1] 1.609438
cos(pi)
## [1] -1
tan(20*pi)
## [1] -2.449294e-15
Otros tipos de estructuras de datos aparte de los vectores, matrices y listas son:
10==5
## [1] FALSE
4==4
## [1] TRUE
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
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
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()
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
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).
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: –.
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.
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)
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.
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
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
UCI Machine Learning Repository: Maternal Health Risk Data Set Data Set. (2020). https://archive.ics.uci.edu/ml/datasets/Maternal+Health+Risk+Data+Set