lunes, 27 de mayo de 2024

Tutoriales

Using forcats

Muestro la utilidad del paquete forcats para el análisis de variables categóricas y ordinales.Propongo algunos ejemplos con data propia


categóricas y variables ordinales.


migracion %>% 
  ggplot(aes(quien_es)) + # se visualiza la data tal como está
  geom_bar() +
  coord_flip()

ordeno las categorías según sus frecuencias

# quienes han migrado
migracion %>% 
  ggplot(aes(fct_infreq(quien_es))) + #empleo la funcion fct_infreq() del paquete forcats
  geom_bar() +
  coord_flip()

Hay un conjunto de categorías que no tienen suficientes casos. Las reuno en una mayor a la que denomino Otros. Uso “lump()”, aunque se recomienda emplear las versiones más específicas. Esta que es genérica parece que desaparecerá pronto:

  • fct_lump_min(): para agregar categorías que aparecen un mínimo de veces,
  • fct_lump_prop(): para agregar categorías que aparecen por debajo de cierto proporción,
  • fct_lump_n(): agrega las categorías menos las que aparecen n número de veces,
  • fct_lump_lowfreq(): agrega las categorías que tienen una frecuencia muy baja.
# quienes han migrado
migracion %>%
  mutate(quien_es_lump = fct_lump(quien_es, n = 5,
                                  other_level = "Otros")) %>%
  count(quien_es_lump, sort = TRUE) %>% 
  ggplot(aes(quien_es_lump, n)) +
  geom_col() +
  coord_flip()

Se puede elegir por la frecuencia de la cateoría, por la proporción, etc.

migracion %>% 
  count(pais_emigro) %>%  # I need percentages
  na.omit() %>% 
 filter( n > 2) %>% 
  mutate(percentage = n/sum(n),
         percentage = round(percentage,2)) %>% 
  # obtengo el valor minimo  y maximo para y
  mutate(max = cumsum(percentage),
         min = c(0, head(max, n=-1))) %>% 
  mutate(posicion = (max + min) / 2,
         etiquetas =paste0(pais_emigro ,":", "\n ",
                           percentage*100, "%")) %>% 
  ggplot(aes(ymax = max, ymin = min, xmax=4,
             xmin = 3, fill = pais_emigro )) +
  geom_rect() +
  xlim(c(.1, 4)) +
  coord_polar(theta="y") +
  geom_text( x=3.5, aes(y=posicion, label=etiquetas), size=1.85,
             color = "gray90", fontface = "bold")+
  scale_fill_manual(values = c("#ffab18", 
                               "#1380a1", 
                               "#990000",
                               "#588300")) +
  # Try to remove that to understand how the chart is built initially
  theme_void() +
  theme(legend.position = "none")

LS0tDQp0aXRsZTogIlVzaW5nIGZvcmNhdHMiDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQoNCkVzdW4gcGFxdWV0ZSBleHRyZW1hZGFtZW50ZSDDunRpbCBwYXJhIHRyYWJhamFyIGNvbiB2YXJpYWJsZXMgY2F0ZWfDs3JpY2FzIHkgdmFyaWFibGVzIG9yZGluYWxlcy4NCg0KYGBge3J9DQojIHF1aWVuZXMgaGFuIG1pZ3JhZG8NCm1pZ3JhY2lvbiAlPiUgDQogIGdncGxvdChhZXMocXVpZW5fZXMpKSArDQogIGdlb21fYmFyKCkgKw0KICBjb29yZF9mbGlwKCkNCmBgYA0KDQpvcmRlbm8gbGFzIGNhdGVnb3LDrWFzIHNlZ8O6biBzdXMgZnJlY3VlbmNpYXMNCg0KDQpgYGB7cn0NCiMgcXVpZW5lcyBoYW4gbWlncmFkbw0KbWlncmFjaW9uICU+JSANCiAgZ2dwbG90KGFlcyhmY3RfaW5mcmVxKHF1aWVuX2VzKSkpICsNCiAgZ2VvbV9iYXIoKSArDQogIGNvb3JkX2ZsaXAoKQ0KYGBgDQoNCg0KSGF5IHVuIGNvbmp1bnRvIGRlIGNhdGVnb3LDrWFzIHF1ZSBubyB0aWVuZW4gc3VmaWNpZW50ZXMgY2Fzb3MuIExhcyBqdW50byBlbiB1bmEgbWF5b3IuIFVzbyAibHVtcCgpIiwgYXVucXVlIHNlIHJlY29taWVuZGEgZW1wbGVhciBsYXMgdmVyc2lvbmVzIG3DoXMgZXNwZWPDrWZpY2FzLiBFc3RhIHF1ZSBlcyBnZW7DqXJpY2EgcGFyZWNlIHF1ZSBkZXNhcGFyZWNlcsOhIHByb250bzoNCg0K4oCiIGZjdF9sdW1wX21pbigpOiBsdW1wcyBsZXZlbHMgdGhhdCBhcHBlYXIgZmV3ZXIgdGhhbiBtaW4gdGltZXMuDQrigKIgZmN0X2x1bXBfcHJvcCgpOiBsdW1wcyBsZXZlbHMgdGhhdCBhcHBlYXIgaW4gZmV3ZXIgcHJvcCAqIG4gdGltZXMuDQrigKIgZmN0X2x1bXBfbigpIGx1bXBzIGFsbCBsZXZlbHMgZXhjZXB0IGZvciB0aGUgbiBtb3N0IGZyZXF1ZW50IChvciBsZWFzdCBmcmVxdWVudCBpZiBuIDwgMCkNCuKAoiBmY3RfbHVtcF9sb3dmcmVxKCkgbHVtcHMgdG9nZXRoZXIgdGhlIGxlYXN0IGZyZXF1ZW50IGxldmVscywgZW5zdXJpbmcgdGhhdCAib3RoZXIiIGlzIHN0aWxsDQp0aGUgc21hbGxlc3QgbGV2ZWwuDQoNCg0KDQpgYGB7cn0NCiMgcXVpZW5lcyBoYW4gbWlncmFkbw0KbWlncmFjaW9uICU+JQ0KICBtdXRhdGUocXVpZW5fZXNfbHVtcCA9IGZjdF9sdW1wKHF1aWVuX2VzLCBuID0gNSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdGhlcl9sZXZlbCA9ICJPdHJvcyIpKSAlPiUNCiAgY291bnQocXVpZW5fZXNfbHVtcCwgc29ydCA9IFRSVUUpICU+JSANCiAgZ2dwbG90KGFlcyhxdWllbl9lc19sdW1wLCBuKSkgKw0KICBnZW9tX2NvbCgpICsNCiAgY29vcmRfZmxpcCgpDQoNCmBgYA0KDQpTZSBwdWVkZSBlbGVnaXIgcG9yIGxhIGZyZWN1ZW5jaWEgZGUgbGEgY2F0ZW9yw61hLCBwb3IgbGEgcHJvcG9yY2nDs24sIGV0Yy4NCg0KDQpgYGB7cn0NCm1pZ3JhY2lvbiAlPiUgDQogIGNvdW50KHBhaXNfZW1pZ3JvKSAlPiUgICMgSSBuZWVkIHBlcmNlbnRhZ2VzDQogIG5hLm9taXQoKSAlPiUgDQogZmlsdGVyKCBuID4gMikgJT4lIA0KICBtdXRhdGUocGVyY2VudGFnZSA9IG4vc3VtKG4pLA0KICAgICAgICAgcGVyY2VudGFnZSA9IHJvdW5kKHBlcmNlbnRhZ2UsMikpICU+JSANCiAgIyBvYnRlbmdvIGVsIHZhbG9yIG1pbmltbyAgeSBtYXhpbW8gcGFyYSB5DQogIG11dGF0ZShtYXggPSBjdW1zdW0ocGVyY2VudGFnZSksDQogICAgICAgICBtaW4gPSBjKDAsIGhlYWQobWF4LCBuPS0xKSkpICU+JSANCiAgbXV0YXRlKHBvc2ljaW9uID0gKG1heCArIG1pbikgLyAyLA0KICAgICAgICAgZXRpcXVldGFzID1wYXN0ZTAocGFpc19lbWlncm8gLCI6IiwgIlxuICIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJjZW50YWdlKjEwMCwgIiUiKSkgJT4lIA0KICBnZ3Bsb3QoYWVzKHltYXggPSBtYXgsIHltaW4gPSBtaW4sIHhtYXg9NCwNCiAgICAgICAgICAgICB4bWluID0gMywgZmlsbCA9IHBhaXNfZW1pZ3JvICkpICsNCiAgZ2VvbV9yZWN0KCkgKw0KICB4bGltKGMoLjEsIDQpKSArDQogIGNvb3JkX3BvbGFyKHRoZXRhPSJ5IikgKw0KICBnZW9tX3RleHQoIHg9My41LCBhZXMoeT1wb3NpY2lvbiwgbGFiZWw9ZXRpcXVldGFzKSwgc2l6ZT0xLjg1LA0KICAgICAgICAgICAgIGNvbG9yID0gImdyYXk5MCIsIGZvbnRmYWNlID0gImJvbGQiKSsNCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gYygiI2ZmYWIxOCIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIjMTM4MGExIiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiM5OTAwMDAiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIjNTg4MzAwIikpICsNCiAgIyBUcnkgdG8gcmVtb3ZlIHRoYXQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGNoYXJ0IGlzIGJ1aWx0IGluaXRpYWxseQ0KICB0aGVtZV92b2lkKCkgKw0KICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpDQpgYGANCg0KDQoNCg0KDQo=

No hay comentarios.: