Regresión no lineal con parámetros ampliados por categorías.<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Hola
Tengo un conjunto de datos que necesito ajustar utilizando un modelo no lineal, con cuatro parámetros de ajuste, A, B, C y D. El conjunto de datos (Y, columna) debe separarse mediante 'Categorías', que es una columna. Entonces, Y para cada 'Categoría' única es un conjunto de datos único.
Necesito ajustar todos los datos y encontrar los parámetros A, B, C, D, con la condición de que necesito un C y D únicos para todos los conjuntos de datos en todas las 'Categorías', mientras que A, B pueden variar entre las 'Categorías'.
Para esto, creo una columna para el modelo y creo los parámetros C, D y para A y BI creo parámetros con 'Expandir a categorías, seleccionando columna' marcado y selecciono 'Categorías' para la columna y hago un ajuste de regresión no lineal. . Obtengo C y D óptimos en todas las categorías y diferentes A y B en todas las categorías.
Mi pregunta es la siguiente: ¿Cómo encuentra una C y una D ÚNICAS en todas las categorías? ¿Se ajusta al conjunto de datos correspondiente a cada conjunto de datos y encuentra C1, D1, C2, D2, etc. para cada conjunto y luego toma la mediana/media o algo más?
¿O encuentra el rango de valores de C y D y crea puntos finos dentro de C y D y ajusta nuevamente todo el conjunto de datos y va cada vez más fino hasta que el error está dentro de los límites?
Necesito conocer el método, ya que quiero estar seguro de que estoy haciendo lo que tengo que hacer.
Gracias
binomio
Re: Regresión no lineal con parámetros expandidos por categoríasPido disculpas por la demora. ¡Pensé que habíamos terminado!
Mi publicación anterior muestra la fórmula con un común B y beta y parámetros condicionales en Categoría niveles. Que más necesitas? El script de mi primera respuesta automatiza la creación de dicha fórmula. No puedo entender qué más podría necesitar desde el punto de vista del modelo.
¿Estás preguntando cómo No lineal ¿La plataforma resuelve tal problema (estimar los parámetros)? Utiliza un procedimiento de optimización numérica y un función de pérdida para supervisar. Utiliza lo dado valores iniciales y luego los varía para mejorar el resultado de la función de pérdida (minimización). La función de pérdida predeterminada es suma de los errores al cuadrado , o mínimos cuadrados .Monitorea varias medidas de cambio para determinar cuándo convergencia se logra y se detiene.
Re: Regresión no lineal con parámetros expandidos por categoríasHola,
¿Hay alguna actualización sobre esta pregunta que he hecho?
Gracias
binomio
Re: Regresión no lineal con parámetros expandidos por categoríasHola,
Conozco este método para hacerlo manualmente. Entiendo que es bastante fácil hacerlo manualmente. Sin embargo, necesito automatizar mi script como parte de un sistema más grande y, por lo tanto, necesario.
Gracias por su tiempo y esfuerzo.
binomio
Re: Regresión no lineal con parámetros expandidos por categorías¡¡¡Excelente!!! Trabajado como un encanto. Esa es solo la respuesta de mi publicación anterior (ligeramente diferente de la publicación original).
Gracias por tu tiempo y guión.
Ahora, la pregunta adicional (en realidad, mi pregunta original 
En este ajuste de regresión no lineal tenemos 2 parámetros B y beta que permanecen iguales para todas las categorías, mientras que P y R0 varían entre ellas. Ahora bien, no estamos especificando mediante ninguna ecuación cómo varían B y beta entre categorías, entonces, ¿cómo encuentra JMP la mejor B y beta que funcione para todas las categorías? ¿Cuál es el algoritmo utilizado?
Gracias
binomio
Re: Regresión no lineal con parámetros expandidos por categoríasQuiero agregar a mi respuesta anterior después de que Jeff Perkinson señalara un ejemplo similar a lo que usted quiere hacer. No nos queda claro si realmente necesita un script para crear la fórmula modelo que necesita. Seleccionar Ayuda > Biblioteca de datos de muestra , abre el Ejemplos no lineales carpeta y finalmente abra la Algas Mitscherlich tabla de datos. Abre el Editor de fórmulas con el Mitscherlich columna. Debe tener un aspecto como este:

en este caso, como tu caso, los 2 parámetros alfa y beta están condicionadas a la Tratamiento .
Abro la maqueta de tus datos que creé y selecciono columnas > Nueva columna... lo llamaré Modelo y agrega un Fórmula propiedad de la columna. Voy a crear los parámetros antes de usarlos para crear la fórmula del modelo. hago clic Columnas de tabla en la parte superior izquierda y seleccione Parámetros . hago clic Nuevo parámetro. .. y entra B para el nombre y darle un valor inicial de 2 , luego haga clic DE ACUERDO . yo creo beta = 0 del mismo modo. El B y beta Los parámetros son incondicionales y su valor es común a todas las categorías.
Los otros dos parámetros son diferentes. hago clic Nuevo parámetro , ingresar R0 por el nombre, 2 como valor inicial y seleccione Expandir a categorías, seleccionando columna . hago clic DE ACUERDO y luego seleccione el Categoría columna. Ahora tengo un parámetro único para R0 para cada categoría. hago lo mismo para el PAG parámetro.
Construyo la fórmula ahora cambiando entre la lista de parámetros y la lista de columnas de la tabla para crear esta fórmula:

El editor inserta automáticamente la expresión Match(...) cuando hago clic en el parámetro agrupado en la lista de parámetros. Así que ahora hay una B, una beta y una R0 y P para cada categoría.
El uso de este enfoque con el primer ejemplo de algas conduce a esta fórmula:

Este modelo produce exactamente las mismas estimaciones con No lineal que la parametrización original.
Por favor, comprenda que es posible que hayamos malinterpretado su pregunta. Los guiones son poderosos pero no siempre necesarios.
Re: Regresión no lineal con parámetros expandidos por categoríasUtilicé tres principios para resolver este problema. Parece fácil ahora, pero hubo algunos comienzos en falso antes de hacerlo bien. Realicé ingeniería inversa en la fórmula del modelo, dividí el problema en problemas más pequeños y construí la solución de adentro hacia afuera. Se supone que hay tres columnas de datos con nombres de pila. Tendría que agregar un cuadro de diálogo personalizado si los nombres de las columnas cambiaran entre ejecuciones, pero se adapta a cualquier número de categorías. No sé si Nonlinear podrá resolver el modelo cuando tenga una gran cantidad de categorías. Además, es posible que desee preparar una lista de valores iniciales y usar mi ejemplo para usar valores únicos.
No tengo su tabla de datos, pero mi maqueta de lo que creo que tiene (columnas Categoría, rRelax, tStress) funcionó.
/* asume que estas columnas existen o crea un cuadro de diálogo personalizado para asignarlas a variables de script:
Categoría
Relájate
Estrés
*/
// buscar todas las categorías
categoría# = : Categoría << Obtener valores ;
// construye la fórmula de adentro hacia afuera con expresiones
coincidencia expr p# = coincidencia expr r0# = Expr. ( Fósforo ( : Categoría ) ) ;
lista de parámetros# = Lista ( B = 2 , beta = 0 ) ;
// iterar sobre todas las categorías
Para ( C = 1 , C <= N artículos ( categoría# ) , C ++,
// crear un parámetro R0 específico de categoría
evaluar (
Analizar gramaticalmente (
Sustituto (
"Insertar en( lista de parámetros#, Expr( Nombre( \!"R0_ccc\!" ) = 2 ) )" ,
"ccc" ,
categoría# [ C ]
)
)
) ;
Insertar en ( coincidencia expr r0# , categoría# [ C ] ) ;
evaluar (
Analizar gramaticalmente (
Sustituto (
"Insertar en (coincidir expr r0#, Expr( Nombre (\!"R0_ccc\!" ) ) )" ,
"ccc" ,
categoría# [ C ]
)
)
) ;
// crear un parámetro P específico de categoría
evaluar (
Analizar gramaticalmente (
Sustituto (
"Insertar en( lista de parámetros#, Expr( Nombre( \!"P_ccc\!" ) = 2 ) )" ,
"ccc" ,
categoría# [ C ]
)
)
) ;
Insertar en ( coincidencia expr p# , categoría# [ C ] ) ;
evaluar (
Analizar gramaticalmente (
Sustituto (
"Insertar en (coincidir expr p#, Expr( Nombre (\!"P_ccc\!" ) ) )" ,
"ccc" ,
categoría# [ C ]
)
)
) ;
) ;
// sustituir en la fórmula del modelo general
fórmula expr# = Sustituto (
Expr. ( Parámetro ( lll , rrr / ( 1 + B * ( : Relájate / : Estrés ) ^ beta + ppp ) ) ) ,
Expr. ( lll ) ,
lista de parámetros# ,
Expr. ( rrr ) ,
Nombre Expr ( coincidencia expr r0# ) ,
Expr. ( ppp ) ,
Nombre Expr ( coincidencia expr p# )
) ;
// establece la fórmula de la columna del modelo
evaluar (
Sustituto (
Expr. ( Tabla de datos actuales () << Nueva columna ( "Modelo" , Fórmula ( fff ) ) ) ,
Expr. ( fff ) ,
Nombre Expr ( fórmula expr# )
)
) ;
Re: Regresión no lineal con parámetros expandidos por categoríasHola,
Gracias por la respuesta. Revisé el manual. Todavía no pude conseguir lo que estaba buscando.
Ahora estoy intentando crear un guión para este ajuste no lineal y me enfrento a algunos problemas. Necesito ayuda. Reiteraré el problema aquí:
Tengo datos que deben ajustarse a un modelo que tiene 4 parámetros de ajuste. Los ajustes para cada categoría NO SON INDEPENDIENTES entre sí. 2 de los parámetros de ajuste, B y beta, como se muestra en la publicación anterior, deben ser únicos, es decir, el ajuste de regresión extrae un B y una beta únicos para todas las categorías. Mientras que los otros dos parámetros, P y R0, pueden variar según las categorías.
La interfaz JMP se parece a la que se muestra a continuación:

Ahora necesito codificar esto en JSL.
Sé que podemos hacer lo siguiente para obtener los cuatro parámetros únicos:
dt << Nueva columna("Modelo", Numérico, Continuo, Fórmula( Parámetro( {B = 5, beta = 0,25, P = 10, R0 = 10}, R0 / (1 + B * (:Nombre( "tRelax( s)" ) / :Nombre( "tEstres(s)" )) ^ beta) + P )));
Sin embargo, esto no es lo que quiero. Y no quiero utilizar la función de "agrupación", ya que sólo ayudaría si las extracciones fueran independientes.
El código generado mientras copio la fórmula se muestra a continuación:
Parámetro(
{B = 2, beta = 0,
Nombre ("R0_Category_D03_01_-1.8_100") = 2,
Nombre ("R0_Category_D03_01_-1.8_1000") = 3,
Nombre ("R0_Category_D03_01_-1.8_10000") = 3,
Nombre ("R0_Category_D03_01_-1.8_158") = 3,
Nombre ("R0_Category_D03_01_-1.8_1580") = 3,
Nombre ("P_Category_D03_01_-1.8_100") = 0,
Nombre ("P_Category_D03_01_-1.8_1000") = 1,
Nombre ("P_Category_D03_01_-1.8_10000") = 1,
Nombre ("P_Category_D03_01_-1.8_158") = 0,
Nombre ("P_Category_D03_01_-1.8_251") = 0},
Exp( -B * (:Nombre( "tR") / :Nombre( "tS")) ^ beta ) *
Coincidencia( :Categoría,
"D03_01_-1.8_100", Nombre( "R0_Category_D03_01_-1.8_100" ),
"D03_01_-1.8_1000", Nombre( "R0_Category_D03_01_-1.8_1000" ),
"D03_01_-1.8_10000", Nombre( "R0_Category_D03_01_-1.8_10000" ),
"D03_01_-1.8_158", Nombre( "R0_Category_D03_01_-1.8_158" ),
"D10_05_-2.6_6310", Nombre ("R0_Category_D10_05_-2.6_6310")
) + Coincidencia( :Categoría,
"D03_01_-1.8_100", Nombre( "P_Category_D03_01_-1.8_100" ),
"D03_01_-1.8_1000", Nombre( "P_Category_D03_01_-1.8_1000" ),
"D03_01_-1.8_10000", Nombre( "P_Category_D03_01_-1.8_10000" ),
"D03_01_-1.8_158", Nombre( "P_Category_D03_01_-1.8_158" ),
"D10_05_-2.6_6310", Nombre ("P_Category_D10_05_-2.6_6310")
)
)
Necesito automatizar esto y por eso no puedo usarlo tal como está.
Puedo crear matrices para P_XXX y R0_XXX desde la columna 'Categoría'.
Estaba pensando en crear matrices asociadas para cada uno de estos P y R0 y usarlas en la fórmula, pero no funcionó.
Por supuesto, después de crear esta fórmula, necesito ejecutar el ajuste de regresión no lineal en la columna y los datos.
¿Alguien puede ayudarme a codificar esto?
Gracias
binomio
Re: Regresión no lineal con parámetros expandidos por categoríasbinoy,
Un buen lugar para tener una idea de cuál es el ajuste de su modelo y las estadísticas detrás de los ajustes es en la sección de Ayuda en Libros > Modelos especializados.Los ajustes no lineales comienzan en la página 105. La sugerencia de Michael Anderson para agrupar los ajustes también mostrará cómo se ajustan las categorías individuales y también verá un gráfico de los ajustes combinados.A continuación se muestra un ejemplo de la ayuda.También puede utilizar su propio conjunto de parámetros, como se muestra en el Capítulo 7.La sección de estadísticas comienza en la página 152 del capítulo 7.

Re: Regresión no lineal con parámetros expandidos por categoríasHola,
Gracias por la respuesta.
Para ser más claro. Conozco un método para hacer lo que quiero. Quiero saber como se hace.
En el ejemplo que se muestra a continuación, B y beta corresponden a C y D formulados en la pregunta, mientras que P es un parámetro como A o B que puede variar entre categorías.
A continuación se muestra una captura de pantalla del ajuste que se está realizando, con B y beta como parámetros que permanecen CONSTANTES para todas las categorías, mientras que P es un parámetro que puede variar entre categorías.
La pregunta es ¿cómo consigue la mejor B y beta en todas las categorías? ¿Inicialmente encuentra diferentes B y beta para cada categoría y hace algunas estadísticas para obtener la mejor B y beta que sea lo suficientemente buena para todas las categorías? Si es así, ¿cuál es la estadística utilizada?
Gracias
binomio

Re: Regresión no lineal con parámetros expandidos por categoríasParece que desea utilizar una variable de agrupación en la plataforma no lineal.Coloque sus variables X e Y en los campos apropiados de la plataforma y luego coloque la columna "categorías" en el campo "grupo".Cuando ajuste los modelos, calculará el resultado para cada grupo.Entonces, si tuvieras 4 categorías, obtendrías 4 modelos con 4 conjuntos de coeficientes.
[Imagen faltante]