A.1 Cap. 2: Primer contacto con R

  1. Soluciona la ecuación \(\sqrt({\frac{24+12}{(2 * 3)^3})}\).

Solución:

sqrt((24+12)/(2*3)^3)
# [1] 0.4082
  1. Resuelve \(\mathrm{log_{10}}(|\frac{\mathrm{exp(10)}^2}{-10*9^{6}}|)\). Las barras verticales implican aplicar valor absoluto antes de calcular el logaritmo en base 10.

Solución:

log10(abs((exp(10)**2)/(-10*(9^6))))
# [1] 1.96

1.La función sigmoidal \(\sigma(\mathrm{z}) = \frac{1}{1+e^{-\mathrm{z}}}\) es muy importante en estadística. Permite convertir el resultado de una regresión logística (Odds ratios) en probabilidades, facilitando la interpretación. Utiliza la fórmula \(z = -1.69 + 1*0.56\), emulando el resultado hipotético de una regresión logística, como insumo para calcular su probabilidad correspondiente utilizando la función sigmoidal. Como dato extra, el resultado de \(\sigma(\mathrm{z})\) por 100 para convertirlo a probabilidad porcentual.

Solución:

### Crear z
z <- -1.69 + 1*0.56

### Calcular la función sigmoidal
1 / (1 + exp(-z))
# [1] 0.2442
  1. Este ejercicio avanzado es de carácter explicativo. Sigue el ejercicio en la sección del Solucionario: Cap. 2, pregunta 3 correspondiente. Para calcular la derivaba de una función matemática, primero se debe crear la estructura matemática utilizando la función expression(). Una vez guardada la expresión, se utiliza la función D() para derivar.

    Calcula la primera derivada de:
    \(f(x)=-2x+2\)
    \(f(x)=-2x^2-5\)
    \(f(x)=\frac{x^3+2}{3}\)

    Calcula la primera derivada de una expresión con dos variables:
    \(f(x)=x^2+y^2+2*x*y-3*x+4*y+4\)

    Calcula la segunda derivada de:
    \(f(x)=x^2+3*x\)

Solución:

### Crear las expresiones matemáticas
eMat1 <- expression((-2*x)+2)
eMat2 <- expression((-2*(x^2))-5)
eMat3 <- expression(((x^3)+2)/3)

### Función D() para derivar las expresiones sobre x
D(eMat1, "x")
# -2
D(eMat2, "x")
# -(2 * (2 * x))
D(eMat3, "x")
# 3 * x^2/3

### Crear la expresión matemática con dos variables (x e y)
eMat4 <-expression(x^2+y^2+2*x*y-3*x+4*y+4)

### Función D() para derivar la expresiones sobre x
D(eMat4, "x")
# 2 * x + 2 * y - 3

### Función D() para derivar la expresiones sobre y
D(eMat4, "y")
# 2 * y + 2 * x + 4

### Crear la expresión matemática para obtener segunda derivada
eMat5 <- expression(x^2+3*x)

### Primera derivada
D(eMat5, "x")
# 2 * x + 3
  
### Segunda derivada
D(D(eMat5, "x"),'x')
# [1] 2

Para resolver integrales en R, puedes revisar la documentación de la función integrate() en RDocumentation.

# Un ejemplo rápido de uso extraído de la documentación
integrand <- function(x) {1/((x+1)*sqrt(x))}
integrate(integrand, lower = 0, upper = Inf)
# 3.142 with absolute error < 2.7e-05
Se recomienda la lectura del libro R for Calculus de Daniel Kaplan para profundizar en cálculo diferencial e integral en R.


  1. Crea un vector con llamado num1 conteniendo 1000 números aleatorios con distribución normal, con promedio 19 y desviación estándar 1.29 (revisa la TABLA 2.4). Asegúrate de ejecutar previamente la función set.seed(123) para que el ejercicio sea replicable.

Solución:

set.seed(123)
num1 <- rnorm(1000, mean=19, sd=1.29)

### La función head() permite ver los primeros N elementos del vector
### Aquí se define N como 20 elementos
head(num1, 20)
#  [1] 18.28 18.70 21.01 19.09 19.17 21.21 19.59 17.37 18.11 18.43 20.58 19.46 19.52
# [14] 19.14 18.28 21.31 19.64 16.46 19.90 18.39
  1. Calcula el promedio y la desviación estándar del objeto num1. ¿Son exactamente iguales a los valores definidos con los que creaste el conjunto de datos usando rnorm()?.

Solución:

mean(num1)
# [1] 19.02
sd(num1)
# [1] 1.279

Como habrás notado. Los valores obtenidos no son exactamente los valores de promedio y desviación estándar con los que se generaron los mil números aleatorios con rnorm(). La aleatorización impide que los valores sean idénticos, no obstante siempre tienden a lo solicitado. No que sucede exclusivamente en R, de hecho ningún lenguaje de programación lo hace idéntico.

  1. Calcula los cuartiles de dicho conjunto de datos. ¿Cuál es el valor del cuartil 50% (que es conocido como mediana) (revisa la TABLA 2.4)?

Solución:

### Para ver los cuartiles por defecto
quantile(num1)
#    0%   25%   50%   75%  100% 
# 15.38 18.19 19.01 19.86 23.18

### Para obtener el cuartil 50% o mediana
quantile(num1, probs=0.5)
#   50% 
# 19.01
  1. Utilizando los operadores relacionales, convierte el vector numérico num1 a vector lógico, aplicando la pregunta lógica “números mayores a 20.0”. Guarda el resultado en el ambiente con el nombre VL20 (revisa la TABLA 2.3).

Solución:

VL20 <- num1 > 20.0

### La función head() permite ver los primeros N elementos del vector
### Aquí se define N como 35 elementos
head(VL20, 35)
#  [1] FALSE FALSE  TRUE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE
# [14] FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
# [27]  TRUE FALSE FALSE  TRUE FALSE FALSE  TRUE  TRUE  TRUE
  1. Coloca el objeto VL20 dentro de la función mean(). La función mean calcula normalmente el promedio de un conjunto de datos numéricos. No obstante, cuando se le ofrece un vector lógico, contabiliza la cantidad de elementos TRUE y ofrece la proporción de verdaderos respecto al total de elemento del conjunto. ¿Cuál es la proporción de elementos FALSE del vector VL20? (revisa la TABLA 2.3).

Solución:

### Proporción de TRUE en el conjunto
mean(VL20)
# [1] 0.221

### Proporción de FALSE en el conjunto
1 - mean(VL20)
# [1] 0.779
  1. Utilizando los operadores lógicos y relacionales, convierte el vector numérico num1 a vector lógico, aplicando la pregunta lógica “números menor igual a 19.5 y números mayor a 15.7”. (revisa la TABLA 2.3). Si se sabe que son 1000 elementos los que contiene el vector, ¿Cuántos elementos del conjunto encajan dentro de la premisa lógica anterior?.

Solución:

### Crear el vector lógico, dándole un nombre cualquiera
num1LOGICO <- (num1 < 19 & num1 > 15.7)

### Proporción de elementos TRUE
### Es decir, que cumplieron la premisa anterior
mean(num1LOGICO)
# [1] 0.491

### Convertir proporción a cantidad,
### multiplicando por el total de datos del vector
mean(num1LOGICO) * length(num1LOGICO)
# [1] 491