hllinas2023

1 Introducción

En la sección 26.5 del manual de Rpubs se describió el modelo lineal generalizado o, más brevemente, GLM (en inglés: General Linear Model). Se explicó su definición, las componentes que lo conforman. De igual manera, se detallaron algunos tipos particualres de GLM y por último se explicó muy brevemente su aplicación con R a través de la función glm().

Continuando con esa metodología, este documento contiene un análisis muy rápido de todos los paquetes CRAN que tienen glm en su nombre. Supondremos que si hay un paquete que contiene glm en su nombre es porque está relacionado con los GLMs. En las referencias de abajo se pueden encontrar más detalles al respecto.

2 cranly

Ejecutamos el siguientes código para descargar toda la base de datos del CRAN. Se necesita instalar la librería cranly.

library("cranly")

3 CRAN_package_db

Se resalta que tools::CRAN_package_db() es un data frame donde encontramos las herramientas para obtener información sobre los paquetes actuales en el repositorio de paquetes CRAN y su estado de verificación.

BD <- tools::CRAN_package_db()
names(BD)
##  [1] "Package"                 "Version"                
##  [3] "Priority"                "Depends"                
##  [5] "Imports"                 "LinkingTo"              
##  [7] "Suggests"                "Enhances"               
##  [9] "License"                 "License_is_FOSS"        
## [11] "License_restricts_use"   "OS_type"                
## [13] "Archs"                   "MD5sum"                 
## [15] "NeedsCompilation"        "Additional_repositories"
## [17] "Author"                  "Authors@R"              
## [19] "Biarch"                  "BugReports"             
## [21] "BuildKeepEmpty"          "BuildManual"            
## [23] "BuildResaveData"         "BuildVignettes"         
## [25] "Built"                   "ByteCompile"            
## [27] "Classification/ACM"      "Classification/ACM-2012"
## [29] "Classification/JEL"      "Classification/MSC"     
## [31] "Classification/MSC-2010" "Collate"                
## [33] "Collate.unix"            "Collate.windows"        
## [35] "Contact"                 "Copyright"              
## [37] "Date"                    "Date/Publication"       
## [39] "Description"             "Encoding"               
## [41] "KeepSource"              "Language"               
## [43] "LazyData"                "LazyDataCompression"    
## [45] "LazyLoad"                "MailingList"            
## [47] "Maintainer"              "Note"                   
## [49] "Packaged"                "RdMacros"               
## [51] "StagedInstall"           "SysDataCompression"     
## [53] "SystemRequirements"      "Title"                  
## [55] "Type"                    "URL"                    
## [57] "UseLTO"                  "VignetteBuilder"        
## [59] "ZipData"                 "Path"                   
## [61] "X-CRAN-Comment"          "Published"              
## [63] "Reverse depends"         "Reverse imports"        
## [65] "Reverse linking to"      "Reverse suggests"       
## [67] "Reverse enhances"        "Deadline"               
## [69] "DOI"

4 clean_CRAN_db

Con la función clean_CRAN_db() limpiamos los nombres de los autores y los nombres de los paquetes en las diferentes directivas (como Imports, Depends, Suggests, Enhances, LinkingTo). A través de esta función, obtenemos un data.frame, organizado de la clase cranly_db que puede ser utilizado para un análisis más detallado.

