Calculadora NMP (MPN): densidad microbiana por tubos positivos
Convierta una fila de tubos positivos y negativos en una densidad: un resultado 5-3-1 de tres diluciones con 5 tubos cada una se traduce en un NMP por 100 mL, junto a la estimación clásica de Thomas y un intervalo de confianza. Gratis en su navegador.
- Gratis
- Funciona en su navegador
- Sin registro
- Sus datos no salen de su equipo
Ejecutar — gratis
Ejemplo resuelto
- Por volumen (mL)
- 100
- Patrón
- 5-3-1
- Total de tubos
- 15
- Total de positivos
- 9
- NMP por mL
- 1,0864475085
El método del número más probable estima la densidad microbiana viable cuando los organismos se cuentan por presencia o ausencia en tubos réplica a lo largo de una serie de diluciones, no como colonias en placa. Laboratorios de agua, microbiólogos de alimentos y analistas ambientales siguen usando códigos y tablas NMP para coliformes, enterococos y otros indicadores. Esta calculadora acepta cada nivel de su serie como volumen de inóculo en mililitros, número de tubos y tubos positivos, y resuelve la ecuación de máxima verosimilitud de Poisson para la densidad por mililitro de muestra original. Puede reescalar el resultado a NMP por 100 mL u otro volumen de informe, compararlo con la aproximación clásica de Thomas y leer un intervalo de confianza aproximado por información de Fisher. Una serie totalmente estéril devuelve densidad cero; una serie totalmente positiva se rechaza como no acotada hasta que añada una dilución superior con negativos.
Qué estima el método del número más probable
El análisis del número más probable asume que los organismos viables se distribuyen al azar en la muestra según un proceso de Poisson y que un tubo se vuelve positivo cuando recibe al menos una unidad viable. Bajo esos supuestos, la probabilidad de que un tubo inoculado con volumen v mililitros de muestra original sea positivo es uno menos e elevado a menos lambda por v, donde lambda es la densidad desconocida en organismos por mililitro.
Tubos réplica en varias diluciones generan una superficie de verosimilitud para lambda; el número más probable es la densidad que maximiza esa verosimilitud. En la práctica usted anota cuántos de n tubos crecieron en cada volumen de inóculo, forma el patrón multinivel como cinco-tres-uno y consulta o calcula la densidad. Ese contrato de borde coincide con la práctica de laboratorio de informar valores mayores-que solo cuando la serie es totalmente positiva y con clientes de facturación que tratan el fallo duro distinto de un límite numérico superior.
Quién se apoya en el número más probable
Los laboratorios docentes y los generadores de exámenes necesitan un oráculo determinista que reproduzca la lógica Poisson del NMP sin obligar a memorizar solo tablas decimales de tres tubos. Los microbiólogos de alimentos y ambientales con conteos de réplica no estándar o volúmenes de inóculo inusuales no pueden usar una tarjeta McCrady fija y se benefician de un solucionador continuo de máxima verosimilitud. La validación fallida no consume saldo.
Mantenga las solicitudes pequeñas, fije densidades redondeadas en las pruebas y obtendrá NMP reproducibles para deberes, plugins LIMS y edge workers sin montar software estadístico solo por una serie de diluciones.
Qué puede hacer con ella
Docencia y corrección automática de exámenes
Califique el trabajo del alumnado sobre series de dilución frente a un oráculo NMP de máxima verosimilitud determinista que rechaza con claridad las series totalmente positivas no acotadas.
Diseños de réplica no estándar
Calcule la densidad MLE continua para conteos de tubos y volúmenes de inóculo arbitrarios cuando las tablas McCrady impresas no cubren el diseño.
Preguntas frecuentes
¿Qué significa la cadena pattern?
pattern une los conteos positivos en el orden de los niveles con guiones (por ejemplo 5-3-1). Es una etiqueta de conveniencia equivalente al código NMP clásico, no una clave de búsqueda en tabla.
¿Qué pasa si todos los tubos de la serie salen positivos?
El resultado se rechaza, porque una serie toda positiva no tiene límite superior. Añada una dilución mayor que deje algunos tubos negativos y vuelva a calcular.
¿Y si ningún tubo sale positivo?
Una serie completamente estéril da una densidad de cero. Es un resultado válido para la muestra y las diluciones analizadas, no un error.
¿Puedo expresar el NMP por 100 mL?
Sí. La densidad se calcula por mililitro de muestra original y puede reescalarse a NMP por 100 mL o a cualquier otro volumen de informe que use su método.
¿Cómo se compara el resultado con la fórmula de Thomas?
La cifra principal sale de la solución de máxima verosimilitud para sus tubos. La aproximación clásica de Thomas aparece al lado para comparar, junto con un intervalo de confianza aproximado.
Herramientas relacionadas
Para desarrolladores — acceso por API
Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.
Endpoint de API
¿Prefiere automatizarlo? Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. La misma capacidad también se ejecuta aquí en la web, por email y desde Telegram — y pronto también desde nuestra app.
Llámela desde su stack
curl -X POST https://api.kit.forhosting.com/bio/most-probable-number \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"levels":[{"volume_ml":10,"tubes":5,"positive":5},{"volume_ml":1,"tubes":5,"positive":3},{"volume_ml":0.1,"tubes":5,"positive":1}]}'const res = await fetch("https://api.kit.forhosting.com/bio/most-probable-number", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"levels": [
{
"volume_ml": 10,
"tubes": 5,
"positive": 5
},
{
"volume_ml": 1,
"tubes": 5,
"positive": 3
},
{
"volume_ml": 0.1,
"tubes": 5,
"positive": 1
}
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/bio/most-probable-number",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"levels": [
{
"volume_ml": 10,
"tubes": 5,
"positive": 5
},
{
"volume_ml": 1,
"tubes": 5,
"positive": 3
},
{
"volume_ml": 0.1,
"tubes": 5,
"positive": 1
}
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/bio/most-probable-number", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"levels":[{"volume_ml":10,"tubes":5,"positive":5},{"volume_ml":1,"tubes":5,"positive":3},{"volume_ml":0.1,"tubes":5,"positive":1}]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"levels":[{"volume_ml":10,"tubes":5,"positive":5},{"volume_ml":1,"tubes":5,"positive":3},{"volume_ml":0.1,"tubes":5,"positive":1}]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/bio/most-probable-number", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Ejemplo de solicitud
{
"levels": [
{
"volume_ml": 10,
"tubes": 5,
"positive": 5
},
{
"volume_ml": 1,
"tubes": 5,
"positive": 3
},
{
"volume_ml": 0.1,
"tubes": 5,
"positive": 1
}
]
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "bio.most_probable_number",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.
Precio
Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.
Errores
| HTTP | Código | Significado |
|---|---|---|
401 | unauthorized | API key ausente o inválida. |
402 | insufficient_balance | El saldo no cubre el precio de la tarea. |
404 | unknown_type | El tipo de tarea no existe. |
429 | rate_limited | Demasiadas peticiones. Use el webhook en vez de sondear. |
Notas técnicas
Qué estima el método del número más probable
Este endpoint no busca en una tabla impresa: resuelve la ecuación de puntuación del log-verosimilitud por bisección determinista, de modo que se admiten conteos de tubos arbitrarios y volúmenes no decimales dentro de los límites indicados. Cuando todos los tubos son negativos el máximo está en densidad cero y la API devuelve mpn_per_ml igual a cero. Cuando todos son positivos la verosimilitud crece sin cota al aumentar la densidad, no hay NMP finito y la tarea falla con invalid_input pidiendo una dilución superior con al menos un tubo negativo.
Contrato de entrada, salidas y cómo leer NMP por mL o por 100 mL
Ejemplo: cinco tubos a diez mililitros todos positivos, cinco a un mililitro con tres positivos y cinco a cero coma uno mililitros con uno positivo es el patrón clásico cinco-tres-uno; la densidad MLE ronda un organismo por mililitro y se escala a unos cien por cien mililitros. Combine la densidad numérica con su propia tabla regulatoria o método de referencia cuando una norma exija un código publicado concreto en lugar de un MLE continuo. Envíe por POST un cuerpo JSON cuyo campo obligatorio levels es un array de uno a veinte objetos. Cada objeto necesita volume_ml, un volumen de inóculo finito y positivo de muestra original por tubo en mililitros; tubes, un entero positivo de réplicas; y positive, un entero no negativo de tubos con crecimiento que no supere tubes. El opcional per_volume_ml vale uno por defecto y multiplica la densidad para que pueda informar NMP por 100 mL enviando cien, como en muchas tablas de calidad del agua. El opcional confidence_level vale cero coma nueve cinco por defecto y debe situarse en el intervalo cerrado de cero coma cinco a cero coma nueve nueve nueve. En caso de éxito el cuerpo repite levels, una cadena pattern que une los conteos positivos con guiones, total_tubes y total_positive, mpn_per_ml y mpn escalado por per_volume_ml, el mismo par para la aproximación de Thomas cuando está definida, confidence_level, method maximum_likelihood y una fórmula breve. Cuando la información de Fisher es positiva la respuesta incluye también ci_low_per_ml, ci_high_per_ml y los ci_low y ci_high escalados. Los fallos de validación nombran el campo, no se facturan y cubren levels ausentes, volúmenes no positivos, positive mayor que tubes, series totalmente positivas y confidence_level fuera de rango.
Dónde aporta valor una API de estimación NMP
Los sistemas de calidad del agua potable, residual y embotellada siguen expresando coliformes y enterococos como NMP por cien mililitros; los scripts de automatización pueden enviar los conteos positivos brutos y guardar mpn con el per_volume_ml elegido en lugar de reescribir filas de tabla.
Casos de integración
Calidad del agua NMP por 100 mL
Introduzca conteos positivos de series decimales para tubos de coliformes o enterococos y fije per_volume_ml en 100 para informar el NMP/100 mL clásico en registros de cumplimiento.
Preguntas técnicas
¿Cómo calculo el número más probable a partir de tubos positivos?
Envíe levels con volume_ml, tubes y positive por cada dilución. La API devuelve la densidad Poisson de máxima verosimilitud por mL y el NMP escalado opcional vía per_volume_ml (use 100 para NMP/100 mL).
¿Qué ocurre si todos los tubos son positivos?
La tarea falla con invalid_input porque la verosimilitud no tiene máximo finito. Añada una dilución superior (volume_ml menor) que incluya al menos un tubo negativo.
¿En qué se diferencia el valor Thomas de mpn?
mpn es la estimación de máxima verosimilitud. thomas_mpn usa la aproximación histórica P sobre la raíz cuadrada de (mL de muestra en negativos por mL de muestra en todos los tubos). Ambos se escalan por per_volume_ml cuando Thomas está definido.
¿Cuánto cuesta la calculadora del número más probable?
La herramienta del navegador es gratuita. Las solicitudes API usan saldo prepago KIT a $0.002 por llamada exitosa; la entrada inválida no se factura.