{r setup, include=FALSE} knitr::opts_chunk$set(echo = TRUE)

Loop

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.

Tipos de Loop en R

For

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)

Bucle for

for (n in numeros) { print(n * 2) # Multiplica cada número por 2 }

While

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. }

Repeat

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

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.

{undefined echo=TRUE} set.seed(1)

Generar la población

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

Crear la base de datos

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)

Generación de 100 modelos

Inicializar una lista para almacenar los modelos

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

{undefined echo=TRUE} modelos=list()

Generar 100 versiones diferentes con un loop

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)

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

{undefined echo=TRUE} beta1_values <- sapply(modelos, function(mod) mod$coefficients[[“x”]]) beta1_promedio <- mean(beta1_values)

RESULTADOS

Grafico

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

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.