Se acuerda que la evaluación del trabajo aumenta también con la calidad y cantidad de los comentarios proporcionados.
SudAmerica.ods, Baseball.ods: en mi sitio www.camiz.it, en la parte Sito Universitario, cliquen sobre Didattica en el menu, luego sobre en la nueva página del curso.
Da bajo encuentran los archivos de datos, de varios formados y la documentación.
Para leer-los se necesita de instalar el paquete readODS. Puede ser que este pide de instalar la versión especial R-dev, así como unas librarías. En ese caso hacer-lo.
en la clase, correr el modelo lineal de IDH con Tasa_urban. de SudAmerica, con los gráficos de dispersión (Tasa_urban con IDH) con la recta de regresión (abline(a,b)), gráfico de valores observados con valores estimados (eta con IDH) y recta (abline(0,1)) y gráfico de resíduos (eta con residuos) con recta horizontal (abline(0,0)).
que haga todo, es decir una estructura de tipo:
out <- list() # lista con resultados
… comandos …
… incluyendo los varios resultados como elementos en out así:
out$
…………….
out
}
de modo que el comando
(out <-
proporciona la lista en out y también en la pantalla (debido a
las parentesis).
con SudAmerica y Baseball (Winning con Batting)
y commentar los resultados de ambos
empleando la función lm() también con gráficos, como en la clase para los dos modelos.
¿Se resultan los mismos resultados? (¡Esperamos que si!)
de los datos de Baseball como en la clase, con gráfico relativo.
.Rmd y .html y enviar los dos a sergio@camiz.it dentro del 19 de Abril.
analyze_and_plot_generic(“SudAmerica.csv”, x_var = “Tajo_urbano”, y_var = “IDH”, output_prefix = “sudamerica”)
knitr::opts_chunk$set(echo = TRUE)
library(ggplot2) # <--- Asegúrate de incluir esto aquí
## Warning: package 'ggplot2' was built under R version 4.5.3
analyze_and_plot_generic <- function(csv_path, x_var, y_var, id_col_index = 1, output_prefix = "analisis") {
# 1. Leer los datos
# read.csv lee el archivo, y stringsAsFactors=FALSE evita que los nombres se conviertan en factores
df <- read.csv(csv_path, stringsAsFactors = FALSE)
# Renombrar la columna identificadora (en R los índices empiezan en 1, no en 0)
colnames(df)[id_col_index] <- "ID_Observacion"
# Verificar que las variables existen en el data.frame
if (!(x_var %in% colnames(df)) || !(y_var %in% colnames(df))) {
stop(paste("Error: Las columnas", x_var, "o", y_var, "no existen en el archivo."))
}
# 2. Ajustar el Modelo Lineal (Y vs X)
# Creamos la fórmula dinámicamente como texto y la convertimos a objeto de fórmula
formula_str <- paste(y_var, "~", x_var)
modelo <- lm(as.formula(formula_str), data = df)
cat("====================== RESUMEN DEL MODELO ======================\n")
print(summary(modelo))
cat("================================================================\n")
# 3. Gráfico de dispersión con el modelo lineal
p1 <- ggplot(df, aes(x = .data[[x_var]], y = .data[[y_var]])) +
geom_point(color = "blue", size = 2.5) +
geom_smooth(method = "lm", se = FALSE, color = "red") +
theme_minimal() +
theme(panel.grid.major = element_line(linetype = "dashed", color="gray", size = 0.5)) +
labs(title = paste("Dispersión y Ajuste Lineal:", y_var, "vs", x_var),
x = x_var,
y = y_var)
# Guardar el gráfico de dispersión
ggsave(paste0(output_prefix, "_dispersion.png"), plot = p1, width = 8, height = 6)
# Mostrar el gráfico en el visor de R
print(p1)
# 4. Gráficos de Diagnóstico (Ventana separada 2x2)
# R base tiene la función plot() que genera automáticamente los 4 gráficos exactos que necesitas
# Guardar los gráficos en un archivo PNG
png(paste0(output_prefix, "_diagnostico.png"), width = 1000, height = 800, res = 100)
par(mfrow = c(2, 2)) # Divide la ventana gráfica en una matriz 2x2
plot(modelo) # Genera: Residuos vs Predichos, Q-Q, Scale-Location y Residuos vs Leverage
par(mfrow = c(1, 1)) # Restaura la ventana gráfica a 1x1
dev.off() # Cierra el dispositivo de guardado
# Mostrar los gráficos de diagnóstico en la ventana activa de R
# Presiona 'Enter' en la consola para ir viéndolos si no usas par(mfrow)
par(mfrow = c(2, 2))
plot(modelo)
par(mfrow = c(1, 1))
}
SudAmerica <- read.csv("C:/Users/Lenovo/OneDrive/Desktop/GWDC_RODOLFO_GALECIO/R_project/SudAmerica.csv", header=TRUE)
analyze_and_plot_generic("SudAmerica.csv", x_var = "Tajo_urbano", y_var = "IDH", output_prefix = "sudamerica")
## ====================== RESUMEN DEL MODELO ======================
##
## Call:
## lm(formula = as.formula(formula_str), data = df)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.22772 -0.01044 0.01240 0.03322 0.14512
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.318545 0.108546 2.935 0.01358 *
## Tajo_urbano 0.005945 0.001609 3.694 0.00354 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.098 on 11 degrees of freedom
## Multiple R-squared: 0.5537, Adjusted R-squared: 0.5131
## F-statistic: 13.65 on 1 and 11 DF, p-value: 0.003537
##
## ================================================================
## Warning: The `size` argument of `element_line()` is deprecated as of ggplot2 3.4.0.
## ℹ Please use the `linewidth` argument instead.
## This warning is displayed once per session.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was generated.
## `geom_smooth()` using formula = 'y ~ x'
## `geom_smooth()` using formula = 'y ~ x'
attach(SudAmerica)
lmSA <- lm(IDH~Tajo_urbano,data=SudAmerica)
plot(Tajo_urbano,IDH)
abline(lmSA,col="red")
points(Tajo_urbano,lmSA$fitted.values,col="red")
summary(lmSA)
##
## Call:
## lm(formula = IDH ~ Tajo_urbano, data = SudAmerica)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.22772 -0.01044 0.01240 0.03322 0.14512
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.318545 0.108546 2.935 0.01358 *
## Tajo_urbano 0.005945 0.001609 3.694 0.00354 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.098 on 11 degrees of freedom
## Multiple R-squared: 0.5537, Adjusted R-squared: 0.5131
## F-statistic: 13.65 on 1 and 11 DF, p-value: 0.003537
par(mfrow=c(2,2))
plot(lmSA)
par(mfrow=c(1,1))
detach(SudAmerica)
Baseball <- read.csv("C:/Users/Lenovo/OneDrive/Desktop/GWDC_RODOLFO_GALECIO/R_project/Baseball.csv", header=TRUE)
analyze_and_plot_generic("Baseball.csv", x_var = "BattingAvg", y_var = "WinningPerc", output_prefix = "baseball")
## ====================== RESUMEN DEL MODELO ======================
##
## Call:
## lm(formula = as.formula(formula_str), data = df)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.14627 -0.03653 -0.01800 0.05004 0.13132
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -0.5245 0.5154 -1.018 0.3289
## BattingAvg 3.9189 1.9694 1.990 0.0699 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.07017 on 12 degrees of freedom
## Multiple R-squared: 0.2481, Adjusted R-squared: 0.1854
## F-statistic: 3.959 on 1 and 12 DF, p-value: 0.06989
##
## ================================================================
## `geom_smooth()` using formula = 'y ~ x'
## `geom_smooth()` using formula = 'y ~ x'
attach(Baseball)
lmBA <- lm(WinningPerc~BattingAvg,data=Baseball)
plot(BattingAvg,WinningPerc)
abline(lmBA,col="red")
points(BattingAvg,lmBA$fitted.values,col="red")
summary(lmBA)
##
## Call:
## lm(formula = WinningPerc ~ BattingAvg, data = Baseball)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.14627 -0.03653 -0.01800 0.05004 0.13132
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -0.5245 0.5154 -1.018 0.3289
## BattingAvg 3.9189 1.9694 1.990 0.0699 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.07017 on 12 degrees of freedom
## Multiple R-squared: 0.2481, Adjusted R-squared: 0.1854
## F-statistic: 3.959 on 1 and 12 DF, p-value: 0.06989
par(mfrow=c(2,2))
plot(lmBA)
par(mfrow=c(1,1))
detach(Baseball)
En ambos casos, tanto para los datos del archivo SudAmerica.csv como para los datos del archivo Baseball.csv los resultados fueron los mismos usando la función propuesta como usando el método regular desarrollado en clase, lo que demuestra coherencia en la funcionalidad de la función propuesta.
Observamos que el R cuadrado ajustado es significativamente mayor para el caso de la data de SudAmerica: aproximadamente el 51% de los datos es explicado por el modelo lineal mientras que para el caso de los datos del Baseball, el modelo lineal sólo explica el 19% de los datos.
Por cada punto que aumenta el Tajo Urbano, se produce un incremento de 0.0059 en el valor del IDH.
Por cada punto que aumenta el BattingAvg, se produce un incremento de 3.9 en el valor del WinningPerc.
El p-valor para Tajo_urbano es 0.004, es decir, que sólo un 0.4% de probabilidad de que la relación entre el Tajo urbano y el IDH sea pura casualidad. El resultado es estadísticamente significativo i.e. menor a 0.05
El p-valor para BattingAvg es 0.07, este es un valor mayor al benchmark establecido 0.05 para establecer la validez de la significancia estadística de la relación, no podemos afirmar nada al respecto.
El análisis gráfico para SudAmerica muestra:
1. Residuos vs Valores Predichos: La línea roja tiene una ligerísima curva en el centro, pero en general es bastante plana y los puntos no forman patrones raros . Esto confirma que podemos usar una línea recta para explicar el IDH.
2. Q-Q: Los errores de nuestro modelo se distribuyen de forma normal, los puntos siguen la línea roja casi a la perfección, con apenas un par de ligeros desvíos en los extremos.
3. Raiz de residuos: se evalúa la homocedasticidad, los puntos están bien esparcidos de arriba a abajo a lo largo del eje. Esto significa que el modelo es igual de consistente prediciendo países con IDH bajo que países con IDH alto.
4. Distancia de CooK: evaluamos la presencia de outliers; no hay ningúnpunto que se salga de los límites de las líneas rojas punteadas.
1. Residuos vs Valores Predichos: la rtelación es lineal.
2. Q-Q: la mayoría de puntos sigue la diagonal, pero hay desviaciones en los extremos.
3. Raiz de residuos: Hay homocedasticidad.
4. Distancia de CooK: no hay valores atípicos influyentes.