¿Cómo construir modelos lineales o no lineales con respuestas restringidas (suma de salidas = 1) en JMP?A menudo necesito modelar variables de respuesta continua que representan proporciones entre categorías, donde las respuestas para cada muestra deben sumar 1 (por ejemplo, P1=10%, P2=25%, P3=35%, P4=30%).
En Python, utilizo una capa de salida softmax para imponer la restricción de suma a uno.
- ¿Cómo puedo construir este tipo de modelos en JMP —ya sean lineales o de redes neuronales— asegurando que la suma de las respuestas predichas sea igual a 1?
- ¿Existe algún flujo de trabajo recomendado (por ejemplo, regresión logística multinomial, redes neuronales con funciones de enlace apropiadas)?
- Por último, ¿puedo obtener un Profiler que muestre las proporciones previstas para cada categoría (similar al Profiler categórico que muestra las probabilidades de clase)?
¡Gracias por cualquier orientación o ejemplo!
Modelado estadístico avanzadoRe: ¿Cómo construir modelos lineales o no lineales con respuestas restringidas (suma de salidas = 1) en JMP?Hola,
Una forma muy sencilla de hacer lo que estás buscando es crear una columna de respuesta nominal correspondiente al valor y más alto y ajustarla a las x usando regresión logística nominal (ver tabla adjunta).
¿Esto cumple con tus necesidades? ¿Podrías ayudarme a comprender exactamente cuál es el caso de uso? ¿Qué representan estos datos y qué intentas aprender de ellos?
Re: ¿Cómo construir modelos lineales o no lineales con respuestas restringidas (suma de salidas = 1) en JMP?Hola Hadley,
Gracias por tu ayuda. Lamentablemente, tu sugerencia no satisface mi necesidad específica.
Mi objetivo: Necesito predecir resultados con una restricción donde la suma sea igual a 1; esto es común cuando se modelan proporciones de población o formulaciones de mezclas en función de sus propiedades.
Mi solución: Implementé manualmente una transformación de razón logarítmica centrada (CLR). El flujo de trabajo es el siguiente:
- Transformar las salidas al espacio logarítmico centrado
- Ajuste del modelo a las variables transformadas
- Aplicar la transformación inversa para garantizar que se respete la restricción
Aquí está el código para la transformación:
<SPAN>// Adjust zeros </SPAN><SPAN>epsilon = 0.0000001; </SPAN><SPAN>p1_adj = If(:p1 == 0, epsilon, :p1); </SPAN><SPAN>p2_adj = If(:p2 == 0, epsilon, :p2); </SPAN><SPAN>pk_adj = If(:pk == 0, epsilon, :pk); </SPAN>
<SPAN>// Scaling </SPAN><SPAN>sum_adj = p1_adj + p2_adj + ... + pk_adj; </SPAN><SPAN>p1_norm = p1_adj / sum_adj; </SPAN><SPAN>p2_norm = p2_adj / sum_adj; </SPAN><SPAN>pk_norm = pk_adj / sum_adj; </SPAN>
<SPAN>// Geometric mean </SPAN><SPAN>geom_mean = (p1_norm * p2_norm * ... * pk_norm)^(1/k); </SPAN>
<SPAN>// CLR transformation </SPAN><SPAN>y1_clr = Log(p1_norm / geom_mean); </SPAN><SPAN>y2_clr = Log(p2_norm / geom_mean); </SPAN><SPAN>yk_clr = Log(pk_norm / geom_mean); </SPAN>
<SPAN>// Inverse transformation (after prediction) </SPAN><SPAN>sum_exp = Exp(:y1_clr_pred) + Exp(:y2_clr_pred) + ... + Exp(:yk_clr_pred); </SPAN><SPAN>p1_pred = Exp(:y1_clr_pred) / sum_exp; </SPAN><SPAN>p2_pred = Exp(:y2_clr_pred) / sum_exp; </SPAN><SPAN>pk_pred = Exp(:yk_clr_pred) / sum_exp;</SPAN>
Solicitud adicional: También me gustaría usar el Profiler para mostrar las proporciones acumuladas de cada resultado, de forma similar a cómo Nominal Logistic muestra las probabilidades acumuladas de cada etiqueta. Su solución aborda la visualización del apilamiento, pero solo predice la probabilidad de la categoría más alta, en lugar de la proporción exacta de cada resultado.
He adjuntado un ejemplo de la transformación manual como referencia.
Atentamente,