Hoy en día, en la estadística es muy fundamental usar las matrices y los vectores, según denominado por la “programación”, en inglés se le denomia el nombre array, a esto se le denomina una una zona de almacenamiento continuo que contiene series de elementos del mismo tipo, los elementos de la matriz. Para aterrizar bien, los vectores son una colección de datos que esta ordenada de datos.
# Crear un vector numérico
vector_numerico <- c(1, 2, 3, 4, 5, 100, 200, 300)
vector_numerico
## [1] 1 2 3 4 5 100 200 300
# Crear un vector de caracteres
vector_caracter <- c("a", "b", "c", "d", "e")
vector_caracter
## [1] "a" "b" "c" "d" "e"
# Secuencias y repeticiones
vector_seq <- seq(1, 10, by = 2) # Secuencia del 1 al 10 con secuencia de 2 en 2
vector_seq
## [1] 1 3 5 7 9
vector_rep <- rep(3, times = 5) # Repetir el número 3 cinco veces
vector_rep
## [1] 3 3 3 3 3
# Acceder a elementos de un vector
vector_numerico[2] # Segundo elemento
## [1] 2
vector_numerico[c(1, 3)] # Primer y tercer elemento
## [1] 1 3
# En este caso nos referimos al primer ejercicio.
library(knitr)
## Warning: package 'knitr' was built under R version 4.4.2
# Crear una matriz de 3x3
matriz <- matrix(1:9, nrow = 3, ncol = 3)
matriz
## [,1] [,2] [,3]
## [1,] 1 4 7
## [2,] 2 5 8
## [3,] 3 6 9
# Observar que clase tiene nuestros datos
class(matriz)
## [1] "matrix" "array"
# Observar la dimension que tiene nuestra matriz
dim(matriz)
## [1] 3 3
# Acceder a elementos de la matriz
matriz[1, 2] # Fila 1, columna 2
## [1] 4
matriz[ ,2] # Segunda columna completa
## [1] 4 5 6
matriz[2, ] # Segunda fila completa
## [1] 2 5 8
# Operaciones con matrices
matriz_transpuesta <- t(matriz) # Transponer la matriz
matriz_transpuesta
## [,1] [,2] [,3]
## [1,] 1 2 3
## [2,] 4 5 6
## [3,] 7 8 9
matriz_suma <- matriz + 2 # Sumar 2 a todos los elementos
matriz_suma
## [,1] [,2] [,3]
## [1,] 3 6 9
## [2,] 4 7 10
## [3,] 5 8 11
matriz_producto <- matriz %*% matriz_transpuesta # Producto
matriz_producto
## [,1] [,2] [,3]
## [1,] 66 78 90
## [2,] 78 93 108
## [3,] 90 108 126
matriz_determinante <- det(matriz) #Determinante
matriz_determinante
## [1] 0
# Crear la tabla de operaciones
operaciones <- data.frame(
OPERACIÓN = c("Transpuesta", "Diagonal", "Traza", "Determinante", "Inversa",
"Descomposición QR", "Rango", "Descomposición de Cholesky", "Varianza"),
SINTAXIS = c("t(A)", "diag(A)", "sum(diag(A))", "det(A)", "solve(A)",
"qr(A)", "qr(A)$rank", "chol(A)", "var(A)")
)
# Mostrar tabla en formato bonito con knitr
kable(operaciones, caption = "Tabla de Operaciones de Álgebra Lineal en R o en RStudio")
| OPERACIÓN | SINTAXIS |
|---|---|
| Transpuesta | t(A) |
| Diagonal | diag(A) |
| Traza | sum(diag(A)) |
| Determinante | det(A) |
| Inversa | solve(A) |
| Descomposición QR | qr(A) |
| Rango | qr(A)$rank |
| Descomposición de Cholesky | chol(A) |
| Varianza | var(A) |
Tres tipos de productos (A, B y C) estres plantas diferentes.
Donde cada fila representa una planta y cada columna representa un producto.
La empresa quiere aumentar la producción en 10 unidades por producto en cada planta. ¿Cuál será la nueva matriz de producción?
# Matriz de producción original
M <- matrix(c(50, 30, 20, 40, 25, 35, 30, 45, 50), nrow = 3, byrow = TRUE)
# Matriz con incremento de producción
incremento <- matrix(10, nrow = 3, ncol = 3)
# Nueva matriz de producción
M_nueva <- M + incremento
# Mostrar resultado
M_nueva
## [,1] [,2] [,3]
## [1,] 60 40 30
## [2,] 50 35 45
## [3,] 40 55 60
Una empresa necesita calcular el costo total de los insumos utilizados en su producción. Tiene la siguiente matriz que muestra la cantidad de tres tipos de insumos usados en dos líneas de producción.
Cada columna representa un insumo, y cada fila representa una línea de producción.
Los costos unitarios de los insumos.
¿Cuál es el costo total de insumos por línea de producción ?
# Matriz de cantidades de insumos
C <- matrix(c(2, 3, 5, 4, 2, 3), nrow = 2, byrow = TRUE)
# Vector de precios unitarios
P <- c(10, 15, 20)
# Cálculo del costo total por línea de producción
costo_total <- C %*% P
# Mostrar resultado
costo_total
## [,1]
## [1,] 165
## [2,] 130
Libreria a utilizar son: ggplot2.
La visualización de datos es el proceso de representar información de manera gráfica para que sea más fácil de entender y analizar. En lugar de ver solo números en una tabla, los datos se convierten en gráficos, diagramas o mapas, lo que ayuda a identificar patrones, tendencias y relaciones de forma más rápida e intuitiva.
| Librería | Descripción |
|---|---|
| ggplot2 | Gráficos personalizados basados en la gramática de gráficos. |
| graphics | Gráficos base de R (plot, hist, boxplot). |
| lattice | Gráficos multivariados de alto nivel. |
| ggthemes | Temas adicionales para ggplot2. |
| scales | Personalización de escalas en ggplot2. |
| Librería | Descripción |
|---|---|
| plotly | Gráficos interactivos en 3D y web. |
| ggiraph | Gráficos interactivos con ggplot2. |
| highcharter | Gráficos tipo Highcharts en R. |
| Librería | Descripción |
|---|---|
| leaflet | Mapas interactivos. |
| sf | Análisis espacial en R. |
| tmap | Mapas temáticos. |
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.4.2
data("mtcars")
ggplot(mtcars, aes(x = hp)) +
geom_histogram(binwidth = 20, fill = "steelblue", color = "black") +
labs(title = "Distribución de Caballos de Fuerza", x = "HP", y = "Frecuencia")
data("iris")
ggplot(iris, aes(x = Petal.Length, y = Petal.Width, color = Species)) +
geom_point(size = 3) +
labs(title = "Relación entre Largo y Ancho del Pétalo", x = "Largo del Pétalo", y = "Ancho del Pétalo") +
theme_minimal()
data("airquality")
ggplot(airquality, aes(x = factor(Month), y = Ozone)) +
geom_boxplot(fill = "orange", color = "black") +
labs(title = "Concentración de Ozono por Mes", x = "Mes", y = "Ozono (ppb)") +
theme_minimal()
## Warning: Removed 37 rows containing non-finite outside the scale range
## (`stat_boxplot()`).
data("economics")
ggplot(economics, aes(x = date, y = unemploy)) +
geom_line(color = "blue", size = 1) +
labs(title = "Evolución del Desempleo en EE.UU.", x = "Año", y = "Desempleados") +
theme_minimal()
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
Se tiene que existen más variedad de gráficos estadisticos, como los que son gráficos de barras, gráficos de estrellas, etc. En este capitulo se muestran gráfico en el cual se utilizan más en la estadística hacia empresas, en la salud, en la economia, etc.
La regresión lineal es un método estadístico que se usa para analizar la relación entre dos variables: una dependiente (la que queremos predecir o explicar) y una independiente (la que usamos para hacer la predicción). En términos simples, busca encontrar una línea recta que mejor represente cómo cambia una variable con respecto a la otra.
Por otro lado, la regresión múltiple es una extensión de la regresión lineal, pero con más de una variable independiente. Es decir, en lugar de usar solo un factor para predecir la variable dependiente, se usan varios factores al mismo tiempo. Esto permite modelos más complejos y precisos.
Las áreas o campos se tuilizan en: Economía, Ciencias de la salud, Marketing, Ingeniería, Ciencias sociales.
# Cargar los datos
data(mtcars)
# Inspeccionar los datos
head(mtcars)
## mpg cyl disp hp drat wt qsec vs am gear carb
## Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
## Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
## Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
## Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
## Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
## Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
# Ajustar el modelo de regresión lineal
modelo <- lm(mpg ~ wt, data = mtcars)
# Resumen del modelo
summary(modelo)
##
## Call:
## lm(formula = mpg ~ wt, data = mtcars)
##
## Residuals:
## Min 1Q Median 3Q Max
## -4.5432 -2.3647 -0.1252 1.4096 6.8727
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 37.2851 1.8776 19.858 < 2e-16 ***
## wt -5.3445 0.5591 -9.559 1.29e-10 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 3.046 on 30 degrees of freedom
## Multiple R-squared: 0.7528, Adjusted R-squared: 0.7446
## F-statistic: 91.38 on 1 and 30 DF, p-value: 1.294e-10
El modelo ajustado es:
mpg =37.2851−5.344 * wt \ Esto significa que: Intersección (𝛽0) = 37.2851: Cuando el peso del vehículo (wt) es 0, el consumo de combustible estimado es de 37.29 millas por galón. (Ojo: en la realidad, no existen autos con peso 0, así que este valor es más bien teórico). Pendiente (β1) = -5.3445: Por cada aumento de 1,000 lbs en el peso del vehículo, el consumo de combustible disminuye en 5.34 millas por galón.
p-valor para el intercepto (< 2e-16) y para wt (1.29e-10): Ambos coeficientes son altamente significativos ( 𝑝< 0.001 p<0.001), lo que significa que hay una relación fuerte entre el peso y el consumo de combustible. Valor t para wt (-9.559): Un valor tan grande en valor absoluto indica que la variable wt es un predictor importante de mpg.
R 2 = 0.7528: El 75.28% de la variabilidad en mpg es explicada por wt. Este es un buen nivel de ajuste.
𝑅2 ajustado = 0.7446: Como es muy similar al 𝑅2, esto confirma que wt es un predictor fuerte.
Error estándar de los residuos = 3.046: En promedio, los valores reales de mpg se desvían en aproximadamente 3.05 unidades del valor predicho por el modelo.
# Instalar ggplot2 si no está instalado
if (!require(ggplot2)) install.packages("ggplot2", dependencies=TRUE)
# Cargar ggplot2
library(ggplot2)
# Gráfico de dispersión con línea de regresión
ggplot(mtcars, aes(x = wt, y = mpg)) +
geom_point(color = "blue") +
geom_smooth(method = "lm", col = "red") +
ggtitle("Regresión Lineal: mpg vs. wt") +
xlab("Peso del vehículo (1000 lbs)") +
ylab("Millas por galón")
## `geom_smooth()` using formula = 'y ~ x'
El modelo sugiere una fuerte relación entre el peso del auto y su eficiencia en el consumo de combustible: a mayor peso, menor rendimiento en millas por galón. Además, el modelo es altamente significativo y explica una gran parte de la variabilidad en mpg.
# Cargar datos mtcars
data(mtcars)
# Mostrar las primeras filas
head(mtcars)
## mpg cyl disp hp drat wt qsec vs am gear carb
## Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
## Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
## Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
## Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
## Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
## Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
# Modelo de regresión lineal múltiple
modelo <- lm(mpg ~ cyl + disp + hp + wt, data = mtcars)
# Mostrar resumen del modelo
summary(modelo)
##
## Call:
## lm(formula = mpg ~ cyl + disp + hp + wt, data = mtcars)
##
## Residuals:
## Min 1Q Median 3Q Max
## -4.0562 -1.4636 -0.4281 1.2854 5.8269
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 40.82854 2.75747 14.807 1.76e-14 ***
## cyl -1.29332 0.65588 -1.972 0.058947 .
## disp 0.01160 0.01173 0.989 0.331386
## hp -0.02054 0.01215 -1.691 0.102379
## wt -3.85390 1.01547 -3.795 0.000759 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2.513 on 27 degrees of freedom
## Multiple R-squared: 0.8486, Adjusted R-squared: 0.8262
## F-statistic: 37.84 on 4 and 27 DF, p-value: 1.061e-10
Intercept: Valor del consumo de combustible cuando todas las variables son 0.
cyl (cilindros): Cada cilindro adicional disminuye el consumo de combustible en -1.2260 mpg.
disp (desplazamiento del motor): No es tan significativo en este modelo.
hp (caballos de fuerza): Tiene un impacto negativo, pero no es significativo.
wt (peso del vehículo): Es significativo y reduce el rendimiento del combustible.
# Diagnóstico del modelo
par(mfrow=c(2,2))
plot(modelo)
# Crear un nuevo conjunto de datos
nuevos_datos <- data.frame(cyl = c(4, 6), disp = c(150, 250), hp = c(100, 180), wt = c(2.5, 3.2))
# Hacer predicciones
predict(modelo, newdata = nuevos_datos)
## 1 2
## 25.70655 19.93903
El modelo muestra que wt (peso) y cyl (cilindros) son las variables más influyentes.
El R² ajustado es 0.7995, lo que indica que el modelo explica el 79.95% de la variabilidad en el consumo de combustible.
Se recomienda revisar los supuestos para validar la calidad del modelo.
“Es un tipo de modelo estadístico (también conocido como modelo logit) se utiliza a menudo para la clasificación y el análisis predictivo. La regresión logística estima la probabilidad de que ocurra un evento, como votar o no votar, en función de un conjunto de datos determinado de variables independientes” (IBM, s/f).
# Cargar las librerías necesarias
library(ggplot2)
library(dplyr)
##
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(openxlsx)
## Warning: package 'openxlsx' was built under R version 4.4.2
df <- read.xlsx("C:\\Users\\Becario SAIS\\Downloads\\Triage (1).xlsx", sheet = 2)
# 1. Imputar valores faltantes
df$diastolica[is.na(df$diastolica)] <- mean(df$diastolica, na.rm = TRUE)
df$saturacion[is.na(df$saturacion)] <- mean(df$saturacion, na.rm = TRUE)
df$temperatura[is.na(df$temperatura)] <- mean(df$temperatura, na.rm = TRUE)
df$frec_resp[is.na(df$frec_resp)] <- mean(df$frec_resp, na.rm = TRUE)
df$frec_card[is.na(df$frec_card)] <- mean(df$frec_card, na.rm = TRUE)
df$tension_art[is.na(df$tension_art)] <- mean(df$tension_art, na.rm = TRUE)
# 2. Convertir las variables cualitativas a factores
df$sexo <- factor(df$sexo)
# 3. Crear el modelo de regresión logística
modelo_logistico <- glm(nivel_urgencias ~ sexo + edad + temperatura + frec_resp + frec_card + tension_art + diastolica + saturacion,
data = df,
family = binomial)
modelo_logistico
##
## Call: glm(formula = nivel_urgencias ~ sexo + edad + temperatura + frec_resp +
## frec_card + tension_art + diastolica + saturacion, family = binomial,
## data = df)
##
## Coefficients:
## (Intercept) sexoMujer edad temperatura frec_resp frec_card
## 12.907527 -0.092190 0.017933 -0.096154 0.084651 0.013569
## tension_art diastolica saturacion
## 0.006053 -0.003885 -0.146500
##
## Degrees of Freedom: 3681 Total (i.e. Null); 3673 Residual
## Null Deviance: 4808
## Residual Deviance: 4465 AIC: 4483
Se realizó un análisis de regresión logística con el objetivo de identificar los factores que influyen en el nivel de urgencia en un sistema de Triage . La variable dependiente es el nivel de urgencias, modelada como una variable dicotómica (0 = no urgente, 1 = urgente), y se incluyen como variables predictoras del sexo, edad, temperatura, frecuencia respiratoria, frecuencia cardíaca, presión arterial (sistólica y diastólica) y saturación de oxígeno Los resultados del modelo indican lo siguiente:
Sexo : Ser mujer (comparado con ser hombre) se asocia con un nivel de reducción en la probabilidad de presentar una urgencia (𝛽= −0,092). Edad : Existe una relación positiva con el nivel de urgencias (𝛽= 0,0179), lo que sugiere que a mayor edad, mayor probabilidad de clasificar como urgencia.
Temperatura : Un aumento en la temperatura corporal se asocia con una ligera disminución en la probabilidad de urgencia (𝛽= −0,0961). Frecuencia respiratoria : Se observa una asociación positiva (𝛽= 0,0846), indicando que un aumento en la frecuencia respiratoria está relacionado con una mayor probabilidad de urgencia. Frecuencia cardiaca : Presenta un coeficiente positivo (𝛽= 0,0135), lo que implica que valores más altos de frecuencia cardíaca pueden estar asociados con un mayor nivel de urgencia. Presión arterial sistólica : Aunque su efecto es pequeño (𝛽= 0,0060), sugiere que valores más altos pueden incrementar ligeramente la probabilidad de urgencia. Presión arterial diastólica : Presenta una relación negativa (𝛽= −0,0039), aunque con un efecto muy bajo. Saturación de oxígeno : Se observa un coeficiente negativo (𝛽= −0,1465), lo que indica que valores más altos de saturación de oxígeno reducen la probabilidad de clasificar como urgencia, lo cual es clínicamente esperado. El modelo ajustado tiene un AIC de 4483 , lo que da una medida de su calidad en comparación con otros modelos potenciales. La deviance residual (4465) muestra que el modelo ha logrado reducir la incertidumbre respecto a la deviance nula (4808), lo que indica un ajuste aceptable, aunque con posibilidad de mejorarse.
En conclusión, la edad, la frecuencia respiratoria y la frecuencia cardíaca se identifican como factores que incrementan la probabilidad de urgencia, mientras que la temperatura y la saturación de oxígeno tienen un efecto reductor en esta probabilidad. Estos resultados pueden ser útiles para optimizar los protocolos de clasificación en Triage y mejorar la priorización de los pacientes.
install.packages("ggplot2")
## Warning: package 'ggplot2' is in use and will not be installed
library(ggplot2)
# Gráfico de los coeficientes del modelo
coeficientes <- coef(modelo_logistico)
coef_data <- data.frame(
Variable = names(coeficientes),
Coeficiente = coeficientes
)
ggplot(coef_data, aes(x = reorder(Variable, Coeficiente), y = Coeficiente)) +
geom_bar(stat = "identity", fill = "coral") +
coord_flip() +
labs(title = "Coeficientes del Modelo de Regresión Logística", x = "Variable", y = "Coeficiente")
El modelo sugiere que la frecuencia respiratoria, la saturación de oxígeno y la edad son los predictores más relevantes en la clasificación del nivel de urgencias. Sin embargo, debido al alto valor del intercepto, sería recomendable analizar la razón de momios (exp(coef)) para obtener una interpretación más clara de los efectos en términos de probabilidades.
library(vcd)
## Warning: package 'vcd' was built under R version 4.4.2
## Cargando paquete requerido: grid
predicciones <- ifelse(test = modelo_logistico$fitted.values > 0.5, yes = 1, no = 0)
matriz_confusion <- table(modelo_logistico$model$nivel_urgencias, predicciones,
dnn = c("observaciones", "predicciones"))
matriz_confusion
## predicciones
## observaciones 0 1
## 0 2171 189
## 1 926 396
Precisión global:
a = 2171 + 396
b = 2171+189+926+396
Precision = a/b
Precision
## [1] 0.6971754
Sensibilidad:
c = 396
d = 396+926
Sensibilidad = c/d
Sensibilidad
## [1] 0.2995461
Especificidad
e = 2171
f = 2171+189
Especificidad = e/f
Especificidad
## [1] 0.9199153
mosaic(matriz_confusion, shade = T, colorize = T,
gp = gpar(fill = matrix(c("green3", "red2", "red2", "green3"), 2, 2)))
Interpretación: El modelo de regresión logística muestra un desempeño moderado en la clasificación del nivel de urgencias en el triage ya que su precisión general es del 69 por ciento Sin embargo al analizar los errores se observa que el modelo tiene una sensibilidad baja del 29 por ciento lo que significa que no detecta bien los casos urgentes clasificando incorrectamente a muchos pacientes como no urgentes Esto representa un problema en el contexto clínico porque podría llevar a una subestimación de la gravedad de algunos pacientes que realmente necesitan atención urgente Por otro lado la especificidad del modelo es alta lo que indica que identifica correctamente la mayoría de los casos no urgentes aunque a costa de dejar pasar muchos casos que sí son urgentes Esta tendencia sugiere que el modelo está más inclinado a clasificar pacientes como no urgentes reduciendo los falsos positivos pero aumentando los falsos negativos lo que implica que muchos pacientes en situación de urgencia podrían no recibir la atención adecuada a tiempo En términos prácticos esto podría traducirse en la necesidad de ajustar el umbral de decisión del modelo para priorizar la detección de pacientes urgentes aunque eso implica aceptar un mayor número de falsos positivos.
Las series de tiempo son conjuntos de datos que registran la evolución de una variable a lo largo del tiempo. Se utilizan para analizar patrones, tendencias y estacionalidades en fenómenos como el clima, las ventas, la economía o cualquier otra medición que dependa del tiempo. Estas series pueden estudiarse con herramientas estadísticas y modelos matemáticos para hacer pronósticos o entender el comportamiento pasado de la variable analizada.
La siguiente base es de la tasa de desempleo en el periodo desde el 1948 a 2024.
# Cargar librerías necesarias
library(ggplot2)
library(lubridate)
## Warning: package 'lubridate' was built under R version 4.4.2
##
## Adjuntando el paquete: 'lubridate'
## The following objects are masked from 'package:base':
##
## date, intersect, setdiff, union
library(openxlsx)
datos = read.xlsx("C:\\Users\\Becario SAIS\\Downloads\\Tasadedesempleo.xlsx", sheet = 2)
head(datos) #Observar los datos con la función "head"
## observation_date UNRATE
## 1 17533 3.4
## 2 17564 3.8
## 3 17593 4.0
## 4 17624 3.9
## 5 17654 3.5
## 6 17685 3.6
# Convertir la columna 'fecha' a formato Date si no lo está
datos$observation_date <- as.Date(datos$observation_date)
# Crear la serie de tiempo usando los datos mensuales, con frecuencia de 12 (mensual)
serie_ts <- ts(datos$UNRATE, start = c(1949, 1), frequency = 12)
# Graficar la serie de tiempo
plot(serie_ts, main = "Tasa de desempleo (1949-2024)", xlab = "Año", ylab = "Tasa de desempleo", col = "blue")
# Descomposición de la serie de tiempo
descomposicion <- decompose(serie_ts)
plot(descomposicion)
# Instalar y cargar el paquete forecast si no está instalado
if (!require(forecast)) install.packages("forecast")
## Cargando paquete requerido: forecast
## Warning: package 'forecast' was built under R version 4.4.2
## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
library(forecast)
# Ajustar un modelo ARIMA para pronóstico
modelo_arima <- auto.arima(serie_ts)
pronostico <- forecast(modelo_arima, h = 24) # Pronóstico para los próximos 24 meses (2 años)
# Graficar el pronóstico
plot(pronostico, main = "Pronóstico para los Próximos 2 Años", xlab = "Año", ylab = "Tasa de desempleo")
Como se observa en la imagen, se puede observar que el comportamiento de la gráfica se va a seguir a dos años se va a mantener en un comportamiento normal, esto quiere decir que no va aumentar y ni bajar en la tasa de desempleo se va a conseguir de la misma forma. Pero, también se llega a notar que entre en 2020 a 2022 obtuvo mucha tasa de desempleo pero después con el tiempo inicio a disminuir esa tasa de desempleo.
La estadística bayesiana es un enfoque para analizar datos que se basan en el teorema de Bayes. A diferencia de la estadística tradicional (frecuentista), que trata de hacer inferencias basadas en los datos que tenemos de manera directa, la estadística bayesiana utiliza un enfoque probabilístico para actualizar nuestras creencias sobre un parámetro a medida que obtenemos nueva información.
En términos simples, imagina que tienes una suposición inicial (llamada “previa”) sobre algo que estás investigando, como la probabilidad de que un medicamento sea efectivo. A medida que obtienes más datos, como los resultados de un experimento, la estadística bayesiana ajusta esa suposición (actualiza el “prior”) para reflejar lo que los datos sugieren, generando una nueva distribución de probabilidad llam.
Este enfoque te permite integrar conocimiento previo (experiencia pasada, estudios previos) con la evidencia nueva (los datos que obtienes) de manera más flexible y dinámica. Además, proporciona una manera
# Establecer el repositorio CRAN
options(repos = c(CRAN = "https://cloud.r-project.org/"))
# Instalar el paquete brms
install.packages("brms")
## package 'brms' successfully unpacked and MD5 sums checked
##
## The downloaded binary packages are in
## C:\Users\Becario SAIS\AppData\Local\Temp\RtmpKeF73B\downloaded_packages
# Cargar el paquete brms
library(brms)
## Warning: package 'brms' was built under R version 4.4.2
## Cargando paquete requerido: Rcpp
## Loading 'brms' package (version 2.22.0). Useful instructions
## can be found by typing help('brms'). A more detailed introduction
## to the package is available through vignette('brms_overview').
##
## Adjuntando el paquete: 'brms'
## The following object is masked from 'package:forecast':
##
## ma
## The following object is masked from 'package:stats':
##
## ar
# Simulación de datos
set.seed(123)
data <- rnorm(100, mean = 5, sd = 2)
# Crear un data frame con los datos
df <- data.frame(y = data)
# Definir el modelo bayesiano con una distribución normal a priori
# Modelo de regresión simple (solo un intercepto)
model <- brm(
y ~ 1, # Modelo con solo un intercepto (sin predictores)
data = df,
prior = c(
prior(normal(0, 10), class = "Intercept"), # Prior para el intercepto (media)
prior(cauchy(0, 2), class = "sigma") # Prior para la desviación estándar
),
chains = 4, # Número de cadenas MCMC
iter = 2000, # Número de iteraciones
warmup = 1000 # Número de iteraciones de quemado
)
## Compiling Stan program...
## Start sampling
##
## SAMPLING FOR MODEL 'anon_model' NOW (CHAIN 1).
## Chain 1:
## Chain 1: Gradient evaluation took 8.9e-05 seconds
## Chain 1: 1000 transitions using 10 leapfrog steps per transition would take 0.89 seconds.
## Chain 1: Adjust your expectations accordingly!
## Chain 1:
## Chain 1:
## Chain 1: Iteration: 1 / 2000 [ 0%] (Warmup)
## Chain 1: Iteration: 200 / 2000 [ 10%] (Warmup)
## Chain 1: Iteration: 400 / 2000 [ 20%] (Warmup)
## Chain 1: Iteration: 600 / 2000 [ 30%] (Warmup)
## Chain 1: Iteration: 800 / 2000 [ 40%] (Warmup)
## Chain 1: Iteration: 1000 / 2000 [ 50%] (Warmup)
## Chain 1: Iteration: 1001 / 2000 [ 50%] (Sampling)
## Chain 1: Iteration: 1200 / 2000 [ 60%] (Sampling)
## Chain 1: Iteration: 1400 / 2000 [ 70%] (Sampling)
## Chain 1: Iteration: 1600 / 2000 [ 80%] (Sampling)
## Chain 1: Iteration: 1800 / 2000 [ 90%] (Sampling)
## Chain 1: Iteration: 2000 / 2000 [100%] (Sampling)
## Chain 1:
## Chain 1: Elapsed Time: 0.042 seconds (Warm-up)
## Chain 1: 0.04 seconds (Sampling)
## Chain 1: 0.082 seconds (Total)
## Chain 1:
##
## SAMPLING FOR MODEL 'anon_model' NOW (CHAIN 2).
## Chain 2:
## Chain 2: Gradient evaluation took 1.1e-05 seconds
## Chain 2: 1000 transitions using 10 leapfrog steps per transition would take 0.11 seconds.
## Chain 2: Adjust your expectations accordingly!
## Chain 2:
## Chain 2:
## Chain 2: Iteration: 1 / 2000 [ 0%] (Warmup)
## Chain 2: Iteration: 200 / 2000 [ 10%] (Warmup)
## Chain 2: Iteration: 400 / 2000 [ 20%] (Warmup)
## Chain 2: Iteration: 600 / 2000 [ 30%] (Warmup)
## Chain 2: Iteration: 800 / 2000 [ 40%] (Warmup)
## Chain 2: Iteration: 1000 / 2000 [ 50%] (Warmup)
## Chain 2: Iteration: 1001 / 2000 [ 50%] (Sampling)
## Chain 2: Iteration: 1200 / 2000 [ 60%] (Sampling)
## Chain 2: Iteration: 1400 / 2000 [ 70%] (Sampling)
## Chain 2: Iteration: 1600 / 2000 [ 80%] (Sampling)
## Chain 2: Iteration: 1800 / 2000 [ 90%] (Sampling)
## Chain 2: Iteration: 2000 / 2000 [100%] (Sampling)
## Chain 2:
## Chain 2: Elapsed Time: 0.046 seconds (Warm-up)
## Chain 2: 0.033 seconds (Sampling)
## Chain 2: 0.079 seconds (Total)
## Chain 2:
##
## SAMPLING FOR MODEL 'anon_model' NOW (CHAIN 3).
## Chain 3:
## Chain 3: Gradient evaluation took 7e-06 seconds
## Chain 3: 1000 transitions using 10 leapfrog steps per transition would take 0.07 seconds.
## Chain 3: Adjust your expectations accordingly!
## Chain 3:
## Chain 3:
## Chain 3: Iteration: 1 / 2000 [ 0%] (Warmup)
## Chain 3: Iteration: 200 / 2000 [ 10%] (Warmup)
## Chain 3: Iteration: 400 / 2000 [ 20%] (Warmup)
## Chain 3: Iteration: 600 / 2000 [ 30%] (Warmup)
## Chain 3: Iteration: 800 / 2000 [ 40%] (Warmup)
## Chain 3: Iteration: 1000 / 2000 [ 50%] (Warmup)
## Chain 3: Iteration: 1001 / 2000 [ 50%] (Sampling)
## Chain 3: Iteration: 1200 / 2000 [ 60%] (Sampling)
## Chain 3: Iteration: 1400 / 2000 [ 70%] (Sampling)
## Chain 3: Iteration: 1600 / 2000 [ 80%] (Sampling)
## Chain 3: Iteration: 1800 / 2000 [ 90%] (Sampling)
## Chain 3: Iteration: 2000 / 2000 [100%] (Sampling)
## Chain 3:
## Chain 3: Elapsed Time: 0.031 seconds (Warm-up)
## Chain 3: 0.029 seconds (Sampling)
## Chain 3: 0.06 seconds (Total)
## Chain 3:
##
## SAMPLING FOR MODEL 'anon_model' NOW (CHAIN 4).
## Chain 4:
## Chain 4: Gradient evaluation took 1e-05 seconds
## Chain 4: 1000 transitions using 10 leapfrog steps per transition would take 0.1 seconds.
## Chain 4: Adjust your expectations accordingly!
## Chain 4:
## Chain 4:
## Chain 4: Iteration: 1 / 2000 [ 0%] (Warmup)
## Chain 4: Iteration: 200 / 2000 [ 10%] (Warmup)
## Chain 4: Iteration: 400 / 2000 [ 20%] (Warmup)
## Chain 4: Iteration: 600 / 2000 [ 30%] (Warmup)
## Chain 4: Iteration: 800 / 2000 [ 40%] (Warmup)
## Chain 4: Iteration: 1000 / 2000 [ 50%] (Warmup)
## Chain 4: Iteration: 1001 / 2000 [ 50%] (Sampling)
## Chain 4: Iteration: 1200 / 2000 [ 60%] (Sampling)
## Chain 4: Iteration: 1400 / 2000 [ 70%] (Sampling)
## Chain 4: Iteration: 1600 / 2000 [ 80%] (Sampling)
## Chain 4: Iteration: 1800 / 2000 [ 90%] (Sampling)
## Chain 4: Iteration: 2000 / 2000 [100%] (Sampling)
## Chain 4:
## Chain 4: Elapsed Time: 0.03 seconds (Warm-up)
## Chain 4: 0.033 seconds (Sampling)
## Chain 4: 0.063 seconds (Total)
## Chain 4:
# Resumen de los resultados
summary(model)
## Family: gaussian
## Links: mu = identity; sigma = identity
## Formula: y ~ 1
## Data: df (Number of observations: 100)
## Draws: 4 chains, each with iter = 2000; warmup = 1000; thin = 1;
## total post-warmup draws = 4000
##
## Regression Coefficients:
## Estimate Est.Error l-95% CI u-95% CI Rhat Bulk_ESS Tail_ESS
## Intercept 5.18 0.18 4.83 5.54 1.00 3416 2604
##
## Further Distributional Parameters:
## Estimate Est.Error l-95% CI u-95% CI Rhat Bulk_ESS Tail_ESS
## sigma 1.84 0.13 1.60 2.12 1.00 3198 2566
##
## Draws were sampled using sampling(NUTS). For each parameter, Bulk_ESS
## and Tail_ESS are effective sample size measures, and Rhat is the potential
## scale reduction factor on split chains (at convergence, Rhat = 1).
# Graficar la distribución posterior
plot(model)
Explicación:
Modelo : El modelo es una regresión simple donde solo se estima el intercepto, es decir, la media de y. No se incluyen predictores adicionales.
Distribuciones a priori :
Para el intercepto ( Intercept), se usa una distribución normal con media 0 y desviación estándar 10. Para la desviación estándar ( sigma), se usa una distribución Cauchy con media 0 y escala 2. Configuración de MCMC : chains = 4: Se utilizan 4 cadenas para la estimación MCMC. iter = 2000: Se realizan 2000 iteraciones en total. warmup = 1000: Las primeras 1000 iteraciones son para el proceso de “quemado”, donde se descartan las muestras iniciales.
# Cargar el paquete brms
library(brms)
# Simulación de datos
set.seed(123)
data <- rnorm(100, mean = 5, sd = 2)
# Crear un data frame con los datos
df <- data.frame(y = data)
# Definir el modelo bayesiano con distribuciones a priori diferentes
# Usamos distribuciones lognormales y gamma para los parámetros
model <- brm(
y ~ 1, # Modelo con solo un intercepto
data = df,
prior = c(
prior(lognormal(0, 1), class = "Intercept"), # Prior log-normal para el intercepto
prior(gamma(2, 0.5), class = "sigma") # Prior gamma para la desviación estándar
),
chains = 4, # Número de cadenas MCMC
iter = 2000, # Número de iteraciones
warmup = 1000 # Número de iteraciones de quemado
)
## Warning: It appears as if you have specified a lower bounded prior on a parameter that has no natural lower bound.
## If this is really what you want, please specify argument 'lb' of 'set_prior' appropriately.
## Warning occurred for prior
## Intercept ~ lognormal(0, 1)
## Compiling Stan program...
## Start sampling
##
## SAMPLING FOR MODEL 'anon_model' NOW (CHAIN 1).
## Chain 1:
## Chain 1: Gradient evaluation took 4.2e-05 seconds
## Chain 1: 1000 transitions using 10 leapfrog steps per transition would take 0.42 seconds.
## Chain 1: Adjust your expectations accordingly!
## Chain 1:
## Chain 1:
## Chain 1: Iteration: 1 / 2000 [ 0%] (Warmup)
## Chain 1: Iteration: 200 / 2000 [ 10%] (Warmup)
## Chain 1: Iteration: 400 / 2000 [ 20%] (Warmup)
## Chain 1: Iteration: 600 / 2000 [ 30%] (Warmup)
## Chain 1: Iteration: 800 / 2000 [ 40%] (Warmup)
## Chain 1: Iteration: 1000 / 2000 [ 50%] (Warmup)
## Chain 1: Iteration: 1001 / 2000 [ 50%] (Sampling)
## Chain 1: Iteration: 1200 / 2000 [ 60%] (Sampling)
## Chain 1: Iteration: 1400 / 2000 [ 70%] (Sampling)
## Chain 1: Iteration: 1600 / 2000 [ 80%] (Sampling)
## Chain 1: Iteration: 1800 / 2000 [ 90%] (Sampling)
## Chain 1: Iteration: 2000 / 2000 [100%] (Sampling)
## Chain 1:
## Chain 1: Elapsed Time: 0.044 seconds (Warm-up)
## Chain 1: 0.035 seconds (Sampling)
## Chain 1: 0.079 seconds (Total)
## Chain 1:
##
## SAMPLING FOR MODEL 'anon_model' NOW (CHAIN 2).
## Chain 2: Rejecting initial value:
## Chain 2: Error evaluating the log probability at the initial value.
## Chain 2: Exception: lognormal_lpdf: Random variable is -1.21938, but must be nonnegative! (in 'string', line 17, column 2 to column 45)
## Chain 2: Rejecting initial value:
## Chain 2: Error evaluating the log probability at the initial value.
## Chain 2: Exception: lognormal_lpdf: Random variable is -1.55452, but must be nonnegative! (in 'string', line 17, column 2 to column 45)
## Chain 2:
## Chain 2: Gradient evaluation took 7e-06 seconds
## Chain 2: 1000 transitions using 10 leapfrog steps per transition would take 0.07 seconds.
## Chain 2: Adjust your expectations accordingly!
## Chain 2:
## Chain 2:
## Chain 2: Iteration: 1 / 2000 [ 0%] (Warmup)
## Chain 2: Iteration: 200 / 2000 [ 10%] (Warmup)
## Chain 2: Iteration: 400 / 2000 [ 20%] (Warmup)
## Chain 2: Iteration: 600 / 2000 [ 30%] (Warmup)
## Chain 2: Iteration: 800 / 2000 [ 40%] (Warmup)
## Chain 2: Iteration: 1000 / 2000 [ 50%] (Warmup)
## Chain 2: Iteration: 1001 / 2000 [ 50%] (Sampling)
## Chain 2: Iteration: 1200 / 2000 [ 60%] (Sampling)
## Chain 2: Iteration: 1400 / 2000 [ 70%] (Sampling)
## Chain 2: Iteration: 1600 / 2000 [ 80%] (Sampling)
## Chain 2: Iteration: 1800 / 2000 [ 90%] (Sampling)
## Chain 2: Iteration: 2000 / 2000 [100%] (Sampling)
## Chain 2:
## Chain 2: Elapsed Time: 0.042 seconds (Warm-up)
## Chain 2: 0.026 seconds (Sampling)
## Chain 2: 0.068 seconds (Total)
## Chain 2:
##
## SAMPLING FOR MODEL 'anon_model' NOW (CHAIN 3).
## Chain 3:
## Chain 3: Gradient evaluation took 1.3e-05 seconds
## Chain 3: 1000 transitions using 10 leapfrog steps per transition would take 0.13 seconds.
## Chain 3: Adjust your expectations accordingly!
## Chain 3:
## Chain 3:
## Chain 3: Iteration: 1 / 2000 [ 0%] (Warmup)
## Chain 3: Iteration: 200 / 2000 [ 10%] (Warmup)
## Chain 3: Iteration: 400 / 2000 [ 20%] (Warmup)
## Chain 3: Iteration: 600 / 2000 [ 30%] (Warmup)
## Chain 3: Iteration: 800 / 2000 [ 40%] (Warmup)
## Chain 3: Iteration: 1000 / 2000 [ 50%] (Warmup)
## Chain 3: Iteration: 1001 / 2000 [ 50%] (Sampling)
## Chain 3: Iteration: 1200 / 2000 [ 60%] (Sampling)
## Chain 3: Iteration: 1400 / 2000 [ 70%] (Sampling)
## Chain 3: Iteration: 1600 / 2000 [ 80%] (Sampling)
## Chain 3: Iteration: 1800 / 2000 [ 90%] (Sampling)
## Chain 3: Iteration: 2000 / 2000 [100%] (Sampling)
## Chain 3:
## Chain 3: Elapsed Time: 0.046 seconds (Warm-up)
## Chain 3: 0.031 seconds (Sampling)
## Chain 3: 0.077 seconds (Total)
## Chain 3:
##
## SAMPLING FOR MODEL 'anon_model' NOW (CHAIN 4).
## Chain 4:
## Chain 4: Gradient evaluation took 1.2e-05 seconds
## Chain 4: 1000 transitions using 10 leapfrog steps per transition would take 0.12 seconds.
## Chain 4: Adjust your expectations accordingly!
## Chain 4:
## Chain 4:
## Chain 4: Iteration: 1 / 2000 [ 0%] (Warmup)
## Chain 4: Iteration: 200 / 2000 [ 10%] (Warmup)
## Chain 4: Iteration: 400 / 2000 [ 20%] (Warmup)
## Chain 4: Iteration: 600 / 2000 [ 30%] (Warmup)
## Chain 4: Iteration: 800 / 2000 [ 40%] (Warmup)
## Chain 4: Iteration: 1000 / 2000 [ 50%] (Warmup)
## Chain 4: Iteration: 1001 / 2000 [ 50%] (Sampling)
## Chain 4: Iteration: 1200 / 2000 [ 60%] (Sampling)
## Chain 4: Iteration: 1400 / 2000 [ 70%] (Sampling)
## Chain 4: Iteration: 1600 / 2000 [ 80%] (Sampling)
## Chain 4: Iteration: 1800 / 2000 [ 90%] (Sampling)
## Chain 4: Iteration: 2000 / 2000 [100%] (Sampling)
## Chain 4:
## Chain 4: Elapsed Time: 0.044 seconds (Warm-up)
## Chain 4: 0.033 seconds (Sampling)
## Chain 4: 0.077 seconds (Total)
## Chain 4:
# Resumen de los resultados
summary(model)
## Family: gaussian
## Links: mu = identity; sigma = identity
## Formula: y ~ 1
## Data: df (Number of observations: 100)
## Draws: 4 chains, each with iter = 2000; warmup = 1000; thin = 1;
## total post-warmup draws = 4000
##
## Regression Coefficients:
## Estimate Est.Error l-95% CI u-95% CI Rhat Bulk_ESS Tail_ESS
## Intercept 5.17 0.19 4.79 5.54 1.00 2792 2316
##
## Further Distributional Parameters:
## Estimate Est.Error l-95% CI u-95% CI Rhat Bulk_ESS Tail_ESS
## sigma 1.85 0.13 1.61 2.14 1.00 3244 2371
##
## Draws were sampled using sampling(NUTS). For each parameter, Bulk_ESS
## and Tail_ESS are effective sample size measures, and Rhat is the potential
## scale reduction factor on split chains (at convergence, Rhat = 1).
# Graficar la distribución posterior
plot(model)
Explicación:
Distribuciones a priori :
Para el intercepto(`InterceptarIntercept), hemocon pa log-normallognormal(0, 1), lo Para la desviación estándar(sisigma), hemosgamacon paragamma(2, 0.5), Configuración de MCMC :
chains = 4: Usamos 4 cadenas para la estimación MCMC. iter = 2000: Se realizan 2000 iteraciones. warmup = 1000: Las primeras 1000 iteraciones son para el proceso de quemado, que se descartan.
La minería de datos es el proceso de explorar grandes volúmenes de datos para descubrir patrones, tendencias y relaciones que no son evidentes a simple vista. Este proceso utiliza técnicas de estadística, aprendizaje automático y bases de datos para transformar los datos en conocimiento útil que puede ser utilizado para tomar decisiones informadas.
# Instalar y cargar el paquete necesario
install.packages("rpart.plot")
## package 'rpart.plot' successfully unpacked and MD5 sums checked
##
## The downloaded binary packages are in
## C:\Users\Becario SAIS\AppData\Local\Temp\RtmpKeF73B\downloaded_packages
library(rpart.plot)
## Warning: package 'rpart.plot' was built under R version 4.4.2
## Cargando paquete requerido: rpart
library(rpart)
# Cargar los datos
data(iris)
# Crear un modelo de árbol de decisión con rpart
tree_model <- rpart(Species ~ Sepal.Length + Sepal.Width + Petal.Length + Petal.Width,
data = iris, method = "class")
# Graficar el árbol con rpart.plot
rpart.plot(tree_model)
# Cargar datos
data(iris)
# Realizar clustering con K-means
set.seed(123)
kmeans_model <- kmeans(iris[, -5], centers = 3)
# Ver los resultados del clustering
table(kmeans_model$cluster, iris$Species)
##
## setosa versicolor virginica
## 1 50 0 0
## 2 0 48 14
## 3 0 2 36
# Graficar
plot(iris$Sepal.Length, iris$Sepal.Width, col = kmeans_model$cluster, pch = 19)
install.packages("arules")
## package 'arules' successfully unpacked and MD5 sums checked
## Warning: cannot remove prior installation of package 'arules'
## Warning in file.copy(savedcopy, lib, recursive = TRUE): problema al copiar
## C:\Users\Becario
## SAIS\AppData\Local\Programs\R\R-4.4.1\library\00LOCK\arules\libs\x64\arules.dll
## a C:\Users\Becario
## SAIS\AppData\Local\Programs\R\R-4.4.1\library\arules\libs\x64\arules.dll:
## Permission denied
## Warning: restored 'arules'
##
## The downloaded binary packages are in
## C:\Users\Becario SAIS\AppData\Local\Temp\RtmpKeF73B\downloaded_packages
library(arules)
## Warning: package 'arules' was built under R version 4.4.2
## Cargando paquete requerido: Matrix
##
## Adjuntando el paquete: 'arules'
## The following object is masked from 'package:dplyr':
##
## recode
## The following objects are masked from 'package:base':
##
## abbreviate, write
# Cargar los datos (usando un conjunto de ejemplo)
data("Groceries")
# Generar reglas de asociación
rules <- apriori(Groceries, parameter = list(supp = 0.01, conf = 0.5))
## Apriori
##
## Parameter specification:
## confidence minval smax arem aval originalSupport maxtime support minlen
## 0.5 0.1 1 none FALSE TRUE 5 0.01 1
## maxlen target ext
## 10 rules TRUE
##
## Algorithmic control:
## filter tree heap memopt load sort verbose
## 0.1 TRUE TRUE FALSE TRUE 2 TRUE
##
## Absolute minimum support count: 98
##
## set item appearances ...[0 item(s)] done [0.00s].
## set transactions ...[169 item(s), 9835 transaction(s)] done [0.00s].
## sorting and recoding items ... [88 item(s)] done [0.00s].
## creating transaction tree ... done [0.00s].
## checking subsets of size 1 2 3 4 done [0.00s].
## writing ... [15 rule(s)] done [0.00s].
## creating S4 object ... done [0.00s].
# Ver las reglas
inspect(rules)
## lhs rhs support
## [1] {curd, yogurt} => {whole milk} 0.01006609
## [2] {other vegetables, butter} => {whole milk} 0.01148958
## [3] {other vegetables, domestic eggs} => {whole milk} 0.01230300
## [4] {yogurt, whipped/sour cream} => {whole milk} 0.01087951
## [5] {other vegetables, whipped/sour cream} => {whole milk} 0.01464159
## [6] {pip fruit, other vegetables} => {whole milk} 0.01352313
## [7] {citrus fruit, root vegetables} => {other vegetables} 0.01037112
## [8] {tropical fruit, root vegetables} => {other vegetables} 0.01230300
## [9] {tropical fruit, root vegetables} => {whole milk} 0.01199797
## [10] {tropical fruit, yogurt} => {whole milk} 0.01514997
## [11] {root vegetables, yogurt} => {other vegetables} 0.01291307
## [12] {root vegetables, yogurt} => {whole milk} 0.01453991
## [13] {root vegetables, rolls/buns} => {other vegetables} 0.01220132
## [14] {root vegetables, rolls/buns} => {whole milk} 0.01270971
## [15] {other vegetables, yogurt} => {whole milk} 0.02226741
## confidence coverage lift count
## [1] 0.5823529 0.01728521 2.279125 99
## [2] 0.5736041 0.02003050 2.244885 113
## [3] 0.5525114 0.02226741 2.162336 121
## [4] 0.5245098 0.02074225 2.052747 107
## [5] 0.5070423 0.02887646 1.984385 144
## [6] 0.5175097 0.02613116 2.025351 133
## [7] 0.5862069 0.01769192 3.029608 102
## [8] 0.5845411 0.02104728 3.020999 121
## [9] 0.5700483 0.02104728 2.230969 118
## [10] 0.5173611 0.02928317 2.024770 149
## [11] 0.5000000 0.02582613 2.584078 127
## [12] 0.5629921 0.02582613 2.203354 143
## [13] 0.5020921 0.02430097 2.594890 120
## [14] 0.5230126 0.02430097 2.046888 125
## [15] 0.5128806 0.04341637 2.007235 219
library(forecast)
# Usar el conjunto de datos AirPassengers (serie de tiempo de pasajeros mensuales)
data("AirPassengers")
ts_data <- AirPassengers
# Ajustar un modelo ARIMA
fit <- auto.arima(ts_data)
# Realizar predicciones
forecasted_values <- forecast(fit, h = 12)
# Graficar las predicciones
plot(forecasted_values)
La estadística multivariada es una rama de la estadística que se enfoca en el análisis de datos que contienen múltiples variables a la vez. A diferencia de la estadística univariada, que estudia una sola variable a la vez, la estadística multivariada permite comprender mejor las relaciones y patrones complejos que existen entre varias variables al mismo tiempo.
En un contexto multivariado, las variables no se analizan de manera independiente, sino que se estudian en conjunto para entender cómo interactúan entre sí. Esto es crucial en muchas áreas, como la investigación de mercados, la biología, la psicología, la economía, entre otras, donde los fenómenos que se estudian suelen estar influenciados por múltiples factores simultáneamente.
# Cargar el conjunto de datos iris
data(iris)
# Realizar PCA en las variables numéricas
pca_result <- prcomp(iris[, 1:4], center = TRUE, scale. = TRUE)
# Resumen de la PCA
summary(pca_result)
## Importance of components:
## PC1 PC2 PC3 PC4
## Standard deviation 1.7084 0.9560 0.38309 0.14393
## Proportion of Variance 0.7296 0.2285 0.03669 0.00518
## Cumulative Proportion 0.7296 0.9581 0.99482 1.00000
# Graficar los primeros dos componentes principales
plot(pca_result$x[, 1:2], col = iris$Species, pch = 19,
xlab = "Componente Principal 1", ylab = "Componente Principal 2")
# Instalar el paquete vegan si no lo tienes
install.packages("vegan")
## package 'vegan' successfully unpacked and MD5 sums checked
## Warning: cannot remove prior installation of package 'vegan'
## Warning in file.copy(savedcopy, lib, recursive = TRUE): problema al copiar
## C:\Users\Becario
## SAIS\AppData\Local\Programs\R\R-4.4.1\library\00LOCK\vegan\libs\x64\vegan.dll a
## C:\Users\Becario
## SAIS\AppData\Local\Programs\R\R-4.4.1\library\vegan\libs\x64\vegan.dll:
## Permission denied
## Warning: restored 'vegan'
##
## The downloaded binary packages are in
## C:\Users\Becario SAIS\AppData\Local\Temp\RtmpKeF73B\downloaded_packages
library(vegan)
## Warning: package 'vegan' was built under R version 4.4.2
## Cargando paquete requerido: permute
## Warning: package 'permute' was built under R version 4.4.2
## Cargando paquete requerido: lattice
# Crear dos matrices de ejemplo con el mismo número de filas
set.seed(123)
X <- matrix(rnorm(50), ncol = 5) # Conjunto de variables X
Y <- matrix(rnorm(50), ncol = 5) # Conjunto de variables Y
# Verificar que ambas matrices tengan el mismo número de filas
nrow(X) # Número de filas de X
## [1] 10
nrow(Y) # Número de filas de Y
## [1] 10
# Realizar el análisis de correlación canónica
cca_result <- cancor(X, Y)
# Ver los resultados
cca_result
## $cor
## [1] 1.00000000 0.97996009 0.81621875 0.54896216 0.03285199
##
## $xcoef
## [,1] [,2] [,3] [,4] [,5]
## [1,] 0.03430428 0.30561470 -0.39131533 -0.12839631 0.40385571
## [2,] -0.16363157 0.04990686 0.01784659 -0.12204146 -0.41890214
## [3,] -0.35069202 0.25285724 0.15674673 0.02144605 -0.10658529
## [4,] 0.19949764 0.17395632 0.84784958 0.24224586 -0.46155005
## [5,] -0.01399219 0.14147250 -0.28221653 0.18280083 -0.04046779
##
## $ycoef
## [,1] [,2] [,3] [,4] [,5]
## [1,] 0.20340298 -0.3012591 0.21099050 0.007078762 0.43229726
## [2,] -0.17226193 -0.3839216 0.06049137 -0.218047373 0.07012702
## [3,] 0.14298712 0.2560778 0.14497032 -0.221565265 0.06116391
## [4,] -0.23454880 0.5115741 0.19688646 0.159223182 0.37575288
## [5,] 0.09357301 -0.2015918 0.44297831 -0.037499542 0.13701362
##
## $xcenter
## [1] 0.074625644 0.208621961 -0.424558873 0.322044550 -0.008715537
##
## $ycenter
## [1] 0.2216860 0.1230837 -0.3629178 0.3130953 0.4370942
# Cargar el conjunto de datos mtcars
data(mtcars)
# Realizar una regresión multivariada con mpg y qsec como variables dependientes
# y las demás como independientes
multiv_regression <- lm(cbind(mpg, qsec) ~ wt + hp + drat + gear, data = mtcars)
# Resumen del modelo
summary(multiv_regression)
## Response mpg :
##
## Call:
## lm(formula = mpg ~ wt + hp + drat + gear, data = mtcars)
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.1924 -1.8558 -0.3826 1.0345 5.8728
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 28.57774 6.38283 4.477 0.000124 ***
## wt -3.01579 0.88303 -3.415 0.002030 **
## hp -0.03503 0.01021 -3.432 0.001946 **
## drat 1.15633 1.46652 0.788 0.437282
## gear 0.59509 1.01253 0.588 0.561599
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2.592 on 27 degrees of freedom
## Multiple R-squared: 0.8389, Adjusted R-squared: 0.8151
## F-statistic: 35.16 on 4 and 27 DF, p-value: 2.428e-10
##
##
## Response qsec :
##
## Call:
## lm(formula = qsec ~ wt + hp + drat + gear, data = mtcars)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.8137 -0.5457 -0.0545 0.3084 3.7931
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 19.530279 2.766300 7.060 1.37e-07 ***
## wt 0.826863 0.382703 2.161 0.0398 *
## hp -0.026199 0.004423 -5.923 2.59e-06 ***
## drat 0.098870 0.635587 0.156 0.8775
## gear -0.231669 0.438825 -0.528 0.6019
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.123 on 27 degrees of freedom
## Multiple R-squared: 0.6559, Adjusted R-squared: 0.6049
## F-statistic: 12.86 on 4 and 27 DF, p-value: 5.489e-06
# Cargar el conjunto de datos iris
data(iris)
# Calcular la matriz de distancias
dist_matrix <- dist(iris[, 1:4])
# Realizar el clúster jerárquico
hca_result <- hclust(dist_matrix)
# Graficar el dendrograma
plot(hca_result)
# Cargar el conjunto de datos iris
data(iris)
# Realizar LDA para predecir la especie en función de las variables numéricas
library(MASS)
##
## Adjuntando el paquete: 'MASS'
## The following object is masked from 'package:dplyr':
##
## select
lda_model <- lda(Species ~ Sepal.Length + Sepal.Width + Petal.Length + Petal.Width, data = iris)
# Resumen del modelo
summary(lda_model)
## Length Class Mode
## prior 3 -none- numeric
## counts 3 -none- numeric
## means 12 -none- numeric
## scaling 8 -none- numeric
## lev 3 -none- character
## svd 2 -none- numeric
## N 1 -none- numeric
## call 3 -none- call
## terms 3 terms call
## xlevels 0 -none- list
# Predecir con el modelo
lda_pred <- predict(lda_model)
# Graficar los resultados
plot(lda_pred$x[, 1:2], col = iris$Species, pch = 19,
xlab = "LD1", ylab = "LD2")
# Cargar el conjunto de datos iris
data(iris)
# Realizar MANOVA para comparar las medias de las variables numéricas
manova_result <- manova(cbind(Sepal.Length, Sepal.Width, Petal.Length, Petal.Width) ~ Species, data = iris)
# Ver los resultados
summary(manova_result)
## Df Pillai approx F num Df den Df Pr(>F)
## Species 2 1.1919 53.466 8 290 < 2.2e-16 ***
## Residuals 147
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
En esta página se presentan ejemplos de código y técnicas estadísticas que pueden ser útiles para quienes estén interesados en aplicar métodos cuantitativos a diferentes problemas. Aunque no se abordan interpretaciones detalladas de los resultados, los códigos proporcionados pueden servir como base para realizar análisis más profundos. Si desean una interpretación más específica de los resultados o tienen alguna pregunta sobre cómo aplicar estos métodos en sus propios proyectos, no duden en enviarme un mensaje. Estoy disponible para ayudar y proporcionar más detalles sobre cómo interpretar los resultados obtenidos con estas técnicas.
Mas información para un análisis o interpretación al correo siguiente: