1. Una cartera de clientes presenta un puntaje de riesgo crediticio normalmente distribuido con una media de 600 puntos y una desviación estándar de 50 puntos.

# **Distribución Normal**
# Generar una distribución normal
mean <- 600  # Media
ds <- 50     # Desviación estándar
distrib_normal <- rnorm(1000, mean = mean, sd = ds)

# Visualización de la distribución normal
hist(distrib_normal, breaks = 30, main = "Distribución Normal", xlab = "Valores", ylab = "Frecuencia")

# Calcular probabilidades acumuladas
prob_norm <- pnorm(550, mean = mean, sd = ds)  # P(X <= 550)
cat("P(X < 550) en la distribución normal:", prob_norm, "\n")
## P(X < 550) en la distribución normal: 0.1586553

1.1 ¿Cuál es la probabilidad de que un cliente tenga un puntaje menor a 550?

# Distribución normal
media <- 600
desviacion <- 50

# a) Probabilidad de puntaje menor a 550
probabilidad_menor_550 <- pnorm(550, mean = mean, sd = ds)
print(probabilidad_menor_550)
## [1] 0.1586553
La probabilidad de que un cliente tenga un puntaje menor a 550 es del 15.86%
# Gráfico para la probabilidad en a)
x_vals <- seq(500, 700, length.out = 1000)
y_vals <- dnorm(x_vals, mean = media, sd = desviacion)

# Gráfico normal
plot(x_vals, y_vals, type = "l", main = "Distribución Normal de Puntajes de Riesgo Crediticio",
     xlab = "Puntaje", ylab = "Densidad", col = "blue")
abline(v = 550, col = "red", lwd = 2)
text(550, 0.008, labels = "Puntaje 550", pos = 4)

# Área sombreada a la izquierda de 550
x_fill <- seq(500, 550, length.out = 500)
y_fill <- dnorm(x_fill, mean = media, sd = desviacion)
polygon(c(x_fill, 550), c(y_fill, 0), col = "lightblue", border = NA)

1.2 ¿Qué porcentaje de clientes tiene puntajes entre 580 y 620?

# b) Porcentaje de clientes con puntajes entre 580 y 620
probabilidad_620 <- pnorm(620, mean = mean, sd = ds)
probabilidad_580 <- pnorm(580, mean = mean, sd = ds)
porcentaje_580_620 <- probabilidad_620 - probabilidad_580
print(porcentaje_580_620 * 100)  
## [1] 31.08435
El porcentaje de clientes que tiene puntaje entre 580 y 620 es del 31.08%
# Gráfico para el rango de puntajes entre 580 y 620 (Parte b)
plot(x_vals, y_vals, type = "l", main = "Distribución Normal con Rango 580-620", 
     xlab = "Puntaje", ylab = "Densidad", col = "blue")
abline(v = c(580, 620), col = "green", lwd = 2)
text(600, 0.008, labels = "Rango de 580 a 620", pos = 3)

# Área sombreada entre 580 y 620
x_fill_b <- seq(580, 620, length.out = 500)
y_fill_b <- dnorm(x_fill_b, mean = media, sd = desviacion)
polygon(c(x_fill_b, 620), c(y_fill_b, 0), col = "lightgreen", border = NA)

1.3 ¿El 5% de los clientes con mayores puntajes recibe beneficios adicionales. ¿A partir de qué puntaje se otorgan estos beneficios?

qnorm(0.95,600,50)
## [1] 682.2427
A partir de 682.24 puntos se otorgan beneficios adicionales.

 

 

2. Se estima que la probabilidad de que un cliente no pague su crédito es del 15%. En una muestra de 20 clientes

n <- 20
p <- 0.15

2.1 ¿Cuál es la probabilidad de que exactamente 3 clientes incumplan?

prob_binom1 <- dbinom(3, size=n, prob=p)
prob_binom1
## [1] 0.2428289
La probabilidad de que 3 clientes incumplan es de 24.28%

 

2.2 ¿Cuál es la probabilidad de que al menos 5 clientes incumplan?

