Ir al contenido principal

R parte 2


En la parte 1 vimos como obtener de manera separada ciertos cálculos para armar un cuadro, ahora entra la parte del programador de la vieja escuela, resolver como se pueda – en aquellos ya muy lejanos años en el CETis 155 cuando se nos hacían observaciones a nuestro código (Basic, Pascal o Cobol) nuestra defensa era “pero jala, ¿no?”.
Lo que leí de R es que ya es un lenguaje multiparadigma por lo que entiendo que se pueden hacer clases o mínimo funciones, por ahora resolví de la primera forma que intuí, de hecho no uso cruce de 3 variables pues el bendito copy-paste me permitio sacar las cifras de la parte expandida del cuadro (o como lo llaman nuestros compañeros las estimaciones puntuales).
Empezamos pues, la estrategía es que los resultados parciales (o tijereteados) se guarden en arreglos de una dimensión -vectores- para después meterlos en un dataframe según ejemplo observado en la página de la Universidad de las Palmas de la Gran Canaria.

Lo que sigue es lógica de este old programmer.

#llenamos columnas - Primera columna
col1<-c(as.numeric(svytotal(~cel1_1,DisenoE)),as.numeric(svytotal(~cel2_1,DisenoE)), as.numeric(svytotal(~cel3_1,DisenoE)), as.numeric(svytotal(~cel4_1,DisenoE)))

Entonces col1 es la primera fila con los totales, voy a acomodar los valores de izquierda a derecha y de arriba a abajo, por cualquier cosa lo que me devuelva el svytotal() lo convierto a número y por medio de c los anexo a este arreglo llamado col1.
Seguiré calculando los tijeretazos, primero subtotales por grupo de edad de la primera columna.

#Cortes por grupos de edad
corte1 <- (svyby(~cel1_1, by=~Fila1, DisenoE, svytotal))$cel1_1

Cortes por grupo de edad por cada variable referente al número de hijos sobrevivientes.

#Cortes por grupos de edad
#Sin hijos sobrevivientes
corte2 <- (svyby(~cel2_1, by=~Fila1, DisenoE, svytotal))$cel2_1

#Un hijo sobreviviente
corte3 <- (svyby(~cel3_1, by=~Fila1, DisenoE, svytotal))$cel3_1

#Dos o más hijos sobrevivientes
corte4 <- (svyby(~cel4_1, by=~Fila1, DisenoE, svytotal))$cel4_1



Tenemos 4 arreglos que – en mi caso – queremos anexar a col1, revisando más ejemplos, una forma de agregar elementos a un arreglo es por medio de su subíndice arreglo[i]. Hasta ahora en col1 tenemos los 4 primeros elementos de la primera columna, necesitamos los desgloses. Los elementos de los arreglos deben ser intercalados para que se muestren como lo pide el cuadro.


Col1
Corte1
Corte2
Corte3
Corte4
vt1
Corte1[1]
Corte2[1]
Corte3[1]
Corte4[1]
vt2
Corte1[2]
Corte2[2]
Corte3[2]
Corte4[2]
vt3
Corte1[3]
Corte2[3]
Corte3[3]
Corte4[3]
vt4
Corte1[4]
Corte2[4]
Corte3[4]
Corte4[4]
Corte1[1]
Corte1[5]
Corte2[5]
Corte3[5]
Corte4[5]
Corte2[1]
Corte1[6]
Corte2[6]
Corte3[6]
Corte4[6]
Corte3[1]
Corte1[7]
Corte2[7]
Corte3[7]
Corte4[7]
Corte4[1]




Corte1[2]




Corte2[2]




...





Entonces aquí viene mi lógica, se asume que todos tienen la misma dimensión por lo que con un solo ciclo se recorren los 4 arreglos, como hay una categoría que no entra en el juego se pregunta por el grupo de edad (7) que no entra para la elaboración de este cuadro (no es parte del subuniverso). Aquí el código:


 Como el tiempo pasa inexorablemente no me quedó más que – por ahora - copiar y pegar para las columnas subyacentes, aquí el código:

 Por último creo un dataframe con los arreglos col1, col2 y col3.

cuadro5_1E <- data.frame(col1, col2, col3)

Si lo consultamos obtenemos el primer cuadro con cifras expandidas.



 Para calcular las cifras muestrales, tenemos que hacer el nuevo diseño para hacer lo mismo pero agregando este nuevo diseño.

DisenoM <- svydesign(id=~UPM_DIS, strata=~EST_DIS, data=consulta, weights=~CifMuestral)

La columna de CifMuestral tiene un 1 para todos los casos, y con esto al multiplicarse por el dato dicotómico nos debería de dar la cifra muestral.
Y hacemos el mismo tango, cambiando el DisenoE por DisenoM. Para dejarlo en un dataframe final al que llamamos Cuadro5_1M.


 …
cuadro5_1M <- data.frame(col1, col2, col3)


 Y hasta aquí la parte de svytotal() y svyby() ahora viene lo interesante que son los porcentajes y el cálculo de precisiones en la tercera parte de este instructivo.
Miguel Araujo.

Comentarios

Entradas populares de este blog

REDATAM en Ubuntu (Linux)

 En un blog alterno, escribí sobre como migraba un "viejo" Intel i5 al sistema operativo Ubuntu en su versión más actual. Me comunique con mi gran colega Lenin de la CELADE en Chile, después de mucho tiempo, y le pedí me diera un pequeño resumen del "estado del arte" de REDATAM me dijo que todo marchaba bien, y pues ahora creo que tengo que actualizarme en contenedores pues el web server se encuentra ahí. Nos pusimos manos a la obra, el instalable desde la página no tiene ninguna extensión de archivo, asumí que era un ejecutable para Linux, no se si la página sufra ataques constantes ya que después quise volver a descargar sin éxito, la página estaba caida, sin embargo rescate el ejecutable anteriormente descargado. Últimamente primero hago y después documento, ya que con todo y mi compañero Deep,  no todo sale a la primera ni como lo dictan sus sugerencias, sobre todo en Linux y MacOS.  Por lo que, les muestro solo el resultado final de esta primera exploración, im...

El problema del gallo - otra vertiente de usar Python en RMarkdown con Posit RStudio

Cuando pensamos que ya se había cruzado el río, el buen gallo - mi amigo el Dany  Lara- no podía insertar código de Python  en un documento de RMarkdown  usando la versión de escritorio de Posit RStudio a pesar de las soluciones como instalar el Python y direccionarlo desde R con la biblioteca reticulate . Si bien se podía ejecutar código del interprete base, al querer correr usando módulos y con ello intentando instalar dichos módulos mandaba el siguiente mensaje: > py_install('matplotlib') Using virtual environment "D:/tu_usuario/Documents/.virtualenvs/r-reticulate" ... WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1006)'))': /simple/matplotlib/ WARNING: Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) a...

RMarkdown - Python para usuarios de Posit RStudio

 Al escribir el post anterior pareciera que sería la misma lógica con la versión de escritorio de Posit RStudio , sin embargo al querer ejecutar un chunk de Python en un archivo de RMarkdown , manda que se tienen que actualizar los paquetes, descarga algunas cosas pero al final manda el siguiente mensaje: Show in New Window Error in system2(uv, c("python list", "--all-versions", "--color never", : '"C:\Users\mi_nombre_de_usuario\AppData\Local\R\cache\R\reticulate\uv\bin\uv.exe"' not found Error: Installation of Python not found, Python bindings not loaded. See the Python "Order of Discovery" here: https://rstudio.github.io/reticulate/articles/versions.html#order-of-discovery. La IA de Google aconseja  instalar uv pero el paquete reticulate no tiene ese método. Cuando se pensaba en instalar todo el que yo le llamo ecosistema del lenguaje de programación R se trató con esta última receta, descargar Python e instalarlo en una ...