{r setup, include=FALSE} knitr::opts_chunk$set(echo = TRUE)
Un loop (o bucle) en R es una estructura que permite repetir una acción varias veces sin tener que escribir el mismo código una y otra vez.
Repetir cálculos (como sumar valores o aplicar fórmulas a varios datos).
Procesar elementos de un vector, lista o tabla.
Automatizar tareas repetitivas (como limpiar datos o generar gráficos).
Sirve para repetir una acción un número específico de veces o recorrer elementos de un vector, lista o data frame.
{undefined echo=TRUE} # Crear un vector numeros <- c(1, 2, 3, 4, 5)
for (n in numeros) { print(n * 2) # Multiplica cada número por 2 }
Ejecuta un bloque de código mientras se cumpla una condición.
{undefined echo=TRUE} x <- 1
while (x <= 5) { print(x) x <- x + 1 # Incrementa x en 1 #Imprime los números del 1 al 5. #si no cambias la condición dentro del bucle, puede volverse infinito. }
Ejecuta el código indefinidamente hasta que se usa break para detenerlo.
{undefined echo=TRUE} x <- 1
repeat { print(x) x <- x + 1 if (x > 5) { break # Sale del bucle } }
En este informe, se analiza la insesgadez en la estimación de un modelo de regresión lineal simple. Se genera una población y se extraen 100 muestras aleatorias de tamaño 100, cada una utilizada para estimar el modelo de regresión. Se analizan los coeficientes obtenidos y su distribución.
Establece la semilla aleatoria para garantizar que los resultados sean reproducibles.
{undefined echo=TRUE} set.seed(1)
Media (μ) = 20
Desviación estándar (σ) = 2
round(…, 1): Redondea los valores a una sola decimal.
{undefined echo=TRUE} x =round(rnorm(1000, 20, 2), 1) error=round(rnorm(1000, 0, 0.2), 1)
50 es el intercepto.
1.3 es la pendiente.
error añade ruido aleatorio.
{undefined echo=TRUE} y= 50 + (1.3 * x) + error
Convierte las variables x y y en un data frame, que servirá como la población de estudio.
{undefined echo=TRUE} datos= data.frame(y, x)
Crea una lista vacía para guardar los modelos de regresión.
{undefined echo=TRUE} modelos=list()
Inicia un bucle for que repetirá el proceso 100 veces.
{undefined echo=TRUE} for (i in 1:100) {
Fija una semilla distinta en cada iteración para garantizar diferentes muestras.
{undefined echo=TRUE} set.seed(i + 1)
Toma una muestra aleatoria de 100 observaciones de datos.
{undefined echo=TRUE} muestra = datos[sample(nrow(datos), 100), ]
Ajustar el modelo de regresión
{undefined echo=TRUE}
modelos[[i]] <- lm(y ~ x, data = muestra)
Calcula el promedio de las pendientes de los 100 investigadores, para verificar la insesgadez del beta
{undefined echo=TRUE} beta1_values <- sapply(modelos, function(mod) mod$coefficients[[“x”]]) beta1_promedio <- mean(beta1_values)
{undefined echo=TRUE} hist(beta1_values, main = “Distribución de las estimaciones de B1”, xlab = “Valor estimado”, col = “lightblue”, border = “white”) abline(v = 1.3, col = “red”, lwd = 2) # Valor verdadero abline(v = beta1_promedio, col = “blue”, lty = 2) # Promedio estimado legend(“topright”, legend = c(“Valor verdadero”, “Promedio estimado”), col = c(“red”, “blue”), lty = c(1, 2), lwd = c(2, 1))

Podemos visualizar que en el modelo se cumple la propiedad de insesgadez, al obtener un valor estimado (1.3000333) que tiene una coincidencia visible con la pediente real (1.3) elimando la dispersion de los datos como posible resultado. El histograma de las estimaciones revela una distribución aproximadamente normal centrada en el valor verdadero, mostrando la variabilidad natural que surge del muestreo aleatorio de 100 muestras de 100 sujetos.