Regresión no lineal con parámetros expandidos por categorías<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Hola
Tengo un conjunto de datos que necesito ajustar usando un modelo no lineal, con cuatro parámetros de ajuste, A, B, C y D. El conjunto de datos (Y, columna) debe separarse usando 'Categorías', que es una columna. Entonces, Y para cada 'Categoría' única es un conjunto único de datos.
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 en categorías, seleccionando columna' marcado y selecciono 'Categorías' para la columna y hago un ajuste de regresión no lineal . Obtengo la C y D óptimas 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 vuelve a ajustar todo el conjunto de datos y se vuelve más y 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 en mi primera respuesta automatiza la construcción de dicha fórmula. No puedo entender qué más podrías necesitar desde el punto de vista de un modelo.
¿Estás preguntando cómo no lineal 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 las varía para mejorar el resultado de la función de pérdida (minimización). La función de pérdida por defecto es suma de los errores al cuadrado , o mínimos cuadrados .Supervisa 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 de hacerlo manualmente. Entiendo que es bastante fácil hacerlo manualmente. Sin embargo, necesito automatizar mi secuencia de comandos 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 su 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 siguen siendo los mismos para todas las categorías, mientras que P y R0 varían entre ellos. Ahora no estamos especificando a través de ninguna ecuación cómo B y beta varían entre categorías, entonces, ¿cómo encuentra JMP la mejor B y beta que funciona 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ñaló un ejemplo que es similar a lo que quieres hacer. No nos queda claro si realmente necesita un script para crear la fórmula del modelo que necesita. Seleccione 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 condicionados a la Tratamiento .
Abro la maqueta de sus 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 hacer la fórmula del modelo. hago clic Columnas de la tabla en la parte superior izquierda y seleccione Parámetros . hago clic Nuevo parámetro. .. y entrar B para el nombre y darle un valor inicial de 2 , luego haga clic en OK . yo creo beta = 0 del mismo modo. los 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 para el valor inicial y seleccione Expandir en categorías, seleccionando la columna . hago clic OK y luego seleccione el Categoría columna. Ahora tengo un parámetro único para R0 para cada categoría. Hago lo mismo para el PAGS parámetro.
Construyo la fórmula ahora cambiando entre la lista de parámetros y la lista de columnas de la tabla para hacer 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, Algae, 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 scripts son poderosos pero no siempre necesarios.
Re: Regresión no lineal con parámetros expandidos por categoríasUsé tres principios para resolver este problema. Parece fácil ahora, pero hubo algunos inicios en falso complicados antes de que lo hiciera bien. Hice ingeniería inversa de la fórmula del modelo, dividí el problema en problemas más pequeños y construí la solución de adentro hacia afuera. Asume que hay tres columnas de datos con nombres dados. Tendría que agregar un cuadro de diálogo personalizado si los nombres de las columnas cambiaran entre ejecuciones. Pero admite cualquier cantidad 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 diálogo personalizado para asignarlas a las variables del script:
Categoría
relájate
estrés
*/
// encontrar 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# = exp. ( Juego ( : 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 ++,
// hacer parámetro R0 específico de categoría
evaluar (
Analizar gramaticalmente (
Sustituto (
"Insert Into( lista de parámetros#, Expr( Name( \!"R0_ccc\!" ) = 2 ) )" ,
"ccc" ,
categoría# [ C ]
)
)
) ;
Insertar en ( coincidencia expr r0# , categoría# [ C ] ) ;
evaluar (
Analizar gramaticalmente (
Sustituto (
"Insertar en( coincide con expr r0#, Expr( Nombre( \!"R0_ccc\!" ) ) )" ,
"ccc" ,
categoría# [ C ]
)
)
) ;
// hacer un parámetro P específico de la categoría
evaluar (
Analizar gramaticalmente (
Sustituto (
"Insert Into( lista de parámetros#, Expr( Name( \!"P_ccc\!" ) = 2 ) )" ,
"ccc" ,
categoría# [ C ]
)
)
) ;
Insertar en ( coincidencia expr p# , categoría# [ C ] ) ;
evaluar (
Analizar gramaticalmente (
Sustituto (
"Insertar en( coincidir con expr p#, Expr( Nombre( \!"P_ccc\!" ) ) )" ,
"ccc" ,
categoría# [ C ]
)
)
) ;
) ;
// sustituir en la fórmula del modelo general
expresión de fórmula # = Sustituto (
exp. ( Parámetro ( III , rrr / ( 1 + B * ( : relájate / : estrés ) ^ beta + ppp ) ) ) ,
exp. ( III ) ,
lista de parámetros# ,
exp. ( rrr ) ,
Nombre Expr. ( coincidencia expr r0# ) ,
exp. ( ppp ) ,
Nombre Expr. ( coincidencia expr p# )
) ;
// establece la fórmula de la columna del modelo
evaluar (
Sustituto (
exp. ( Tabla de datos actual () << Nueva columna ( "Modelo" , Fórmula ( fff ) ) ) ,
exp. ( fff ) ,
Nombre Expr. ( expresión de fórmula # )
)
) ;
Re: Regresión no lineal con parámetros expandidos por categoríasHola,
Gracias por la respuesta. Revisé el manual. Todavía no pude obtener lo que estaba buscando.
Ahora estoy tratando de crear un guión para este ajuste no lineal y me enfrento a algunos problemas. Necesito ayuda. Voy a reiterar el problema aquí:
Tengo datos que deben ser ajustados por 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 beta únicos para todas las categorías. Mientras que los otros dos parámetros P y R0 pueden variar entre categorías.
La interfaz de 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( "tStress(s)" )) ^ beta) + P )));
Sin embargo, esto no es lo que quiero. Y no quiero usar la función de "agrupación", ya que solo 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_Categoría_D03_01_-1.8_100" ) = 2,
Nombre( "R0_Categoría_D03_01_-1.8_1000" ) = 3,
Nombre( "R0_Categoría_D03_01_-1.8_10000" ) = 3,
Nombre( "R0_Categoría_D03_01_-1.8_158" ) = 3,
Nombre( "R0_Categoría_D03_01_-1.8_1580" ) = 3,
Nombre( "P_Categoría_D03_01_-1.8_100" ) = 0,
Nombre( "P_Categoría_D03_01_-1.8_1000" ) = 1,
Nombre( "P_Categoría_D03_01_-1.8_10000" ) = 1,
Nombre( "P_Categoría_D03_01_-1.8_158" ) = 0,
Nombre( "P_Categoría_D03_01_-1.8_251" ) = 0},
Exp( -B * (:Nombre( "tR" ) / :Nombre( "tS" )) ^ beta ) *
Partido( :Categoría,
"D03_01_-1.8_100", Nombre ("R0_Categoría_D03_01_-1.8_100"),
"D03_01_-1.8_1000", Nombre ("R0_Categoría_D03_01_-1.8_1000"),
"D03_01_-1.8_10000", Nombre ("R0_Categoría_D03_01_-1.8_10000"),
"D03_01_-1.8_158", Nombre ("R0_Categoría_D03_01_-1.8_158"),
"D10_05_-2.6_6310", Nombre( "R0_Categoría_D10_05_-2.6_6310" )
) + Coincidencia( :Categoría,
"D03_01_-1.8_100", Nombre ("P_Categoría_D03_01_-1.8_100"),
"D03_01_-1.8_1000", Nombre ("P_Categoría_D03_01_-1.8_1000"),
"D03_01_-1.8_10000", Nombre( "P_Categoría_D03_01_-1.8_10000"),
"D03_01_-1.8_158", Nombre ("P_Categoría_D03_01_-1.8_158"),
"D10_05_-2.6_6310", Nombre( "P_Categoría_D10_05_-2.6_6310" )
)
)
Necesito automatizar esto y, por lo tanto, 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 usarlos 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íasbinomio,
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 Ayuda en Libros > Modelos especializados.Los ajustes no lineales comienzan en la página 105. La sugerencia de Michael Anderson para agrupar sus 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 usar su propio conjunto de parámetros y esto 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 cómo se está haciendo.
En el ejemplo que se muestra a continuación, B y beta corresponden a C y D planteados 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 de la adaptación 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 obtiene la mejor B y beta en todas las categorías? ¿Encuentra inicialmente 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 después de eso, calculará el resultado para cada grupo.Entonces, si tuviera 4 categorías, obtendría 4 modelos con 4 conjuntos de coeficientes.
[Imagen faltante]