¿Qué es un loop en R?

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.

Sirve, por ejemplo, para:

Introducción

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.

Generación de Datos

Semilla inicial

Establece la semilla aleatoria para garantizar que los resultados sean reproducibles.

set.seed(1)

Generar la población

Media (μ) = 20

Desviación estándar (σ) = 2

round(…, 1): Redondea los valores a una sola decimal.

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.

y= 50 + (1.3 * x) + error

Crear la base de datos

Convierte las variables x y y en un data frame, que servirá como la población de estudio.

datos= data.frame(y, x)

Generación de 100 modelos

Inicializar una lista para almacenar los modelos

Crea una lista vacía para guardar los modelos de regresión.

modelos=list()

Generar 100 versiones diferentes con un loop

Inicia un bucle for que repetirá el proceso 100 veces.

for (i in 1:100) {

Fija una semilla distinta en cada iteración para garantizar diferentes muestras.

set.seed(i + 1)  

Toma una muestra aleatoria de 100 observaciones de datos.

muestra = datos[sample(nrow(datos), 100), ]  

Ajustar el modelo de regresión


 modelos[[i]] <- lm(y ~ x, data = muestra)

Cálculo del promedio de la pendiente x

Calcular el promedio de la pendiente (coeficiente de x) en los 100 modelos

Calcula el promedio de las pendientes de los 100 investigadores, para verificar la insesgadez del beta

beta1_values <- sapply(modelos, function(mod) mod$coefficients[["x"]])
beta1_promedio <- mean(beta1_values)

RESULTADOS

Grafico

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))

http://127.0.0.1:40307/graphics/20763984-1740-47c7-818a-924c2c25057e.png

Interpretacion

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.