Ir al contenido principal

Los aprendizajes sobre la marcha (más sobre R)

En las pasadas entregas estuvimos revisando la básica creación de cuadros con sus respectivas precisiones estadísticas en uno de los lenguajes de moda: R.
No recuerdo haber programado en lenguaje que constara solo de una letra del alfabeto pero reconozco y en cierta forma me complanzco de que me lleva a mis primeros encuentros con el mundo de la programación, en nuestro querido CETis 155, ya que Basic en sus primeras versiones tenía la misma ventana interactiva que tiene R, y que nos permite experimentar ideas y pruebas de código.
Con un par de cursos introductorios y la guía de compañeros del instituto hemos estado bregando y abonando nuevos conocimientos a este cerebro que hace unos meses llegó a los 50 años.
Es por ello que aunque la máquina funciona a las maravillas es necesario que exista la "memoria secundaria", mis apuntes virtuales para cuando mi RAM falle en recordar alguna faena que he realizado con este lenguaje.
En mi caso mi "piedra filosofal" es el tridente de instrucciones paste-parse y eval. 
Estoy convencido y comparto a mis alumnos esta reflexión, que la generación de código conlleva a la generalización que a su vez se ve reflejada en el ahorro de código y con ello a una mayor productividad (a medida que se reduce el número de pulsaciones copy-paste mayor generalización en nuestros programas).
Recurro a otras fuentes para explicar esto:

paste
Es una función para concatener objetos y convertirlos a vectores de caracteres.

paste(...,sep=,collapse=)

...       Son los objetos a ser concatenados
sep  y collapse son cadenas que separan cada elemento a ser concatenado.





En el sitio donde tomo la información podemos ejecutar ejemplos muy interesantes y se muestra más a detalle su uso.
En mi caso construyo instrucciones de forma dinámica para ahorrar el código usando funciones.

parse.
Podemos decir  que analiza la expresión creada, pero no la evalua. Para este mi caso uso el atributo text=instrucciondeR para que usando ...

eval.
Que en si, es quien ejecuta la instrucción creada.

Vamos con un ejemplo llano y simple.


Creamos 4 vectores aleatorios con valores de 1 al 100 y queremos la media aritmética de los cuatro, pero queremos evitar escribir 4 veces la instrucción mean(x1). mean(x2)...etc
Por lo que hacemos un ciclo (instrucción for) de 1 a 4, construimos la instrucción que la guardamos en la variable ins, para luego hacer el parse-eval para obtener su promedio.

Simple, ¿no?. Vamos a nuestro negocio información estadística.

En días pasados se publicaron los resultados de la Encuesta Nacional sobre Disponibilidad y Uso de Tecnologías de la Información en los Hogares (ENDUTIH) 2019. Una vieja conocida mía.

Descargamos los datos del sitio de Internet, y escribimos el siguiente código:


Como es una encuesta vamos a usar nuestro paquete estadístico survey. La fuente de datos es una tabla de FoxPro por lo que necesitamos la librería foreign.

Esta tabla que se convierte en un dataset de R contiene las personas que fueron elegidas, personas de 6 años o más, y que contestan una serie de preguntas en el cuestionario. Para este ejemplo tomaremos:

EDAD - Edad de la persona encuestada.
P7 - Persona que ha usado el Internet en el hogar o fuera de él en los últimos tres meses.

La idea es obtener el número de personas que usan el internet por grupos de edad.
Para ello vamos a hacer grupos quinquenales de edad y para la construcción del cuadro es necesario la creación de variables dicotómicas como vemos a en la imagen anterior, para el uso de el tridente paste-parse-eval  nombre las variables como gpo1, gpo2, gpo3,...gpo13. La variable Universo representa toda la población de 6 años y más.


Creamos un vector que será relacionado con cada valor generado por medio de la función svytotal, definimos el diseño para obtener las cifras expandidas, para el total nacional aplicamos directamente
el svytotal, para el resto de instrucciones, se programa un ciclo y con ésto generamos las instrucciones "svytotal(~gpo1, DisenoE)","svytotal(~gpo2, DisenoE)"..."svytotal(~gpo13, DisenoE)"
cada valor se almacena en el vector cifras, por el último se construye cuadro como un dataset uniendo el vector de etiquetas con el de cifras y se despliega el resultado.


Podemos pontencializar todo esto creando bibliotecas de funciones para automatizar éstas tareas, como miembro de la "vieja guardia" esta característica nos recuerda a las "macros" de los lenguajes Xbase.

Hasta el próximo post.

Miguel Araujo.

Webgrafía.
"RDocumentation" https://www.rdocumentation.org/packages/base/versions/3.6.2/topics/paste
"Análisis y Decisión Transformando datos en decisiones" https://analisisydecision.es/truco-r-eval-parse-y-paste-para-automatizar-codigo/




Comentarios

Entradas populares de este blog

Posit Cloud - como instalar librerías de Python en el entorno de R

 Ahora que estamos tomando una maestría buscando que siga "girando la ardilla" por unos años más en la materia de "Cómputo Estadístico" nos ha sugerido usar la versión gratuita de Posit en la nube. En su página definen este producto como "es una solución basada en la nube que permite acceder al poderoso conjunto de herramientas de ciencia de datos de Posit directamente en el navegador web  - sin requerir instalación o configuraciones complejas". Para los usuarios que han utilizado Posit RStudio en primera instancia verán el entorno muy similar a Posit Cloud con algunas pequeñas diferencias, para empezar necesitamos un usuario o contraseña aunque es posible autenticarse usando alguna cuenta existente como es el caso de Google. Con el tiempo y trabajando en desarrollo de software, vamos entendiendo que quizás el nombre queda muy grande a los pequeños ejemplos, pero es muy recomendable el uso de proyectos siempre. A continuación vemos el entorno Posit Clo...

La librería openxlsx

En el Instituto se utiliza como herramienta de trabajo institucional la suite de ofimática MS Office que ofrece un precio asequible aunque lo actual en el mundo del software es el esquema de suscripciones el que casi se ha convertido en el común de las empresas gigantes de las tecnologías de la información. Es por ello que si bien en un principio que se usaban las bibliotecas XLConnectJars   y XLConnect, al tratar de bajarlas e instalarlas se descubrió - en aquel entonces - que estaban obsoletas. Es por ello que se volteo a la que revisaremos superficialmente en este artículo. Lo primero como siempre es descargar la librería openxlsx que se puede hacer desde el mismo Posit RStudio. Vamos a recrear un cuadro existente en el sitio del Instituto que debido a la crisis sanitaria iniciada en 2020 cobra una relevancia muy importante: "Las principales causas de muerte" que de forma anecdótica   fue la primera aplicación en la cual me pidieron que participara, un programa escri...

R 4.5 vs R 4.4.3

Cuando comparto con mis colegas, sobre todo de trabajo que es mi nicho profesional, acerca de porque tener las últimas versiones del software y que replico sobre todo por dos vertientes: mejor desempeño y funcionalidad del software, y la seguridad que pareciera que las empresas de software recomiendan los mismo o algo cercano a esto. Por ejemplo, veamos lo que nos dice Oracle (dueño de Java) acerca de su versión 8 del Java SE.   En la tabla de la página de Oracle podemos observar las fechas en los cuales ya no habrá soporte para ciertas versiones de Java. En este breve artículo veremos en el caso del interprete de R como se desempeña en una versión con respecto a la más reciente. Los puestos de trabajo que se registran por los patrones en el IMSS ha sido una cifra que muestra el avance o retroceso de como se encuentra el empleo en nuestro país, en este caso diremos que en el sector formal. Los microdatos oscilan arriba de los 20 millones y para su procesamiento es necesario o divi...