Aplica exactamente una de las cuatro agregaciones del marco: ratio,
ratio_umbral, promedio o promedio_ponderado. La transición se valida
contra el grafo de transiciones_granularidad().
Usage
agregar(
medidas,
destino,
funcion = c("ratio", "ratio_umbral", "promedio", "promedio_ponderado"),
umbral = NULL,
pesos = NULL,
coleccion = NULL,
colecciones = NULL,
organizacion = NULL,
organizaciones = NULL
)Arguments
- medidas
Data frame producido por
medir()o una agregación anterior. Debe contener una sola métrica específica, una corrida y una granularidad.- destino
Granularidad de destino.
- funcion
Una de
"ratio","ratio_umbral","promedio"o"promedio_ponderado".- umbral
Umbral en
[0, 1]requerido porratio_umbral.- pesos
Vector numérico requerido por
promedio_ponderado, con una entrada por fila demedidas. Si trae nombres, se emparejan conobjeto_medibley se falla nombrando lo que sobra o falta —igual que enindice_calidad()—, así que la misma declaración escrita en otro orden da el mismo número. Sin nombres se leen por posición.- coleccion
Frontera declarada, exigida cuando
destinoes"coleccion": el objeto decoleccion()o el perfil deperfilar_coleccion(). Sin ella no se sabe sobre qué tablas se está agregando, y el número resultante no describiría nada.- colecciones
Lista nombrada de objetos de
coleccion()operfilar_coleccion(), exigida cuandodestinoes"conjuntoColecciones". Los nombres declaran la identidad y la frontera del conjunto; no se agregan organizaciones ni otros alcances implícitos.- organizacion
Frontera institucional declarada con
organizacion(), exigida cuandodestinoes"organizacion". Qué bases pertenecen a un organismo no está en los datos, así que lo declara quien lo sabe.- organizaciones
Lista de objetos de
organizacion(), exigida cuandodestinoes"conjuntoOrganizaciones".Los dos niveles institucionales son opcionales: un análisis de calidad no siempre tiene una organización detrás —una entrega suelta, un archivo que alguien mandó, una base sin dueño declarado—, y nada obliga a pasar por ellos. Existen para quien los necesita, y sin declaración
agregar()se niega y explica cómo declararla, que es distinto de inventar una frontera que nadie nombró.
Details
ratio sólo acepta medidas booleanas. ratio_umbral sólo acepta medidas
reales. Los promedios aceptan esos dos tipos y ningún otro, y siempre
producen resultado real en [0, 1]. Los tres tipos no acotados
—numero_real, entero y duracion— se rechazan nombrando la métrica que
los declara: el promedio de una duración en días es un número de días, y
publicarlo como resultado real en [0, 1] lo presentaría como una
proporción. La guarda es por tipo declarado, no por el valor observado:
antes una duración de 0,25 y 0,75 días pasaba y la misma métrica con
1,5 días abortaba, así que el mismo modelo cambiaba de conducta según los
datos que le tocaran. Para el promedio ponderado, los pesos deben estar en
[0, 1] y sumar uno dentro de cada objeto de destino. La columna
orientacion se conserva sin invertir el resultado: un ratio de una métrica
de defecto sigue siendo la proporción de defectos.
Lo que el agregado conserva de la medición
Una agregación hereda lo que sus partes declararon: configuracion_modelo,
configuracion_aplicabilidad, cobertura_metricas, marco_calidad y
fecha_declarada viajan en el objeto. Lo último no es decorativo: sin
fecha_declarada, la guarda que impide comparar dos entregas en orden
invertido queda desactivada y comparar_evaluaciones() publicaría el delta
con el signo al revés.
alcance_medidas —«midió tres celdas de cuatro»— también viaja, pero
reexpresado en la clave del agregado: la tabla que publica medir() está
indexada por metrica_instanciada (Formato@t.cod) y el agregado renombra la
métrica (agregada:ratio:Formato), así que arrastrarla tal cual dejaba una
declaración que no se podía atribuir a ninguna fila. Los conteos se suman
por objeto de destino, y sólo cuando todas las partes declaran la misma
unidad; si no, la fila declara la mezcla en lugar de publicar un total que no
estaría en ninguna unidad. Las partes completas también suman —una
columna de 6 de 6 junto a una de 5 de 6 da 11 de 12—, y en un destino por
fila (instanciaEntidad) cada fila cuenta sus propias celdas: se declaran
sólo las incompletas, con su número de fila en el motivo.
Una medida repetida —el mismo id_medida dos veces, como deja una medición
unida consigo misma— se rechaza, como en evaluar(). El id_medida de cada
fila agregada nombra lo que agrega —destino, función, métrica y objeto, como
M-agg-atributo-ratio-NoNulo@t.x—, así que dos partes agregadas por separado
se pueden unir y subir de nivel, y el mismo agregado repetido sigue
repitiendo su identificador. Un valor que no se
puede agregar se rechaza nombrando la métrica y la causa: un tipo no
acotado, una medida ausente o suprimida, o un valor fuera de [0, 1].
umbral sólo se acepta con ratio_umbral, y el borde se compara con
tolerancia de redondeo: 1 - 0.9 alcanza el umbral 0.1.
Las coberturas de frontera (cobertura_coleccion y sus hermanas) no se
arrastran: cada agregación calcula la de su propio destino con las partes que
entraron a ese número.
Los pesos se publican
Cuando hay pesos, el objeto los publica en pesos_declarados, con el nombre
de la parte que recibió cada uno, de modo que el número se pueda rehacer con
lo que el objeto trae. Y si alguna parte entró con peso cero, se declara en
partes_con_peso_cero: entró al número sin aportarle nada, queda contada en
la identidad de la fila y leerlo sin saberlo es leer otra cosa. La
declaración depende de que haya un peso cero, no del destino: antes sólo
existía en los cuatro destinos que tienen cobertura de frontera, y en
conjuntoEntidades el mismo peso cero pasaba en silencio.
Cuando el destino es conjuntoEntidades, promedio combina las partes sin
pesos porque las medidas de nivel entidad no llevan su cantidad de filas.
El resultado lo declara en advertencia_agregacion: es un promedio sin pesos
y agregar() no conoce el alcance de cada parte. En coleccion, la frontera
se declara y por eso sólo se admite promedio_ponderado: sin pesos no se
puede decidir cuanto debe aportar cada tabla de esa coleccion.
No existe una transición hacia factor, dimensión o modelo: esos campos son taxonómicos y esta función no calcula un índice global.
Examples
nucleo <- metricas_nucleo()
especifica <- especializar(nucleo$NoNulo)
instancia <- instanciar(especifica, "personas", "edad")
medidas <- medir(modelo(instancia), data.frame(edad = c(20, NA, 35)))
agregar(medidas, "atributo", "ratio")
#> id_medida
#> 1 medicion-20261002T092339.425888-7626-agg-atributo-ratio-NoNulo@personas.edad
#> id_medicion fecha metrica
#> 1 medicion-20261002T092339.425888-7626 2026-10-02 09:23:39 NoNulo
#> metrica_especifica metrica_instanciada dimension factor orientacion
#> 1 NoNulo agregada:ratio:NoNulo Completitud Densidad conformidad
#> granularidad tipo_resultado entidad atributo fila objeto_medible resultado
#> 1 atributo real personas edad NA personas$edad 0.6666667
#> agregacion advertencia_agregacion
#> 1 ratio <NA>
