Hola a todos,
Estoy tratando de automatizar una rutina de regresión no lineal y parte de eso implica crear un modelo personalizado mediante fórmulas de columna.
Quiero tener un número arbitrario de parámetros, y creo que lo resolví volcando una lista con el formato adecuado en la sección Parámetro ({}) ("Parm_Start"). Un problema que tengo es que no sé cómo establecer arbitrariamente el término en Match (). Intenté hacer esto con Match_List {}, que coincide con el formato, pero da resultados impares.
En segundo lugar, estoy tratando de sumar una serie de exponenciales con "o" términos pre-exponenciales y "o" usando la forma A [o] * exp (-t / t [o]) - vea el código a continuación. Las A son todos parámetros ajustables, extraídos de una columna Mod_Parm; El tiempo es una columna de longitud arbitraria y la variable independiente; y Timeconst es una columna de la misma longitud que Mod_Parm (ambas más cortas que Time).
No he llegado a la parte donde se llama a la rutina de modelado no lineal basada en JSL porque es necesario solucionar esto primero.
¡Gracias!
Mod_Parm_list={};
Parm_start={};
Parm_list={};
Match_list={};
b=1;
for(m=1,m<=num_exp,m++,
Mod_Parm_list[m]="A"||char(m);
Parm_start[m]=parse("Parm_"||Mod_Parm_list[m]||" = -0.1");
Parm_list[m]="Parm_"||Mod_Parm_list[m];
Match_list[b]=Mod_Parm_list[m];
Match_list[b+1]=parse(Parm_list[m]);
b=b+2;
);
dt << NewColumn("I_model",Format ("Scientific"),Set Property( "Expand Formula", 1 ),
Formula
(Parameter(
{Parm_start},
I_DC - Summation(o=1,num_exp,
Match(:Mod_Parm,
"A1", Parm_A1,
"A2", Parm_A2,
"A3", Parm_A3,
"A4", Parm_A4,
"A5", Parm_A5,
"A6", Parm_A6
)*Exp(-:Time/:TimeConst[o])
)
)
)
);
Para la posteridad, quise agregar que parte de la solución se puede encontrar aquí:
https://community.jmp.com/t5/Discussions/How-to-pass-a-variable-into-a-formula/td-p/52344
Es decir, parte de mi problema no era definir "I_DC" como variable de tabla y suponiendo que la fórmula de la columna entendería la expresión. Aquí está la actualización para esa parte:
I_DC = 3; //Using only this value in the column formula is wrong
dt = Current Data Table();
dt << set Table Variable( "I_DC_form", I_DC ); //Allows the parameter to be used later in the col formula expression
Mod_Parm_list={};
Parm_start={};
Parm_list={};
Match_list={};
b=1;
for(m=1,m<=num_exp,m++,
Mod_Parm_list[m]="A"||char(m);
Parm_start[m]=parse("Parm_"||Mod_Parm_list[m]||" = -0.1");
Parm_list[m]="Parm_"||Mod_Parm_list[m];
Match_list[b]=Mod_Parm_list[m];
Match_list[b+1]=parse(Parm_list[m]);
b=b+2;
);
dt << NewColumn("I_model",Format ("Scientific"),Formula(
Parameter(
{T1 = 1, T2 = 1, T3 = 1, T4 = 1, T5 = 1, T6=1},
:I_DC_form + T1 * Exp( -:Time / 0.004 ) + T2 * Exp( -:Time / 0.01 ) + T3 * Exp( -:Time / 0.1 )
+ T4 * Exp( -:Time / 1 ) + T5 * Exp( -:Time / 10 ) + T6 * Exp( -:Time / 100 ))
)
);