Objetivo

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.

Descripción

Desarrollo

Cargar librerías

library(ggplot2)
library(readr)
library(dplyr)
library(knitr)
library(DT)
library(mosaic)
library(PerformanceAnalytics) # Para coorelaciones gráficas

Cargar funciones preparadas

source("https://raw.githubusercontent.com/rpizarrog/probabilidad-y-estad-stica/master/2023/funciones/funciones%20para%20dispersion%20correlacion%20regresion.R", encoding = "UTF-8")

Cargar datos

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

Transformar datos

Seleccionar solo las variables de interés publications y rank

Ejecutar esta instrucciones para limpiar los datos y dejar solo las variable de interés

  • publications_Variable x independiente
  • rank: variabel y dependiente
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 ...

Determinar una muestra del 20%

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?

  • La muestra corresponde a 60 datos.

Determinar la covarianza

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"

Determinar la correlación

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 dispresión

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)

Regresión

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

Valor del R Square

¿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"

Coeficientes a y b

\[ 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"

Linea de tendencia

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

Predicciones

¿Cuál es la predicción del ranking (rank) para un valor de publications igual a 15000?

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

¿Cuál es la predicción del ranking (rank) para un valor de publications igual a 20000?

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

¿Cuál es la predicción del ranking (rank) para un valor de publications igual a 25000?

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

Intrepretación

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.