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 Gwanak-ro, Gwanak-gu\n Seoul, Seoul, 151-742 \nSouth Korea",..: 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(315)
muestra <- datos[sample(x = 1:nrow(datos), size = round(nrow(datos) * 0.20), replace = FALSE), ]
muestra
##     publications rank
## 278       209504   15
## 269        33432   18
## 123        55990   15
## 4          97754   88
## 219       155134   53
## 245       134759   75
## 56         57371  153
## 251        53491  191
## 298        95497   56
## 215        57289  157
## 29        178305   22
## 299        41257  161
## 124        60687   91
## 243       176141   38
## 154        46084   83
## 185        76010  124
## 187        70023  106
## 27         63645  136
## 199        88028  127
## 206        41658   70
## 119       183572  110
## 191        81584   80
## 15        166908   77
## 102        50791   40
## 188       174050   32
## 39         68328  167
## 84         99798  136
## 140        46247  168
## 173        56979  176
## 53        104130  196
## 78         89024  141
## 59         97889   89
## 80         90533  114
## 234        48417   94
## 11        138415   51
## 110        35120  149
## 2          99086   61
## 96        208615   24
## 258       166488   65
## 183        34363  126
## 275       270033    8
## 66         50338  154
## 148       134970   78
## 233       107846  115
## 195        54962  126
## 164       155482   34
## 235        36822  175
## 296        96097   68
## 1          89633  150
## 83        106518  154
## 153        47910   64
## 209        52599  197
## 113        64180  145
## 207        92009  108
## 92         88759   70
## 262       309445   18
## 85         64302  201
## 141        54629  182
## 288        43001   16
## 287        47281   37

¿De cuántos registros es la muestra?

resultado = length(muestra$publications + muestra$rank)
paste("Muestra de: ", resultado)
## [1] "Muestra de:  60"

Determinar la covarianza

Convarianza entre publications y rank ¿Cuál es el valor de la covarianza ?

covarianz = cov(muestra$publications, muestra$rank)
paste("La covarianza es de: ", covarianz)
## [1] "La covarianza es de:  -1759545.14689266"

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?

correlacionz = cor(muestra$publications, muestra$rank)
paste("La correlación es de: ", correlacionz)
## [1] "La correlación es de:  -0.524871294334449"

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(data.frame(muestra$publications, muestra$rank))

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)

regresiones = lm(data = muestra, formula = rank  ~ publications)
summary(regresiones)
## 
## Call:
## lm(formula = rank ~ publications, data = muestra)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -112.825  -29.358   -1.361   34.943  100.111 
## 
## Coefficients:
##                 Estimate  Std. Error t value             Pr(>|t|)    
## (Intercept)  147.3455684  11.9250362  12.356 < 0.0000000000000002 ***
## publications  -0.0004942   0.0001052  -4.696            0.0000167 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 48.23 on 58 degrees of freedom
## Multiple R-squared:  0.2755, Adjusted R-squared:  0.263 
## F-statistic: 22.05 on 1 and 58 DF,  p-value: 0.00001668

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?

El valor de R Square es 0.263 significa que el valor representa el 26.3 % del rango de publicaciones.

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?

coeficientz = coef(regresiones)
a = coeficientz[1]
b = coeficientz[2]

paste("El coeficiente a es: ", a)
## [1] "El coeficiente a es:  147.345568363998"

Linea de tendencia

¿Cómo se observa la lónea de tendencia?

f_linea_tendencia_reg_lineal(muestra, regresiones)

Predicciones

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

predicciones = predict(regresiones, data.frame(publications = 15000))
paste("La predicción es apróximadamente de: ", predicciones)
## [1] "La predicción es apróximadamente de:  139.933180003717"

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

predicciones = predict(regresiones, data.frame(publications = 20000))
paste("La predicción es apróximadamente de: ", predicciones)
## [1] "La predicción es apróximadamente de:  137.462383883624"

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

predicciones = predict(regresiones, data.frame(publications = 25000))
paste("La predicción es apróximadamente de: ", predicciones)
## [1] "La predicción es apróximadamente de:  134.99158776353"

Intrepretación

al menos 50 palabras:

Este programa realiza varias tareas relacionadas con análisis de datos y regresión lineal. En resumen, este programa carga datos, realiza análisis exploratorio, ajusta un modelo de regresión lineal y hace predicciones basadas en dicho modelo. También incluye visualizaciones de datos y cálculos estadísticos para evaluar la relación entre las variables y la calidad del modelo de regresión.

¿El modelo es eficiente por encima del 60% en Multiple R Suqare? , ¿se acepta o se descarta?

Se descarta porque es de 26.3 %