*! version 1.0 21jul2026

Titulo

atip_volcano -- Grafico de atipicos: magnitud (X) vs. evidencia (Y)

Sintaxis

atip_volcano varname,
nreglas(varname)
[opciones]

Requerida
nreglas(varname) variable con el conteo de reglas disparadas (0-5), tipicamente N_REGLAS de atip_score

Opcionales
id(varname) variable para etiquetar los puntos prioritarios en el grafico

nthresh(#) umbral de evidencia (N_REGLAS) para considerar "prioritario"; por defecto nthresh(3)

magthresh(#) umbral de magnitud (|z|) para considerar "prioritario"; por defecto magthresh(2)

title(string) titulo del grafico

seed(#) semilla para el jitter vertical; por defecto seed(12345)

saving(filename) guarda el grafico con graph save

Descripcion

atip_volcano dibuja un grafico de dispersion con la magnitud
local (varname, tipicamente MAGNITUD_LOCAL de
atip_score) en el eje X y la evidencia
(nreglas(), el conteo de 0 a 5 reglas disparadas) en el eje Y.
Los casos con evidencia fuerte (nreglas()>=nthresh) Y magnitud
grande (varname>=magthresh) se marcan en rojo, con etiqueta
si se especifica id().

Sigue el mismo lenguaje visual que mmd_volcano (magnitud en X,
evidencia en Y, cuadrante prioritario resaltado) para mantener
consistencia entre los reportes de deteccion de outliers y los de
comparacion de distribuciones (MMD). La diferencia clave: aqui el
eje Y no es -log10(p) -- es un conteo discreto real (0-5),
porque las reglas heuristicas de atip_reglas no tienen un
p-valor formal. Por eso se aplica un jitter aleatorio vertical
(±0.25) solo para que los puntos con el mismo conteo no queden
exactamente superpuestos en una linea horizontal; el dato de fondo
sigue siendo discreto.

Opciones

nreglas(varname) (requerida) variable numerica
con el conteo de reglas disparadas, valores esperados 0-5.

id(varname) variable (numerica o string) usada para
etiquetar los puntos marcados como prioritarios. Sin esta opcion, los
puntos prioritarios se muestran sin texto.

nthresh(#) umbral minimo de nreglas() para
que un caso se considere de evidencia fuerte. Por defecto 3 (de 5).

magthresh(#) umbral minimo de magnitud local para
que un caso se considere grande. Por defecto 2 (equivalente a
|z|>=2).

Ejemplos

Con auto.dta (requiere haber corrido atip_score antes)

. sysuse auto, clear

. atip_score price, group(foreign)

. atip_volcano MAGNITUD_LOCAL, nreglas(N_REGLAS) nthresh(3) magthresh(2) id(make) ///

title("Volcano de atipicos - price por foreign")

Con nlsw88.dta -- confirmado con datos reales (n=1878): 67 casos prioritarios, patron esperado con la mayoria de puntos rojos en la esquina superior derecha

. sysuse nlsw88, clear

. drop if missing(wage, union)

. atip_score wage, group(union)

. atip_volcano MAGNITUD_LOCAL, nreglas(N_REGLAS) nthresh(3) magthresh(2) id(idcode) ///

title("Volcano de atipicos - wage por union")

Autor / notas de desarrollo

Andres Talavera Cuya

Direccion Nacional de Censos y Encuestas -- INEI Peru

Email: atalaveracuya@gmail.com

Comandos relacionados: atip_reglas y atip_score (insumo directo
de este comando) -- instalar los tres juntos. Ver
tambien mmd_volcano para el equivalente aplicado al test MMD.

Licencia

Este modulo se distribuye bajo los terminos de la GPL v3
(https://www.gnu.org/licenses/gpl-3.0.txt).