R | ||
---|---|---|
Desarrollador(es) | ||
R Development Core Team https://www.r-project.org | ||
Información general | ||
Extensiones comunes | .R, .rda, .Rdata | |
Paradigma |
Multiparadigma: funcional, vectorial, imperativo, procedural, orientado a objetos | |
Apareció en | 1993 | |
Diseñado por | Ross Ihaka y Robert Gentleman | |
Última versión estable | 4.4.1 (14 de junio de 2024 (4 meses y 28 días)) | |
Influido por | S, Scheme, XLispStat | |
Ha influido a | Gretl (software) Julia (lenguaje) | |
Sistema operativo | Multiplataforma | |
Licencia | GPL | |
R es un entorno y lenguaje de programación con un enfoque al análisis estadístico.
R nació como una reimplementación de software libre del lenguaje S, adicionado con soporte para ámbito estático. Se trata de uno de los lenguajes de programación más utilizados en investigación científica, siendo además muy popular en los campos de aprendizaje automático (machine learning), minería de datos, econometría, investigación biomédica, bioinformática y en la inferencia estadística. A esto contribuye la posibilidad de cargar diferentes bibliotecas o paquetes con funcionalidades de cálculo y graficación.
R es parte del sistema GNU y se distribuye bajo la licencia GNU GPL. Está disponible para los sistemas operativos Windows, Macintosh, Unix y GNU/Linux.
Fue desarrollado inicialmente por Robert Gentleman y Ross Ihaka del Departamento de Estadística de la Universidad de Auckland en 1993.[1] Sin embargo, si se remonta a sus bases iniciales, puede decirse que se inició en los Bell Laboratories de AT&T y ahora Alcatel-Lucent en Nueva Jersey con el lenguaje S. Este último, un sistema para el análisis de datos desarrollado por John Chambers, Rick Becker, y colaboradores diferentes desde finales de 1970. La historia desde este punto es prácticamente la del lenguaje S. Los diseñadores iniciales, Gentleman e Ihaka, combinaron las fortalezas de dos lenguajes existentes, S y Scheme. En sus propias palabras: "El lenguaje resultante es muy similar en apariencia a S, pero en el uso de fondo y la semántica es derivado desde Scheme". El resultado se llamó R "en parte al reconocimiento de la influencia de S y en parte para hacer gala de sus propios logros".[2]
Su desarrollo actual es responsabilidad del R Development Core Team. Para saber más al respecto y en el entorno del programa, puede teclearse contributors(); el la lista desplegada aparecen los nombres de los autores iniciales y los actuales pertenecientes al R Development Core Team (Equipo Central de Desarrolladores R).
A continuación se enumeran algunos hitos en el desarrollo de R:[3]
R proporciona un amplio abanico de herramientas estadísticas (modelos lineales y no lineales, tests estadísticos, análisis de series temporales, algoritmos de clasificación y agrupamiento, etc.) y gráficas.
Al igual que S, se trata de un lenguaje de programación, lo que permite que los usuarios lo extiendan definiendo sus propias funciones. De hecho, gran parte de las funciones de R están escritas en el mismo R, aunque para algoritmos computacionalmente exigentes es posible desarrollar bibliotecas en C, C++ o Fortran que se cargan dinámicamente. Los usuarios más avanzados pueden también manipular los objetos de R directamente desde código desarrollado en C. R también puede extenderse a través de paquetes desarrollados por su comunidad de usuarios.
R hereda de S su orientación a objetos. La tarea de extender R se ve facilitada por su permisiva política de lexical scoping.[5]
Además, R puede integrarse con distintas bases de datos y existen bibliotecas que facilitan su utilización desde lenguajes de programación interpretados como Perl y Python.
Otra de las características de R es su capacidad gráfica, que permite generar gráficos con alta calidad. R posee su propio formato para la documentación basado en LaTeX.
R también puede usarse como herramienta de cálculo numérico, campo en el que puede ser tan eficaz como otras herramientas específicas tales como GNU Octave y su equivalente privativo: MATLAB.[6] Se ha desarrollado una interfaz, RWeka[7] para interactuar con Weka que permite leer y escribir ficheros en el formato arff y enriquecer R con los algoritmos de minería de datos de dicha plataforma.
R forma parte de un proyecto colaborativo y abierto. Sus usuarios pueden publicar paquetes que extienden su configuración básica. Existe un repositorio oficial de paquetes cuyo número superó en otoño de 2009 la cifra de los 2000.
Dado el enorme número de nuevos paquetes, estos se han organizado en vistas (o temas), que permiten agruparlos según su naturaleza y función. Por ejemplo, hay grupos de paquetes relacionados con estadística bayesiana, econometría, series temporales, etc.
Para facilitar el desarrollo de nuevos paquetes, se ha puesto a servicio de la comunidad una forja de desarrollo que facilita las tareas relativas a dicho proceso.
Otros sistemas de software comerciales que integran con R incluyen: JMP,[8] Mathematica,[9] MATLAB,[10] Spotfire,[11] SPSS,[12] Statistica,[13] Platform Symphony,[14] SAS,[15] Tableau Software,[16] Esri ArcGis,[17] Dundas,[18] Statgraphics.[19] y SQL Server 2017.[20]
Algunos ejemplos mínimos para ver la forma en que se puede introducir el código.
Para cargar los paquetes que se requieren se debe de seleccionar el espejo (mirror), descargar la paquetería y luego activarla. Para seleccionar el espejo:
> chooseCRANmirror(graphics=FALSE)
HTTPS CRAN mirror
1: 0-Cloud [https] 2: Algeria [https] 3: Australia (Melbourne) [https]
4: Australia (Perth) [https] 5: Austria [https] 6: Belgium (Ghent) [https]
7: Brazil (SP 1) [https] 8: Bulgaria [https] 9: Canada (MB) [https]
10: Chile [https] 11: China (Beijing 4) [https] 12: Colombia (Cali) [https]
13: Czech Republic [https] 14: Denmark [https] 15: France (Lyon 1) [https]
16: France (Lyon 2) [https] 17: France (Marseille) [https] 18: France (Paris 2) [https]
19: Germany (Falkenstein) [https] 20: Germany (Münster) [https] 21: Iceland [https]
22: Ireland [https] 23: Italy (Padua) [https] 24: Japan (Tokyo) [https]
25: Malaysia [https] 26: Mexico (Mexico City) [https] 27: New Zealand [https]
28: Norway [https] 29: Philippines [https] 30: Russia (Moscow) [https]
31: Serbia [https] 32: Spain (A Coruña) [https] 33: Spain (Madrid) [https]
34: Switzerland [https] 35: Taiwan (Chungli) [https] 36: Turkey (Denizli) [https]
37: UK (Bristol) [https] 38: UK (Cambridge) [https] 39: UK (London 1) [https]
40: USA (CA 1) [https] 41: USA (IA) [https] 42: USA (KS) [https]
43: USA (MI 1) [https] 44: USA (TN) [https] 45: USA (TX) [https]
46: USA (WA) [https] 47: (HTTP mirrors)
Selection:
Al escribir solo chooseCRANmirror() se desplegará una ventana para elegirlo manualmente con el ratón. Lo mismo ocurrirá si se omite graphics = FALSE o se escribe graphics = TRUE.
Cuando se instalan paquetes para análisis especializados, específicos o que simplemente no tiene predeterminadamente instalados pero no activados el sistema, se instala. Así pues, en este caso, los paquetes, al ser un entorno con dependencias funcionan mejor con tales paquetes auxiliares. Las dependencias pueden ser por ejemplo otros paquetes o bases de datos para que funcione o bien, o mejor o de hecho lo haga. Algunos paquetes funcionan con dependencias muy específicas, otros con dependencias muy generales; como sea, a veces la misma instalación, al ser común la dependencia, lo hace de forma automática, pero no en todas las ocasiones. Por esto para instalar el paquete de interés se escribirá:
install.packages("deldir", dep=T) # Para la triangulación de Delaunay y teselación de Dirichlet junto con todas las dependencias
Para activar la librería pueden ser:
library("deldir") # Para el ejemplo anterior.
library('Benchmarking') # Para el [[Análisis de Datos Envolvente]]
require(maps) # Para elaborar mapas. Previa instalación.
require('plot3D') # Para elaborar mapas 3D. Previa instalación.
Todos tanto con comillas dobles (" ") como con comillas simples (' ') o libres. Si se instalaron las arriba mencionadas dependencias, aparecerán indicaciones luego del comando que describe las dependencias que también se activaron al llamar la librería que se usará.
Para elaborar un mapa de Estados Unidos que sea sobre la tasa de desempleo de 2009 por condados (municipios) y que estos estén marcados por densidad de color se usará lo que a continuación se presenta. Basado en la solución J del "Choropleth Challenge". Se puede obtener este ejemplo (en inglés y con los colores originales) en example(map)
Para el ejemplo en español:
require(maps) # activación de librería
require(mapproj) # se usará para projection="polyconic"
# Cargar los datos
# unemp incluye datos para condados de los Estados Unidos continentales. Se excluyen Alaska, Hawaii, Puerto Rico, y pequeñas ciudades de Virginia
data(unemp) # Datos de desempleo
data(county.fips) # mapa de los condados
# Se define la paleta de colores. Escala de grises en este caso. En el original, rosas y magenta.
colors = c("#F1EEF6", "#D3D3D3", "#B9B9B9", "#787878", "#2E2E2E", "#111111") # Colores
unemp$colorBuckets <- as.numeric(cut(unemp$unemp, c(0, 2, 4, 6, 8, 10, 100))) # Rangos de desempleo
leg.txt <- c("<2%", "2-4%", "4-6%", "6-8%", "8-10%", ">10%") # Etiquetas de los rangos
# Se alinean los datos con definiciones de mapa (parciales) de emparejamientos de estados,
# nombre de condados, que incluyen varios polígonos para algunos condados
cnty.fips <- county.fips$fips[match(map("county", plot=FALSE)$names, county.fips$polyname)]
colorsmatched <- unemp$colorBuckets [match(cnty.fips, unemp$fips)]
# Se dibuja el mapa. Luego se guarda en JPEG.
jpeg("desempleo Estados Unidos 2009.jpg", width = 1024, height=750) # Crea imagen de 1024 x 750 pixeles.
map("county", col = colors[colorsmatched], fill = TRUE, resolution = 0, lty = 0, projection = "polyconic") # Mapa general del desempleo en grises
map("state", col = "white", fill = FALSE, add = TRUE, lty = 1, lwd = 0.2, projection="polyconic") # Mapa de los estados sobre puesto
title(main="Desempleo por condado, año 2009", cex.main = 3,
sub="Creado con información de la solución de J del 'Choropleth Challenge'
más info en http://blog.revolutionanalytics.com/2009/11/choropleth-challenge-result.html")
# Se creó el título del mapa
legend("top", leg.txt, horiz = T, fill = colors, bg="#F1F1F1", cex=1.5) # Indicación de los colores por su rango
map.axes() # Para colocar ejes con la latitud y longitud
dev.off()
# Para ver los límites del condado débiles, vaya a RGui : File/SaveAs/PDF
Lo anterior da como resultado el mapa de la imagen inferior.
El siguiente ejemplo es tomado del libro de Kleiber y Zeileis intitulado Applied Econometrics with R. El ejemplo que abajo se expondrá no es tomado al pie de la letra, se le agregaron algunos cambios por el tipo de licencia; no obstante, el fin es el mismo. Se agregan muchas cosas para hacer más didáctico el código y permitir exponer la flexibilidad del paquete estadístico R.
library(AER) # Para el compendio de datos del libro de Kleiber & Zeileis (2008)
library(scales) # Para las transparencias de los elementos de color.
library(quantreg) # Para usar las regresiones por cuantiles
data("CPS1985", package = "AER") # Carga los datos del paquete AER
cps <- CPS1985 # Renombra la variable como cps
cps_lm <- lm(log(wage) ~ experience + I(experience^2) + education, data = cps) # Hace la regresión simple
cps_rq <- rq(log(wage) ~ experience + I(experience^2) + education, data = cps, tau = seq(0.2, 0.8, by = 0.15)) # Regresión por cuantiles
cps2 <- data.frame(education = mean(cps$education), experience = min(cps$experience):max(cps$experience)) # Crea un "data frame" con los datos pertinentes
cps2 <- cbind(cps2, predict(cps_lm, newdata = cps2, interval = "prediction")) # Se agregan los valores requeridos al "data frame" anterior
cps2 <- cbind(cps2, predict(cps_rq, newdata = cps2, type = "")) # Se agregan los valores "tau" a cps2. Los valores de los cuantiles
jpeg("salarios.jpeg", width = 924 , height=924) # Crea una imagen en el directorio actual con 924x924 px de cada lado
# Se hace la gráfica con:
plot(log(wage) ~ experience, data = cps, # Crea el mapeo principal de datos en el gráfico
pch=20, col="#234DEA", cex=2, # Se crean los puntos azules rellenos
axes=F, # se eliminan los ejes
ylab= "", xlab= "") # Se eliminan los nombres de los ejes
box(lty=2, col="#424242", lwd=2) # Agregada una caja gris punteada
# Sigue agregar el eje de las abscisas (de las x) y el de las ordenadas
axis(1, col="#610B21", lwd=3, col.axis="#610B21", cex=2)
axis(2, col="#610B21", lwd=3, col.axis="#610B21", las=2)
# Se agregan las leyendas a los ejes
mtext("Experiencia", side=1, cex=1.7, col="#610B21", line=2)
mtext("Logaritmo del salario", side=2, cex=1.7, col="#610B21", line=2)
for(i in 6:10) lines(cps2[,i] ~ experience, data = cps2, # hace el mapeo de las líneas predeterminadas
col=alpha("#FFFF00", .75), lwd=5) #líneas amarillas gruesas con un 75% de transperencia
title("Estimación de los salarios en forma semi-logarítmica", cex.main=2.7, col.main="#2E2E2E",
sub="Con base en el libro de Kleiber & Zeileis (2008) y con datos de Brendt (1991)", col.sub="#FF0000", font.sub=4, cex.sub=1.3)
# Se crearon el título y subtítulo con los colores y tipo de texto correspondientes
dev.off() # Se cierra el archivo de imégen, JPEG en este caso
Acá abajo aparece la imagen que se generó con el código de arriba. Además, cualquier error que en la imagen venga no es culpa de los autores del libro citado. Los propietarios de los derechos de autor son totalmente los autores del libro.
Existen diversas interfaces que facilitan el trabajo con R.
Entre los editores de texto e IDEs con soporte para R se cuentan: Bluefish,[22] Crimson Editor, ConTEXT, Eclipse,[23] Emacs (Emacs Speaks Statistics), Geany, jEdit,[24] Kate,[25] RStudio,[26] RKWard,[27] Syn, TextMate, Tinn-R, Vim, gedit, SciTE, WinEdt (R Package RWinEdt), notepad++ y Visual Studio.[28]
Sweave es un procesador de documentos que puede ejecutar código de R incrustado en código de LaTeX y para insertar código, resultados y gráficos en el documento escrito en LaTeX. LyX puede usarse para crear y compilar documentos desarrollados en Sweave. El paquete odfWeave es similar, generando documentos en el formato OpenDocument (ODF); extensiones en estado experimental también permiten generar documentos del tipo presentación u hoja de cálculo.
La funcionalidad de R puede ser invocada desde código desarrollado en otros lenguajes de script tales como Python (mediante RPy[29]), Perl (mediante Statistics::R[30]), Ruby[31] y F#.[32] También pueden desarrollarse scripts en R directamente usando littler[33] o Rscript, que forma parte de la distribución básica de R desde la versión 2.5.0.
Otras alternativas a R son las que abajo se presentan. Cabe recordar que pueden tener cierto sesgo a especializarse en algún tema específico, como R lo hace con la biología, fisiología o similares, por ejemplo con el proyecto Bioconductor. En el caso de estos sesgos positivos puede mencionarse a GNU Octave, que es más matemático, o Gretl que se centra más a series de tiempo (usadas en econometría).
No obstante los sesgos temáticos, hay amplísimos grupos que usan todas las alternativas para usos eclécticos. Econometría, biología, edafología, topología, estadística pueden ser algunas de las ramas que cada vez están usando más las alternativas libres de software o lenguajes de programación (como R) para su aplicación teórica o práctica.
Además, los paquetes se desarrollan para R conforme las investigaciones o publicaciones, como el caso del ejemplo 3 líneas arriba. Otro ejemplo es el paquete de Benchmarking de R elaborado por Peter Bogetoft y Lars Otto, ambos investigadores y especialistas del tema. Es decir, los productores de estos paquetes con, casi siempre, especialistas e investigadores que desean compartir los conocimientos aplicados a la comunidad de usuarios.
La naturaleza de los paquetes libres permiten que se testeen rápido y sean sinérgicas las opiniones para un avance pronto. Entonces, existen ámbitos positivos en este caso también tanto como en las siguientes alternativas, las privativas.
No obstante las poderosas alternativas libres mencionadas arriba, existen opciones que son privadas o empresariales. En este caso, pueden presentarse lenguajes de programación con comunidades que comparten códigos. En este caso, Stata es un fuerte ejemplo. Es decir, un especialista puede desarrollar un paquete especial para ese programa y luego compartirlo usualmente con la empresa autora; entonces, la empresa puede distribuirla primero a manera de prueba y luego de forma gratuita (o con montos monetarios especiales) y con el respaldo de la calidad avalada.
Existen puntos a favor de que las empresas distribuyan con cierto aval los códigos o paqueterías: se asegura del óptimo funcionamiento de las mismas, se evitan los bugs que en algún momento pueden ser comunes en ciertos códigos de las alternativas libres y otras más.