prob2 <- 1-pbinom(4, size=n, prob=p)
prob2
## [1] 0.1701532
La probabilidad de que 5 clientes incumplan es del 17.01%

 

2.3 ¿Qué número máximo de clientes incumplidores se esperaría en el 90% de los casos?

qbinom(0.9, size=n, prob=p)
## [1] 5
En el 90% de los casos se esperaria maximo 5 clientes incumplidores

 

 

Grafica Probabilidad de clientes incumplidos con muestra de 20 clientes

# Posibles números de incumplimiento (de 0 a 20)
x_vals <- 0:n  

# Probabilidades dbinom
y_vals <- dbinom(x_vals, size = n, prob = p)

# Graficar la distribución
plot(x_vals, y_vals, type = "h", lwd = 2, col = "blue", main = "Distribución Binomial de Clientes Incumplidores",
     xlab = "Número de Clientes Incumplidores", ylab = "Probabilidad", ylim = c(0, max(y_vals) * 1.1))
segments(x0 = x_vals, y0 = rep(0, length(x_vals)), x1 = x_vals, y1 = y_vals, col = "blue", lwd = 2)
points(x_vals, y_vals, pch = 19, col = "red")

 

 

3. XYZ quiere estimar el promedio de pagos atrasados en la cartera. En una muestra de 50 clientes, el promedio observado fue de 3 días con una desviación estándar de 1.5 días.

set.seed(123) 

data <- rnorm(50, mean = 3, sd = 1.5)  # Muestra de tamaño 50

 

3.1 Construye un intervalo de confianza del 95% para el promedio de días de pago atrasados.

data <- rnorm(50, mean = 3, sd = 1.5)  # Muestra de tamaño 50
ci <- t.test(data, conf.level = 0.95)$conf.int
cat("Intervalo de confianza del 95% para el promedio: ", ci[1], " a ", ci[2], "\n")
## Intervalo de confianza del 95% para el promedio:  2.833625  a  3.6056
# Crear el gráfico de dispersión
plot(data, 
     main = "Gráfico de Dispersión de los Datos", 
     xlab = "Índice", 
     ylab = "Valor", 
     pch = 16, 
     col = "blue", 
     xlim = c(0, 50), 
     ylim = c(min(data) - 1, max(data) + 1))  # Ajustar límites de los ejes

abline(h = mean(data), col = "red", lwd = 2)

abline(h = ci[1], col = "green", lty = 2)
abline(h = ci[2], col = "green", lty = 2)


legend("topright", 
       legend = c("Promedio", "Intervalo de Confianza Inferior", "Intervalo de Confianza Superior"),
       col = c("red", "green", "green"), 
       lty = c(1, 2, 2), 
       lwd = c(2, 1, 1))

 

3.2 ¿Podría la empresa afirmar con un 99% de confianza que el promedio real es mayor a 2.5 días?

ci <- t.test(data,conf.level = 0.99)$conf.int  # Intervalo de confianza para la media
ci
## [1] 2.704862 3.734362
## attr(,"conf.level")
## [1] 0.99
Si se puede afirmar con un 99% de confianza que el promedio real es mayor a 2.5 dias

 

 

4. La empresa XYZ quiere evaluar si el promedio de días de pago atrasado en su cartera de clientes supera los 5 días, ya que esto indicaría un aumento significativo en el riesgo financiero.

Datos del Problema:

1 Muestra aleatoria de 40 clientes.
1 Promedio de días de pago atrasado en la muestra = 5.4 días.
1 Desviación estándar de la población = 1.2 días.
1 Nivel de significancia (α) = 0.05.
set.seed(123) 
# Datos simulados
data2 <- rnorm(40, mean = 5.4, sd = 1.2)  # Muestra de tamaño 40

# **Prueba de hipótesis para la media**

mu_0 <- 5

