library(tidyverse)
set.seed(2025) # for reproducibility
n <- 500 # sample size
X <- matrix(rnorm(n * 5), ncol = 5) # 5 predictors
beta <- c(.3, -.2, .4, -.1, .2) # coefficients
y_linear <- X %*% beta + rnorm(n) # linear combination of X and beta with some noise
df_linear <- cbind(y_linear, X) |> as_tibble()
colnames(df_linear) <- c("Y", "X1", "X2", "X3", "X4", "X5")
arrow::write_parquet(df_linear, "data/df_linear.parquet")3. Generar los datos
Agenda
Parte I
- Generar los datos
- Explorar los datos
- Preprocesar los datos
Simular datos con interacción
# Add interaction terms
X_interaction <- cbind(X[, 1], X[, 2], X[, 3], X[, 4], X[, 5], X[, 1] * X[, 1], X[, 3] * X[, 3])
beta_interaction <- c(.3, -.2, .4, -.1, .2, .6, .8)
y_interaction <- X_interaction %*% beta_interaction + rnorm(n)
# Combine into a tibble
df_interaction <- cbind(y_interaction, X_interaction) |>
as_tibble() |>
select(-V7, -V8)
colnames(df_interaction) <- c("Y", "X1", "X2", "X3", "X4", "X5")
arrow::write_parquet(df_interaction, "data/df_interaction.parquet")Simular datos aleatorios
y_random <- rnorm(n)
# Combine into a tibble
df_random <- cbind(y_random, X) %>% as_tibble()
colnames(df_random) <- c("Y", "X1", "X2", "X3", "X4", "X5")Simular datos con muchos predictores (caso Lasso)
La siguiente base contiene decenas de predictores Gaussianos estandarizados donde solo un subconjunto pequeño tiene efecto real sobre Y. Es ideal para mostrar por qué la regresión Lasso (glmnet, penalty, mixture) ayuda a seleccionar variables relevantes y a reducir la varianza del modelo.
set.seed(9001)
n_lasso <- 600
p_lasso <- 60
X_lasso <- matrix(rnorm(n_lasso * p_lasso), nrow = n_lasso, ncol = p_lasso)
# Solo ocho coeficientes distintos de cero (positivos y negativos)
beta_signal <- c(runif(4, 0.6, 1.5), runif(4, -1.5, -0.6))
beta_noise <- rep(0, p_lasso - length(beta_signal))
beta_lasso <- c(beta_signal, beta_noise)
y_lasso <- X_lasso %*% beta_lasso + rnorm(n_lasso, sd = 1.5)
df_lasso <- X_lasso |>
as_tibble() |>
setNames(paste0("X", seq_len(p_lasso))) |>
mutate(Y = as.numeric(y_lasso), .before = 1)
variables_importantes <- tibble(
variable = paste0("X", seq_len(length(beta_signal))),
beta_real = round(beta_signal, 3)
)Usa
df_lassocomo entrada para un workflow conlinear_reg(penalty = tune(), mixture = 1)y contrasta los coeficientes estimados frente avariables_importantespara ilustrar la selección automática de predictores.