Elaborar un documento markdown que describa la relación entre dos variables numéricas de publications y rank de una muestra del conjunto de datos universidades determinando la dispersión de los datos con diagrama de dispersión, la covarianza, la correlación de Pearson y la regresión lineal simple que servirá para simular predicciones de la variable dependiente rank.
library(ggplot2)
library(readr)
library(dplyr)
library(knitr)
library(DT)
library(mosaic)
library(PerformanceAnalytics) # Para coorelaciones gráficas
source("https://raw.githubusercontent.com/rpizarrog/probabilidad-y-estad-stica/master/2023/funciones/funciones%20para%20dispersion%20correlacion%20regresion.R", encoding = "UTF-8")
datos_bruto <- read.csv("https://raw.githubusercontent.com/rpizarrog/probabilidad-y-estad-stica/master/2023/datos/universidades_clean.csv", encoding = "UTF-8", stringsAsFactors = TRUE)
str(datos_bruto)
## 'data.frame': 300 obs. of 17 variables:
## $ X.1 : int 1 2 3 4 5 6 7 8 9 10 ...
## $ X : int 1 2 3 4 5 6 7 8 9 10 ...
## $ name : Factor w/ 300 levels "Aarhus University",..: 1 2 3 4 5 6 7 8 9 10 ...
## $ world_ranking : Factor w/ 200 levels "","#1 of 14,131",..: 59 159 1 188 1 1 1 145 106 175 ...
## $ region_ranking : Factor w/ 200 levels "","#1 of 1,756",..: 101 108 1 115 1 1 1 96 200 126 ...
## $ country_ranking: Factor w/ 198 levels "","#1 of 101",..: 59 118 1 128 1 1 1 102 193 134 ...
## $ region : Factor w/ 6 levels "Africa","Asia",..: 3 3 5 5 3 2 5 3 3 5 ...
## $ country : Factor w/ 34 levels "Argentina","Australia",..: 17 29 34 6 17 18 34 14 33 34 ...
## $ city.state : Factor w/ 153 levels "Aarhus","Adelaide",..: 141 140 150 99 38 64 102 7 39 144 ...
## $ acceptance_rate: Factor w/ 87 levels "","1%","10%",..: 8 1 50 80 4 48 60 1 51 1 ...
## $ publication : Factor w/ 300 levels "100,167","100,238",..: 272 296 113 293 236 255 98 18 112 250 ...
## $ website : Factor w/ 295 levels "auburn.edu","bc.edu",..: 120 119 1 117 219 3 2 6 124 123 ...
## $ phone_no : Factor w/ 297 levels "","+1 (204) 474 8880",..: 96 285 209 137 39 265 256 253 273 212 ...
## $ address : Factor w/ 300 levels "1-1-1 Tennodai\n Tsukuba, Ibaraki, 305-8577 \nJapan",..: 205 275 247 167 152 213 30 217 195 215 ...
## $ rank : int 150 61 83 88 60 204 133 49 193 76 ...
## $ publications : int 89633 99086 36231 97754 74922 82676 25757 107676 36150 80596 ...
## $ acceptance_num : int 15 NA 57 86 11 55 67 NA 58 NA ...
Ejecutar esta instrucciones para limpiar los datos y dejar solo las variable de interés
datos <- select(datos_bruto, publications, rank)
str(datos)
## 'data.frame': 300 obs. of 2 variables:
## $ publications: int 89633 99086 36231 97754 74922 82676 25757 107676 36150 80596 ...
## $ rank : int 150 61 83 88 60 204 133 49 193 76 ...
Cada equipo decide el valor de la semilla random, por ejemplo 2023, ustedes pongan los cuatro o tres últimos dígitos de su número de control o el de uno de ustedes
set.seed(1196)
muestra <- datos[sample(x = 1:nrow(datos), size = round(nrow(datos) * 0.20), replace = FALSE), ]
muestra
## publications rank
## 267 110449 63
## 68 59116 135
## 131 101800 119
## 197 80199 133
## 171 179956 30
## 64 103846 145
## 56 57371 153
## 96 208615 24
## 55 121410 110
## 173 56979 176
## 174 44002 46
## 37 60031 157
## 204 71719 113
## 71 63164 116
## 132 59274 163
## 44 38355 132
## 201 96408 103
## 66 50338 154
## 211 84784 180
## 98 55134 121
## 260 185242 26
## 164 155482 34
## 284 95375 72
## 47 107016 67
## 225 90860 105
## 259 76418 138
## 136 44721 138
## 116 138535 104
## 180 72332 122
## 195 54962 126
## 285 44300 139
## 272 103343 50
## 30 78063 178
## 67 105737 79
## 189 68881 155
## 268 61369 190
## 7 25757 133
## 103 135109 19
## 246 42254 216
## 88 147686 85
## 89 150565 25
## 40 60237 152
## 62 40059 178
## 248 261797 48
## 4 97754 88
## 25 46082 125
## 15 166908 77
## 162 92888 131
## 252 64274 154
## 178 60512 185
## 240 100320 151
## 239 241392 10
## 184 142627 37
## 134 153863 123
## 209 52599 197
## 238 78874 179
## 141 54629 182
## 183 34363 126
## 52 107043 74
## 119 183572 110
¿De cuántos registros es la muestra?
Convarianza entre publications y rank ¿Cuál es el valor de la covarianza ?
covarianza <- cov(x = muestra$publications, y = muestra$rank, )
covarianza
## [1] -1970291
paste("El valor de la covarianza de la muestra es de: ",covarianza)
## [1] "El valor de la covarianza de la muestra es de: -1970290.6920904"
Correlación \(r\) entre publications y rank ¿Cuál es el valor de la correlación de Pearson y cómo se interpreta?
r <- cor(x = muestra$publications, y = muestra$rank)
r
## [1] -0.7203814
paste("El valor de la correlación es de: ",r)
## [1] "El valor de la correlación es de: -0.720381376166194"
Diagrama de dispersión entre publications y rank ¿Cómo se observa el diagrama de dispersión de las dos variables x publications e y rank?
f_diag.dispersion(muestra)
Construir el modelo de regresión entre publications y rank ¿Cuáles son los estadísticos del modelos de regresión: summary(modelo)
modelo <- lm(data = muestra, formula = rank~publications)
modelo
##
## Call:
## lm(formula = rank ~ publications, data = muestra)
##
## Coefficients:
## (Intercept) publications
## 183.4409015 -0.0007169
¿Cuál es el valor del estadístico R Square en el modelo de regresión construído y cómo se interpreta?
rsquare = r ^ 2
rsquare
## [1] 0.5189493
paste("El valor de R Square es de: ",rsquare)
## [1] "El valor de R Square es de: 0.5189493271271"
\[ Y = a + b \cdot x \]
Coeficientes \(a\) y \(b\) de la fórmula de regresión lineal simple ¿Cuál es el valor de los coeficientes?
a <- modelo$coefficients[1]
b <- modelo$coefficients[2]
a
## (Intercept)
## 183.4409
paste("El valor del coeficiente a es: ",a)
## [1] "El valor del coeficiente a es: 183.440901545108"
b
## publications
## -0.0007168907
paste("El valor del coeficiente b es: ",b)
## [1] "El valor del coeficiente b es: -0.000716890748278949"
¿Cómo se observa la línea de tendencia?
ggplot() +
geom_point(data = muestra, aes(x = publications, y = rank), colour='blue') +
geom_point(aes(x= mean(muestra$publications), y = mean(muestra$rank)), col = 'green') +
geom_line(aes( x = muestra$publications, y = predict(modelo, muestra)), color = "red") +
xlab("Publications") +
ylab("Rank") +
ggtitle("Linea de tendencia sobre Conjunto de Datos")
x <- c(15000)
prediccion <- predict(object = modelo, newdata = data.frame(publications = x))
prediccion
## 1
## 172.6875
paste("El rank cuando las publications es 15000 es de: ",prediccion)
## [1] "El rank cuando las publications es 15000 es de: 172.687540320924"
# Comprobar
y = a + b * x
y
## (Intercept)
## 172.6875
x <- c(20000)
prediccion <- predict(object = modelo, newdata = data.frame(publications = x))
prediccion
## 1
## 169.1031
paste("El rank cuando las publications es 15000 es de: ",prediccion)
## [1] "El rank cuando las publications es 15000 es de: 169.103086579529"
# Comprobar
y = a + b * x
y
## (Intercept)
## 169.1031
x <- c(25000)
prediccion <- predict(object = modelo, newdata = data.frame(publications = x))
prediccion
## 1
## 165.5186
paste("El rank cuando las publications es 15000 es de: ",prediccion)
## [1] "El rank cuando las publications es 15000 es de: 165.518632838134"
# Comprobar
y = a + b * x
y
## (Intercept)
## 165.5186
Se tomo una muestra del 20% de los datos totales, equivalente a 60 datos, que podemos observar que en el diagrama de dispersion, la dispersion de datos es grande, alejandose considerablemente de la linea de tendencias, respecto a la correlacion, se puede decir que esta es negativa considerablemente, es decir, que entre mas publicaciones es mejor el ranking. De la misma manera, nos damos cuenta que al tener datos aleatorios fue muy probable que por eso la dispersion haya sido grande, sin embargo con datos reales probablemente no hubiera existido tanta dispersion. Y respecto a las predicciones estas reafirman que a más publicaciones el ranking es mayor, comprobando lo de la correlacion.