# Realizar prueba t
resultado <- t.test(data2, mu = mu_0,alternative = "greater")
print(resultado)
## 
##  One Sample t-test
## 
## data:  data2
## t = 2.6665, df = 39, p-value = 0.005549
## alternative hypothesis: true mean is greater than 5
## 95 percent confidence interval:
##  5.167214      Inf
## sample estimates:
## mean of x 
##   5.45422
El promedio de días de pago atrasado en la cartera de la empresa XYZ en su cartera de clientes supera los 5 días, ya que con un nivel de significancia alfa de 0.05 (con exactitud del 95%) la media es de 5,45 días.

PARTE 2

Analizaremos la compañía líder en tecnología NVIDIA. Esta es una empresa que se especializa en el diseño de unidades de proccesamiento gráfico (GPU). Sus productos son ampliamente utilizados en diversas industrias, desde los videojuegos hasta la inteligencia artificial. Su enfoque se encuentra prioritariamente en la innovación y en el rendimiento de la experiencia visual tecnológica.

1. Descarga de la serie temporal de los precios de cierre para NVIDIA

accion <- getSymbols('NVDA', src = 'yahoo', auto.assign = FALSE, from = '2020-01-01')
precios_cierre <- accion$NVDA.Close

plot(precios_cierre, main = 'Precios de Cierre de NVDA', col = 'green', lwd = 2)

2 Cálculo y análisis de la Rentabilidad

rentabilidad <- diff(log(precios_cierre))
plot(rentabilidad, main = 'Rentabilidad Diaria', col = 'green', lwd = 2)

# Calcular la desviación estándar móvil con una ventana de 20 días
volatilidad <- rollapply(rentabilidad, width = 20, FUN = sd, fill = NA, align = "right")

# Graficar la volatilidad
plot(volatilidad, type = "l", col = "#ff5733", lwd = 2, 
     main = "Volatilidad de la Rentabilidad Diaria (Desviación Estándar Móvil)", 
     xlab = "Fecha", ylab = "Volatilidad (Desviación Estándar)")

# Clasificar las rentabilidades en intervalos
categorias <- cut(rentabilidad, breaks = c(-Inf, -0.02, 0, 0.02, Inf), 
                  labels = c("Muy Negativa", "Negativa", "Positiva", "Muy Positiva"))

# Graficar las frecuencias de cada categoría
barplot(table(categorias), main = "Distribución de Rentabilidades Diarias por Categoría",
        col = c("red", "orange", "green", "blue"), xlab = "Categoría de Rentabilidad", 
        ylab = "Frecuencia")

Analizando el comportamiento de la rentabilidad desde Enero de 2020 hasta el 19 de Noviembre de 2024, podemos observar que, respecto a los precios de cierre, se han registrado algunos picos de incertidumbre. En el caso del año 2020, por la crisis de las fábricas de semiconductores y chips, se puede apreciar en las gráficas anteriores un pico de volatilidad alto, debido a la incertidyumbre generada por el efecto pandemia. En el año 2024, se registra otro pico de volatilidad (no tan alto como el anterior), suscitado por las investigaciones que el gobierno de los EEUU ha iniciado contra la compañía por acusaciones de presunto monopolio. No obstante, podemos observar que el comportamiento de la rentabilidad ha sido generalmente estable, y registra tendencia en alza desde el año 2023, apalancado por los avances en chipos de IA y sus ventas a grandes compañías, tales como Microsoft, Meta, Tesla y Amazon, entre otros.
En el gráfico de barras se puede apreciar que el comportamiento de la rentabilidad por segmentos, se concentra en resultados POSITIVO y MUY POSITIVO.

3. Análisis de Probabilidad

hist(rentabilidad, breaks = 50, probability = TRUE, main = "Distribución de Rentabilidad", col = "gray")

curve(dnorm(x, mean = mean(rentabilidad, na.rm = TRUE), sd = sd(rentabilidad, na.rm = TRUE)),
      
      col = "red", lwd = 2, add = TRUE)

