## [1] "LC_COLLATE=es_ES.UTF-8;LC_CTYPE=es_ES.UTF-8;LC_MONETARY=es_ES.UTF-8;LC_NUMERIC=C;LC_TIME=es_ES.UTF-8"
Si la variable aleatoria X tiene una distribución normal con parámetros μ=2 y σ=1.1
Calcula:
1 - La probabilidad de que X sea menor o igual que 3
mu = 2
sigma = 1.1
# x = seq(mu - 4 * sigma, mu + 4 * sigma, 0.05)
x = seq(-3, 7, 0.05)
df = data.frame(x = x,
f_densidad = dnorm(x, mu, sigma),
f_distribucion = pnorm(x, mu, sigma))
head(df, 5)
## x f_densidad f_distribucion
## 1 -3.00 1.183053e-05 2.740841e-06
## 2 -2.95 1.453067e-05 3.397673e-06
## 3 -2.90 1.781025e-05 4.203556e-06
## 4 -2.85 2.178498e-05 5.190272e-06
## 5 -2.80 2.659174e-05 6.395907e-06
## [1] 0.82
## x f_densidad f_distribucion
## 1 3 0.2399147 0.8183489
## [1] 0.82
Respuesta: La probabilidad de que X sea menor o igual que 3 es 0.82 \[P(X \leq 3) = 0.82\]
2 - La probabilidad de que X sea mayor o igual que 3
## [1] 0.18
Respuesta: La probabilidad de que X sea mayor o igual que 3 es 0.18 \[P(X \geq 3) = 0.18\] \[P(X \geq 3) = 1 - P(X \leq 3) = 1 - 0.82 = 0.18\]
3 - Realiza un gráfico para su función de densidad
Respuesta:
4 - Realiza un gráfico para su función de distribución
Respuesta:
5 - Realiza un gráfico para los cuantiles
Respuesta:
## x cuantiles
## 1 0.01 -0.55898266
## 2 0.02 -0.25912380
## 3 0.03 -0.06887297
## 4 0.04 0.07424532
## 5 0.05 0.19066101
6 - El valor de k tal que:
1. P(X ≥ k) = 0.83
## [1] 0.17
## x cuantiles
## 17 0.17 0.9504182
## [1] 0.95
El valor de k tal que P(X ≥ k) = 0.83 Respuesta: k = 0.95 \[P(X \geq 0.95) = 0.83\]
2. P(X ≤ k) = 0.95
## [1] 0.95
## [1] 95
## x cuantiles
## 95 0.95 3.809339
## [1] 3.809
El valor de k tal que P(X ≤ k) = 0.95 Respuesta: k = 3.809 \[P(X \leq 3.809) = 0.95\]
3. P(k < X < 3.1) = 0.75
P(X ≤ 3.1) = 0.75
## [1] 0.8413447
## [1] 0.09134475
## [1] 0.534
El valor de k tal que P(k < X < 3.1) = 0.75 Respuesta: k = 0.534
\[P(0.534 < x < 3.1 ) = 0.75\]
Crear una secuencia de valores alrededor de la media para el gráfico
x_values = seq(mu-4*sigma, mu+4*sigma, length.out = 1000)
# k = qnorm(valor_meta, mu, sigma)
plot_data = data.frame(
x = x_values,
y = dnorm(x_values, mu, sigma))
area = ggplot(plot_data, aes(x = x, y = y)) +
geom_line() +
stat_function(fun = dnorm, args = list(mean = mu, sd = sigma), geom = "area",
xlim = c(resultado6_3, 3.1), fill="turquoise", alpha = 0.5) +
geom_vline(xintercept = resultado6_3, color = "navy", linetype = "dot") +
geom_vline(xintercept = 3.1, color = "orange", linetype = "dot") +
labs(title = paste("Distribución normal con area marcada para P(x < k < 3.1)",
paste0("\n", "k = ", round(resultado6_3, 2), ", Area = 0.75")),
x = "x",
y = "Densidad") +
theme_gray()
ggplotly(area)
\[P(k < x < 3.1) = 0.75\] \[P(k < 0.534) = 0.75\] \[P(0.534 < x < 3.1) = 0.75\]
Si la v.a. X tiene una distribución normal con parámetros μ=50 y σ2=100, utilizando la distribución normal estándar
Para obtener la distribución normal estándar con media 0 y varianza 1 se realizara una estandarización, se crea una nueva variable llamada z \[P(k \leq x ) = P(z\leq\frac{x-\mu}{\sigma})\] Calcula:
7 - La probabilidad de que X sea menor o igual que 40
x = seq(0, 90, 0.05)
df = data.frame(x = x,
f_densidad = dnorm(x, 50, sqrt(100)),
f_distribucion =pnorm(x, 50, sqrt(100)))
head(df, 5)
## x f_densidad f_distribucion
## 1 0.00 1.486720e-07 2.866516e-07
## 2 0.05 1.524337e-07 2.941788e-07
## 3 0.10 1.562867e-07 3.018965e-07
## 4 0.15 1.602331e-07 3.098091e-07
## 5 0.20 1.642751e-07 3.179214e-07
grafico2 = ggplot(df, aes(x = x, y = f_distribucion)) +
geom_line(color = "darkorange") +
ggtitle("Funcion de distridución N(μ=50 y σ=√100)") +
labs (x = "x", y = "f(x)") +
theme_gray()
ggplotly(grafico2)
valor_x = 40
mu = 50
sigma = sqrt(100)
z = (valor_x - mu)/sigma
resultado_7 = round(pnorm(z),2)
resultado_7
## [1] 0.16
Respuesta: La probabilidad de que X sea menor o igual que 40 luego de la estandarización es de 0.16
\[P(k \leq 40 ) = P(z\leq\frac{40-50}{10}) = P(z \leq 40) = 0.16\]
8 - La probabilidad de que X se encuentre entre -60 y 60 (ambos incluidos)
x = seq(-100, 90, 0.05)
df = data.frame(x = x,
f_densidad = dnorm(x, 50, sqrt(100)),
f_distribucion =pnorm(x, 50, sqrt(100)))
head(df, 5)
## x f_densidad f_distribucion
## 1 -100.00 5.530710e-51 3.670966e-51
## 2 -99.95 5.961390e-51 3.958135e-51
## 3 -99.90 6.425446e-51 4.267661e-51
## 4 -99.85 6.925454e-51 4.601278e-51
## 5 -99.80 7.464184e-51 4.960852e-51
grafico2 = ggplot(df, aes(x = x, y = f_distribucion)) +
geom_line(color = "darkorange") +
ggtitle("Funcion de distridución N(μ=50 y σ=√100)") +
labs (x = "x", y = "f(x)") +
theme_gray()
ggplotly(grafico2)
## [1] -11
## [1] 1
Respuesta:
## [1] 0.84
La probabilidad de que X se encuentre entre -60 y 60 (ambos incluidos) es de 0.84
Realiza un análisis exploratorio del dataset “iris” calculando todo lo que consideres interesante (aplicando lo que se ha explicado desde el principio del módulo)
Respuesta:
data(iris)
data = iris
attach(data)
data %>%
head(5) %>%
kable() %>%
kable_styling("striped", full_width = FALSE, position = "center", font_size = 16) %>%
row_spec(0, monospace = TRUE, bold = TRUE, color = "navy", background = "grey") %>%
row_spec(1:ncol(data), color = "black", background = "lightgrey")
Sepal.Length | Sepal.Width | Petal.Length | Petal.Width | Species |
---|---|---|---|---|
5.1 | 3.5 | 1.4 | 0.2 | setosa |
4.9 | 3.0 | 1.4 | 0.2 | setosa |
4.7 | 3.2 | 1.3 | 0.2 | setosa |
4.6 | 3.1 | 1.5 | 0.2 | setosa |
5.0 | 3.6 | 1.4 | 0.2 | setosa |
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1 5.1 3.5 1.4 0.2 setosa
## 2 4.9 3.0 1.4 0.2 setosa
## 3 4.7 3.2 1.3 0.2 setosa
## 4 4.6 3.1 1.5 0.2 setosa
## 5 5.0 3.6 1.4 0.2 setosa
Revisión de los datos
## 'data.frame': 150 obs. of 5 variables:
## $ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
## $ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
## $ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
## $ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
## $ Species : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
## [1] "Sepal.Length" "Sepal.Width" "Petal.Length" "Petal.Width"
Calculo de estadísticos de variables numéricas
variables_numericas_df = data %>%
select(where(is.numeric))
estadisticos_numericos_df = data.frame(Variable = character(),
Media = numeric(),
Mediana = numeric(),
IQR = numeric(),
Sigma = numeric())
for (i in names(variables_numericas_df)) {
media = round(mean(variables_numericas_df[[i]], na.rm = TRUE), 2)
mediana = round(median(variables_numericas_df[[i]], na.rm = TRUE), 2)
IQR = round(IQR(variables_numericas_df[[i]], na.rm = TRUE), 2)
sigma = round(sd(variables_numericas_df[[i]], na.rm = TRUE), 2)
temp_df <- data.frame(Variable = i,
Media = media,
Mediana = mediana,
IQR = IQR,
Sigma = sigma)
estadisticos_numericos_df <- rbind(estadisticos_numericos_df, temp_df)
}
num_filas <- min(5, nrow(estadisticos_numericos_df))
estadisticos_numericos_df %>%
head(num_filas) %>%
kable() %>%
kable_styling("striped", full_width = FALSE, position = "center", font_size = 16) %>%
row_spec(0, monospace = TRUE, bold = TRUE, color = "navy", background = "grey") %>%
row_spec(1:num_filas, color = "black", background = "lightgrey")
Variable | Media | Mediana | IQR | Sigma |
---|---|---|---|---|
Sepal.Length | 5.84 | 5.80 | 1.3 | 0.83 |
Sepal.Width | 3.06 | 3.00 | 0.5 | 0.44 |
Petal.Length | 3.76 | 4.35 | 3.5 | 1.77 |
Petal.Width | 1.20 | 1.30 | 1.5 | 0.76 |
Solo variables Factor
variables_factor_df = data %>%
select(where(is.factor))
estadisticos_factor_df = data.frame()
for(i in names(variables_factor_df)){
niveles <- levels(variables_factor_df[[i]])
frecuencias <- table(variables_factor_df[[i]])
df_temp <- data.frame(Variable = i,
Nivel = niveles,
Frecuencia = as.numeric(frecuencias))
estadisticos_factor_df <- rbind(estadisticos_factor_df, df_temp)
}
print(estadisticos_factor_df)
## Variable Nivel Frecuencia
## 1 Species setosa 50
## 2 Species versicolor 50
## 3 Species virginica 50
Dataset “iris”: Boxplot y Outliers
data_long <- gather(variables_numericas_df, key = "variable", value = "value")
p <- ggplot(data_long, aes(x = variable, y = value, fill = variable)) +
geom_boxplot() +
theme_minimal() +
theme(axis.text.x = element_text(angle = 90, hjust =1),
axis.text.y = element_blank(),
axis.ticks.y = element_blank()) +
labs(title = "Boxplot para cada variable númerica",
x = "Variable",
y = "Valor")
p_interactive <- ggplotly(p)
p_interactive
Comprueba si las variables numéricas siguen una distribución normal
comprobar_normalidad <-function(data){
resultado <- data.frame()
for (nombre_variable in names(data)) {
if(is.numeric(data[[nombre_variable]])){
test <- shapiro.test(data[[nombre_variable]])
es_normal <- ifelse(test$p.value > 0.05, "Si", "No")
temp_df <- data.frame(variable = nombre_variable, p.value = test$p.value, Distribucion_normal = es_normal)
resultado <- rbind(resultado, temp_df)
}
}
return(resultado)
}
resultado <- comprobar_normalidad(variables_numericas_df)
print(resultado)
## variable p.value Distribucion_normal
## 1 Sepal.Length 1.018116e-02 No
## 2 Sepal.Width 1.011543e-01 Si
## 3 Petal.Length 7.412263e-10 No
## 4 Petal.Width 1.680465e-08 No
histograma para las variables numéricas
histograma <- function(df){
columnas_numericas <- sapply(df, is.numeric)
for(nombre_columna in names(df) [columnas_numericas]){
p <- ggplot(df, aes_string(nombre_columna)) +
geom_histogram(binwidth = 10, fill= "darkmagenta", color ="black") +
labs(title = paste("Histograma de", nombre_columna),
x = nombre_columna,
y = "Recurrencia")
print(p)
}
}
histograma(data)
## Variable Media Mediana IQR Sigma
## 1 Sepal.Length 5.84 5.80 1.3 0.83
## 2 Sepal.Width 3.06 3.00 0.5 0.44
## 3 Petal.Length 3.76 4.35 3.5 1.77
## 4 Petal.Width 1.20 1.30 1.5 0.76
variable = estadisticos_numericos_df[1, "Variable"]
mu = estadisticos_numericos_df[1, "Media"]
sigma = estadisticos_numericos_df[1, "Sigma"]
print(paste("Variable:", variable, "Media (mu):", mu, "Desviación estándar (sigma):", sigma))
## [1] "Variable: Sepal.Length Media (mu): 5.84 Desviación estándar (sigma): 0.83"
Distribución normal y estandarizada de la variable Sepal.length
variable <- estadisticos_numericos_df[1, "Variable"] # Nombre de la variable
data_variable <- variables_numericas_df[[variable]] # Extraer la columna
# Calcular media y desviación estándar
mu <- mean(data_variable, na.rm = TRUE) # Media
sigma <- sd(data_variable, na.rm = TRUE) # Desviación estándar
# Generar valores para ambas distribuciones
x_original <- seq(mu - 4 * sigma, mu + 4 * sigma, length.out = 1000) # Original
x_standardized <- (x_original - mu) / sigma # calculo de z
y_standardized <- dnorm(x_standardized, mean = 0, sd = 1)
# Crear dataframes para las dos distribuciones
data_original <- data.frame(
x = x_original,
y = dnorm(x_original, mean = mu, sd = sigma),
type = "Distribución Original"
)
data_standardized <- data.frame(
x = x_standardized,
y = dnorm(x_standardized, mean = 0, sd = 1),
type = "Distribución Estandarizada"
)
# Combinar ambas distribuciones en un solo dataframe
plot_data <- bind_rows(data_original, data_standardized)
head(plot_data, 5)
## x y type
## 1 2.531069 0.0001616178 Distribución Original
## 2 2.537700 0.0001668732 Distribución Original
## 3 2.544331 0.0001722884 Distribución Original
## 4 2.550962 0.0001778680 Distribución Original
## 5 2.557593 0.0001836165 Distribución Original
# Crear el gráfico con ambas distribuciones
area <- ggplot(plot_data, aes(x = x, y = y, color = type, fill = type)) +
geom_line(size = 1) +
labs(
title = paste("Distribución Normal: ", variable),
x = "Valores (Original o Z-score)",
y = "Densidad",
color = "Distribución",
fill = "Distribución"
) +
scale_color_manual(values = c("Distribución Original" = "blue",
"Distribución Estandarizada" = "turquoise")) +
scale_fill_manual(values = c("Distribución Original" = "blue",
"Distribución Estandarizada" = "turquoise")) +
theme_gray() +
theme(legend.position = "top")
# Convertir a un gráfico interactivo
ggplotly(area)