Simulamos 1000 instancias de tiempos de vida para cada componente.
library(ggplot2)
# Función para simular el tiempo de vida de un componente
simular_tiempo_vida <- function(mu, sigma, n) {
rlnorm(n, meanlog = mu, sdlog = sigma)
}
# Parámetros para los componentes
mu_R1_R3 <- 2
sigma_R1_R3 <- 1
mu_R2_R4 <- 1
sigma_R2_R4 <- 0.1
# Simulación de los tiempos de vida para 1000 instancias
n <- 1000
set.seed(123) # Para reproducibilidad
# Simulamos los tiempos de vida para cada componente
R1 <- simular_tiempo_vida(mu_R1_R3, sigma_R1_R3, n)
R2 <- simular_tiempo_vida(mu_R2_R4, sigma_R2_R4, n)
R3 <- simular_tiempo_vida(mu_R1_R3, sigma_R1_R3, n)
R4 <- simular_tiempo_vida(mu_R2_R4, sigma_R2_R4, n)
Calculamos el tiempo de vida para cada uno de los tres sistemas.
# Sistema 1 (R1 y R2 en serie)
tiempo_sistema1 <- pmin(R1, R2)
# Sistema 2 (R3 y R4 en paralelo)
tiempo_sistema2 <- pmax(R3, R4)
# Sistema 3 (R1 y R2 en serie, con R3 y R4 en paralelo)
tiempo_sistema3 <- pmin(R1, R2, R3, R4)
# Mostramos los primeros valores simulados para cada sistema
head(tiempo_sistema1)
## [1] 2.460637 2.449795 2.713399 2.682589 2.106580 3.016380
head(tiempo_sistema2)
## [1] 4.429985 9.364612 4.299122 25.008797 8.794582 3.993754
head(tiempo_sistema3)
## [1] 2.460637 2.449795 2.351806 2.535197 2.106580 2.708130
A continuación, calculamos la media del tiempo de vida para los tres sistemas.
# Estimación de la media del tiempo de vida
media_sistema1 <- mean(tiempo_sistema1)
media_sistema2 <- mean(tiempo_sistema2)
media_sistema3 <- mean(tiempo_sistema3)
# Mostramos las medias
cat("Media del tiempo de vida del Sistema 1: ", media_sistema1, "\n")
## Media del tiempo de vida del Sistema 1: 2.58863
cat("Media del tiempo de vida del Sistema 2: ", media_sistema2, "\n")
## Media del tiempo de vida del Sistema 2: 11.9267
cat("Media del tiempo de vida del Sistema 3: ", media_sistema3, "\n")
## Media del tiempo de vida del Sistema 3: 2.333685
Estimamos la probabilidad de que los sistemas fallen antes de los 2 meses.
# Estimación de la probabilidad de falla
prob_sistema1_falla <- mean(tiempo_sistema1 < 2)
prob_sistema2_falla <- mean(tiempo_sistema2 < 2)
prob_sistema3_falla <- mean(tiempo_sistema3 < 2)
# Mostramos las probabilidades
cat("Probabilidad de falla en menos de 2 meses para Sistema 1: ", prob_sistema1_falla, "\n")
## Probabilidad de falla en menos de 2 meses para Sistema 1: 0.098
cat("Probabilidad de falla en menos de 2 meses para Sistema 2: ", prob_sistema2_falla, "\n")
## Probabilidad de falla en menos de 2 meses para Sistema 2: 0
cat("Probabilidad de falla en menos de 2 meses para Sistema 3: ", prob_sistema3_falla, "\n")
## Probabilidad de falla en menos de 2 meses para Sistema 3: 0.175
Calculamos el percentil 20 del primer sistema.
# Estimación del percentil 20
P20_sistema1 <- quantile(tiempo_sistema1, 0.20)
cat("Percentil 20 del tiempo de vida del Sistema 1: ", P20_sistema1, "\n")
## Percentil 20 del tiempo de vida del Sistema 1: 2.372783
Generamos una gráfica de probabilidad normal para verificar si los tiempos de vida de los sistemas siguen una distribución normal.
# Gráfica de probabilidad normal para los tres sistemas
par(mfrow=c(1,3))
qqnorm(tiempo_sistema1, main="QQ Plot Sistema 1")
qqline(tiempo_sistema1, col="blue")
qqnorm(tiempo_sistema2, main="QQ Plot Sistema 2")
qqline(tiempo_sistema2, col="blue")
qqnorm(tiempo_sistema3, main="QQ Plot Sistema 3")
qqline(tiempo_sistema3, col="blue")
Construimos un histograma para analizar la simetría de los tiempos de vida.
# Histogramas para los tiempos de vida
par(mfrow=c(1,3))
hist(tiempo_sistema1, main="Histograma Sistema 1", xlab="Tiempo de Vida", col="lightblue", breaks=20)
hist(tiempo_sistema2, main="Histograma Sistema 2", xlab="Tiempo de Vida", col="lightgreen", breaks=20)
hist(tiempo_sistema3, main="Histograma Sistema 3", xlab="Tiempo de Vida", col="lightcoral", breaks=20)
Generamos 1000 puntos aleatorios 𝑋 1 , 𝑋 2 , … , 𝑋 1000 X 1 ,X 2 ,…,X 1000 siguiendo una distribución uniforme entre 0 y 1.
set.seed(123) # Para reproducibilidad
# Generar 1000 coordenadas x en [0, 1]
n <- 1000
x <- runif(n, min = 0, max = 1)
# Mostrar las primeras coordenadas
cat("Primeras 10 coordenadas X generadas:\n")
## Primeras 10 coordenadas X generadas:
print(head(x, 10))
## [1] 0.2875775 0.7883051 0.4089769 0.8830174 0.9404673 0.0455565 0.5281055
## [8] 0.8924190 0.5514350 0.4566147
Generamos 1000 puntos aleatorios 𝑌 1 , 𝑌 2 , … , 𝑌 1000 Y 1 ,Y 2 ,…,Y 1000 siguiendo una distribución uniforme entre 0 y 1.
# Generar 1000 coordenadas y en [0, 1]
y <- runif(n, min = 0, max = 1)
# Mostrar las primeras coordenadas
cat("Primeras 10 coordenadas Y generadas:\n")
## Primeras 10 coordenadas Y generadas:
print(head(y, 10))
## [1] 0.27362273 0.59386693 0.16018481 0.85343024 0.84773916 0.47788681
## [7] 0.77369212 0.29540008 0.06562811 0.44053312
Para cada par de puntos ( 𝑋 𝑖 , 𝑌 𝑖 ) (X i ,Y i ), calculamos la distancia desde el centro del círculo en ( 0.5 , 0.5 ) (0.5,0.5) y verificamos si están dentro del círculo. Un punto está dentro del círculo si su distancia desde el centro es menor a 0.5.
# Cálculo de la distancia al centro (0.5, 0.5)
distancia_al_centro <- (x - 0.5)^2 + (y - 0.5)^2
# Identificar los puntos dentro del círculo (distancia < 0.25)
dentro_circulo <- distancia_al_centro <= 0.25
# Mostrar los primeros resultados
cat("¿Están los primeros 10 puntos dentro del círculo?\n")
## ¿Están los primeros 10 puntos dentro del círculo?
print(head(dentro_circulo, 10))
## [1] TRUE TRUE TRUE FALSE FALSE TRUE TRUE TRUE TRUE TRUE
Contamos cuántos puntos están dentro del círculo y usamos esta información para estimar 𝜋.
# Contar cuántos puntos están dentro del círculo
puntos_dentro <- sum(dentro_circulo)
# Estimar Pi como 4 veces la proporción de puntos dentro del círculo
estimacion_pi <- 4 * (puntos_dentro / n)
# Imprimir resultados
cat("Número de puntos dentro del círculo: ", puntos_dentro, "\n")
## Número de puntos dentro del círculo: 800
cat("Estimación de Pi con 1000 puntos: ", estimacion_pi, "\n")
## Estimación de Pi con 1000 puntos: 3.2
Realizamos una simulación con 10000 y 100000 puntos para mejorar la estimación de 𝜋.
# Función para simular y estimar Pi con n puntos
estimar_pi <- function(n) {
x <- runif(n, min = 0, max = 1)
y <- runif(n, min = 0, max = 1)
distancia_al_centro <- (x - 0.5)^2 + (y - 0.5)^2
dentro_circulo <- distancia_al_centro <= 0.25
puntos_dentro <- sum(dentro_circulo)
estimacion_pi <- 4 * (puntos_dentro / n)
return(estimacion_pi)
}
# Simulaciones con 10000 y 100000 puntos
estimacion_10000 <- estimar_pi(10000)
estimacion_100000 <- estimar_pi(100000)
# Imprimir resultados
cat("Estimación de Pi con 10000 puntos: ", estimacion_10000, "\n")
## Estimación de Pi con 10000 puntos: 3.1528
cat("Estimación de Pi con 100000 puntos: ", estimacion_100000, "\n")
## Estimación de Pi con 100000 puntos: 3.144