summary(rentabilidad)
##      Index              NVDA.Close       
##  Min.   :2020-01-02   Min.   :-0.203979  
##  1st Qu.:2021-03-23   1st Qu.:-0.016070  
##  Median :2022-06-10   Median : 0.003339  
##  Mean   :2022-06-12   Mean   : 0.002595  
##  3rd Qu.:2023-08-31   3rd Qu.: 0.022267  
##  Max.   :2024-11-20   Max.   : 0.218088  
##                       NA's   :1
sd(rentabilidad$NVDA.Close , na.rm = TRUE)
## [1] 0.03392639
data_NVDA <- rentabilidad$NVDA.Close



probabilidad <- pnorm(mean(rentabilidad, na.rm = TRUE), 
                      mean = mean(rentabilidad, na.rm = TRUE), 
                      sd = sd(rentabilidad, na.rm = TRUE))

print(probabilidad)
## [1] 0.5
La probabilidad que la rentabilidad diaria sea menor al promedio es del 50%.

 

 

4.Intervalos de Confianza

Construye un intervalo de confianza al 95% para la media de la rentabilidad diaria

desvstd <- sd(rentabilidad$NVDA.Close, na.rm = TRUE)
desvstd
## [1] 0.03392639
summary(rentabilidad)
##      Index              NVDA.Close       
##  Min.   :2020-01-02   Min.   :-0.203979  
##  1st Qu.:2021-03-23   1st Qu.:-0.016070  
##  Median :2022-06-10   Median : 0.003339  
##  Mean   :2022-06-12   Mean   : 0.002595  
##  3rd Qu.:2023-08-31   3rd Qu.: 0.022267  
##  Max.   :2024-11-20   Max.   : 0.218088  
##                       NA's   :1
medianvda <- mean(rentabilidad$NVDA.Close, na.rm = TRUE)
medianvda
## [1] 0.00259469
pnorm(medianvda, medianvda, desvstd)
## [1] 0.5
data3 <- rentabilidad$NVDA.Close
ci <- t.test(data3)$conf.int  # Intervalo de confianza para la media


cat("Intervalo de confianza usando funcion:", ci[1], "a", ci[2], "\n")
## Intervalo de confianza usando funcion: 0.0006968435 a 0.004492536
plot(density(rentabilidad, na.rm = TRUE), main = "Intervalo de Confianza para la Media", col = "darkgreen", lwd = 2)
abline(v = mean(rentabilidad, na.rm = TRUE), col = "blue", lwd = 2, lty = 2) # Línea para la media
abline(v = ci, col = "red", lwd = 2, lty = 2) # Líneas para los límites del intervalo
legend("topright", legend = c("Media", "Intervalo de Confianza"), col = c("blue", "red"), lwd = 2, lty = 2)

Con una confiabilidad del 95%, el intervalo para que la rentabilidad sea la media, debe ser de 0.0006968435 a 0.004492536

5.Prueba de Hipótesis

Prueba si el promedio de la rentabilidad diaria es igual a 0 con un nivel de significancia del 5%:

 

# Prueba de hipótesis para la media (H0: mu = 0)
resultado_data3 <- t.test(data3, mu = 0)
resultado_data3
## 
##  One Sample t-test
## 
## data:  data3
## t = 2.6823, df = 1229, p-value = 0.007411
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
##  0.0006968435 0.0044925362
## sample estimates:
##  mean of x 
## 0.00259469
plot(density(rentabilidad, na.rm = TRUE), 
     main = "Prueba de Hipótesis para la Media", 
     xlab = "Rentabilidad", 
     ylab = "Densidad",
     col = "darkgreen", lwd = 2)

abline(v = mean(rentabilidad, na.rm = TRUE), col = "blue", lwd = 2, lty = 2)

abline(v = 0, col = "red", lwd = 2, lty = 2)

abline(v = t.test(rentabilidad, mu = 0, conf.level = 0.95)$conf.int, col = "orange", lwd = 2, lty = 2)

legend("topright", legend = c("Densidad estimada", "Media observada", "Media bajo H0", "Intervalo de confianza"), 
       col = c("darkgreen", "blue", "red", "orange"), lwd = 2, lty = c(1, 2, 2, 2))

Con un 95% de confianza, la media diaria de rentabilidad no es igual a cero, es mayor a cero.