#library(cranly)
package_db <- clean_CRAN_db(BD)
names(package_db)
##  [1] "package"                 "version"                
##  [3] "priority"                "depends"                
##  [5] "imports"                 "suggests"               
##  [7] "enhances"                "license"                
##  [9] "license_is_foss"         "license_restricts_use"  
## [11] "os_type"                 "archs"                  
## [13] "md5sum"                  "needscompilation"       
## [15] "additional_repositories" "author"                 
## [17] "authors@r"               "biarch"                 
## [19] "bugreports"              "buildkeepempty"         
## [21] "buildmanual"             "buildresavedata"        
## [23] "buildvignettes"          "built"                  
## [25] "bytecompile"             "classification/acm"     
## [27] "classification/acm-2012" "classification/jel"     
## [29] "classification/msc"      "classification/msc-2010"
## [31] "collate"                 "collate.unix"           
## [33] "collate.windows"         "contact"                
## [35] "copyright"               "date"                   
## [37] "date/publication"        "description"            
## [39] "encoding"                "keepsource"             
## [41] "language"                "lazydata"               
## [43] "lazydatacompression"     "lazyload"               
## [45] "mailinglist"             "maintainer"             
## [47] "note"                    "packaged"               
## [49] "rdmacros"                "stagedinstall"          
## [51] "sysdatacompression"      "systemrequirements"     
## [53] "title"                   "type"                   
## [55] "url"                     "uselto"                 
## [57] "vignettebuilder"         "zipdata"                
## [59] "path"                    "x-cran-comment"         
## [61] "published"               "deadline"               
## [63] "doi"                     "reverse_linking_to"     
## [65] "reverse_enhances"        "reverse_suggests"       
## [67] "reverse_depends"         "reverse_imports"        
## [69] "linking_to"              "email"

5 build_network

Con build_network() sae crea un objeto Red, que es una lista con dos data frames: edges (bordes) y nodes (nodos). En nuestro caso, se crearon dos redes: una con los paquetes y otra, con los autores.

package_network <- build_network(package_db)
author_network <- build_network(package_db, perspective = "author")
names(package_network$nodes)
names(author_network$edges)
##  [1] "package"                 "version"                
##  [3] "priority"                "depends"                
##  [5] "imports"                 "suggests"               
##  [7] "enhances"                "license"                
##  [9] "license_is_foss"         "license_restricts_use"  
## [11] "os_type"                 "archs"                  
## [13] "md5sum"                  "needscompilation"       
## [15] "additional_repositories" "author"                 
## [17] "authors@r"               "biarch"                 
## [19] "bugreports"              "buildkeepempty"         
## [21] "buildmanual"             "buildresavedata"        
## [23] "buildvignettes"          "built"                  
## [25] "bytecompile"             "classification/acm"     
## [27] "classification/acm-2012" "classification/jel"     
## [29] "classification/msc"      "classification/msc-2010"
## [31] "collate"                 "collate.unix"           
## [33] "collate.windows"         "contact"                
## [35] "copyright"               "date"                   
## [37] "date/publication"        "description"            
## [39] "encoding"                "keepsource"             
## [41] "language"                "lazydata"               
## [43] "lazydatacompression"     "lazyload"               
## [45] "mailinglist"             "maintainer"             
## [47] "note"                    "packaged"               
## [49] "rdmacros"                "stagedinstall"          
## [51] "sysdatacompression"      "systemrequirements"     
## [53] "title"                   "type"                   
## [55] "url"                     "uselto"                 
## [57] "vignettebuilder"         "zipdata"                
## [59] "path"                    "x-cran-comment"         
## [61] "published"               "deadline"               
## [63] "doi"                     "reverse_linking_to"     
## [65] "reverse_enhances"        "reverse_suggests"       
## [67] "reverse_depends"         "reverse_imports"        
## [69] "linking_to"              "email"
##  [1] "from"       "to"         "package"    "imports"    "suggests"  
##  [6] "enhances"   "depends"    "linking_to" "version"    "maintainer"

6 glm_packages

Después de filtrar toda la base de datos que hay en la CRAN, se presentan los paquetes que, hasta la fecha, contienen “glm” en su nombre:

glm_packages <- package_with(package_network, name = "glm")
glm_packages
##   [1] "aglm"            "apeglm"          "AutoStepwiseGLM" "bestglm"        
##   [5] "biglm"           "biglmm"          "BranchGLM"       "brglm"          
##   [9] "brglm2"          "cglm"            "CIS.DGLM"        "CPMCGLM"        
##  [13] "dbglm"           "dglm"            "DGLMExtPois"     "dhglm"          
##  [17] "drglm"           "easy.glmnet"     "eventglm"        "fastglm"        
##  [21] "fastglmpca"      "fbglm"           "FGLMtrunc"       "gglm"           
##  [25] "glm.deploy"      "glm.predict"     "glm2"            "GLMaSPU"        
##  [29] "glmbb"           "glmc"            "GLMcat"          "glme"           
##  [33] "glmertree"       "glmfitmiss"      "glmGamPoi"       "glmlep"         
##  [37] "glmm"            "glmm.hp"         "GLMMadaptive"    "glmmADMB"       
##  [41] "GLMMcosinor"     "glmmEP"          "glmmfields"      "glmMisrep"      
##  [45] "glmmLasso"       "glmmML"          "glmmPen"         "glmmrBase"      
##  [49] "glmmrOptim"      "glmmsel"         "GLMMselect"      "glmmSeq"        
##  [53] "glmmTMB"         "glmnet"          "glmnetcr"        "glmnetr"        
##  [57] "glmnetSE"        "glmnetUtils"     "GLMpack"         "glmpath"        
##  [61] "glmpathcr"       "glmpca"          "glmpermu"        "GLMsData"       
##  [65] "GlmSimulatoR"    "glmSparseNet"    "glmtlp"          "glmtoolbox"     
##  [69] "glmtrans"        "glmtree"         "glmulti"         "glmvsd"         
##  [73] "glmx"            "glmxdiag"        "HDGLM"           "hdpGLM"         
##  [77] "hglm"            "hglm.data"       "holiglm"         "HTSeedGLM"      
##  [81] "icdGLM"          "ICglm"           "kDGLM"           "mbrglm"         
##  [85] "mcemGLM"         "MCMCglmm"        "mdhglm"          "MGLM"           
##  [89] "mglmn"           "misclassGLM"     "mvglmmRank"      "oglmx"          
##  [93] "parglm"          "pglm"            "plsRglm"         "poisson.glm.mix"
##  [97] "prettyglm"       "QGglmm"          "r2glmm"          "randomGLM"      
## [101] "robmixglm"       "RPEGLMEN"        "simglm"          "speedglm"       
## [105] "SplitGLM"        "stepjglm"        "StroupGLMM"      "vglmer"

Observamos que hay 108 paquetes con las características anteriores.

7 glm_package_network

A continuación, de manera visual, se presentan las subredes para glm_packages:

plot(package_network, package = glm_packages)

8 glm_package_only_network

Ahora, de manera también visual, se presentan las subredes que tienen bordes solamente entre los paquetes que pertenecen a glm_packages:

glm_package_only_network <- subset(package_network, package = glm_packages, only = TRUE)
plot(glm_package_only_network, package = glm_packages)

9 summary(glm_package_network)

Con el código de abajo se puede computar un rango de directivas de paquetes y estadísticas de redes de colaboración cuando el punto de partida son los paquetes.

glm_package_network <- subset(package_network, package = glm_packages)
glm_package_summaries <- summary(glm_package_network)
names(glm_package_summaries)
##  [1] "package"          "n_authors"        "n_imports"        "n_imported_by"   
##  [5] "n_suggests"       "n_suggested_by"   "n_depends"        "n_depended_by"   
##  [9] "n_enhances"       "n_enhanced_by"    "n_linking_to"     "n_linked_by"     
## [13] "betweenness"      "closeness"        "page_rank"        "degree"          
## [17] "eigen_centrality"

Se observa que obtenemos un listado, con las siguientes variables:

  1. package: nombre del paquete.

  2. n_authors (básico): número de autores para el paquete.

  3. n_imports (básico): número de paquetes que el paquete importa.

  4. n_imported_by (básico): número de veces que el paquete es importado por otros paquetes.

  5. n_suggests (básico): número de paquetes que el paquete sugiere.

  6. n_suggested_by (básico): número de veces que el paquete es sugerido por otros paquetes.

  7. n_depends (básico): número de paquetes de los cuales el paquete depende.

  8. n_depended_by (básico): número de paquetes que tienen al paquete como dependencia.

  9. n_enhances (básico): número de paquetes que el paquete mejora.

  10. n_enhanced_by (básico): número de paquetes que han mejorado al paquete.

  11. n_linking_to (básico): número de paquetes a los que se vincula el paquete.

  12. n_linked_by (básico): número de paquetes por los que está vinculado el paquete.

  13. betweenness (avanzado): la intermediación de paquetes en la red de paquetes; calculado por igraph::betweenness().

  14. closeness (avanzado): la centralidad de proximidad del paquete en la red de paquetes; calculado por igraph::closeness().

  15. page_rank (avanzado): el Google PageRank del paquete en la red de paquetes; calculado por igraph::page_rank().

  16. degree (avanzado): the degree of the package in the package network; as computed by igraph::degree().

  17. eigen_centrality (avanzado): el grado del paquete en la red de paquetes; calculado por igraph::eigen_centrality().

10 Plot summary(glm_package_network)

En la Figura 10.1 se muestra la distribución de los 20 paquetes más importantes en la CRAN (relacionados con glm), de acuerdo al número de veces en que fueron importados por otros paquetes.

plot(glm_package_summaries, according_to = "n_imported_by")
Distribución de los 20 paquetes más relevantes versus el número de veces importados por otros.

Figure 10.1: Distribución de los 20 paquetes más relevantes versus el número de veces importados por otros.

En la Figura 10.2 se muestra la distribución de los 20 paquetes más importantes en la CRAN (relacionados con glm), de acuerdo al número de paquetes que el paquete sugiere.

plot(glm_package_summaries, according_to = "n_suggests")
Distribución de los 20 paquetes más relevantes versus el número de paquetes que el paquete sugiere.

Figure 10.2: Distribución de los 20 paquetes más relevantes versus el número de paquetes que el paquete sugiere.

11 summary(glm_author_network)

Con el código de abajo se puede computar un rango de directivas de paquetes y estadísticas de redes de colaboración cuando el punto de partida son los autores.

glm_author_network <- subset(author_network, package = glm_packages)
glm_author_summaries <- summary(glm_author_network)
names(glm_author_summaries)
## [1] "author"           "n_packages"       "n_collaborators"  "betweenness"     
## [5] "closeness"        "page_rank"        "degree"           "eigen_centrality"

Se observa que obtenemos un listado, con las siguientes variables:

  1. author. nombre del autor.

  2. n_packages (básico): número de paquetes en donde el autor aparece como autor de los paquetes.

  3. n_collaborators (básico): número total de co-autores que el autor tiene en el CRAN.

  4. betweenness (avanzado): la intermediación del autor en la red de autores; calculado por igraph::betweenness().

  5. closeness (avanzado): la centralidad de cercanía del autor en la red de autores; calculado por igraph::closeness().

  6. page_rank (avanzado): el Google PageRank del autor en la red de autores; calculado por igraph::page_rank().

  7. degree (avanzado): el grado del autor en la red de autores; calculado por igraph::degree(); lo mismo que n_collaborators.

  8. eigen_centrality (avanzado): la puntuación de centralidad del vector propio del autor en la red de autores; calculado por igraph::eigen_centrality().

12 Plot summary(glm_author_network)

En la Figura 12.1 se muestra la distribución de los 20 colaboradores de la CRAN (relacionados con glm), de acuerdo al número de co-autores que el autor tiene en la CRAN.

plot(glm_author_summaries, according_to = "n_collaborators")
Distribución de los 20 autores más relevantes versus el número de co-autores que el autor tiene en la CRAN.

Figure 12.1: Distribución de los 20 autores más relevantes versus el número de co-autores que el autor tiene en la CRAN.

En la Figura 12.2 se muestra la distribución de los 20 colaboradores de la CRAN (relacionados con glm), de acuerdo al número número de paquetes en donde el autor aparece como autor de los paquetes.

plot(glm_author_summaries, according_to = "n_packages")
Los 20 autores más relevantes versus número de paquetes en donde el autor aparece como autor de los paquetes.

Figure 12.2: Los 20 autores más relevantes versus número de paquetes en donde el autor aparece como autor de los paquetes.

13 Ejercicios

  1. Actualizar regularmente la información descrita en el documento.

  2. Realizar otros análisis de posible interés.

Bibliografía

Consultar el documento RPubs :: Modelo lineal generalizado (bibliografía).

 

 
If you found any ERRORS or have SUGGESTIONS, please report them to my email. Thanks.