Cómo obtener la forma semievaluada de una ecuación de predicciónEstoy usando el modelo de ajuste para construir una ecuación de regresión para el tiempo y un montón de factores adicionales. El objetivo final es crear una tabla en un diario que tenga la ecuación de predicción evaluada para todos los factores adicionales y muestre la ecuación basada en el tiempo pura intercepción + pendiente. Ejemplo:
dt = Open("$SAMPLE_DATA\Powder Metallurgy.jmp");
fm = dt << Fit Model(
Y( :Shrinkage ),
Effects(
:Formation Method, :Compaction Method, :Sintering Time
),
Personality( "Standard Least Squares" ),
Emphasis( "Effect Leverage" ),
Run()
);
PredForm = Arg(Arg((FM << GetPredictionFormula), 3),1);Esto da como resultado la ecuación:
0.942161598883733 + Match( :Formation Method,
"Die", 0.0407171588498178,
"Extrusion", 0.0256123252434345,
"Isostatic", -0.0663294840932524,
.
) + Match( :Compaction Method,
"Cold", 0.594574663098895,
"Warm", -0.594574663098895,
.
) + -0.0742413463542265 * :Sintering Time
Entonces podemos crear una tabla con los factores adicionales:
dtEquations = dt << Summary(
Group( :Formation Method, :Compaction Method ),
Freq( "None" ),
Weight( "None" )
);
dtEquations << DeleteColumns(:N Rows);
Entonces, ¿cómo escribo la ecuación en una nueva columna donde mira las primeras 2 columnas (en este ejemplo) y evalúa las declaraciones Match, con simplificación, pero deja la ecuación para el tiempo? Objetivo final:

Aún mejor si todos los coeficientes estáticos se reducen a uno.
Todo debe ser dinámico para múltiples niveles de factores adicionales, y la ecuación podría tener una pendiente común, una intersección común o podría tener diferentes pendientes o diferentes intersecciones.
Automatización y secuencias de comandosRe: Cómo obtener la forma semievaluada de una ecuación de predicciónLo más probable es que esto requiera muchas modificaciones, pero una opción sería usar Extract Expr
Names Default To Here(1);
dt = Open("$SAMPLE_DATA\Powder Metallurgy.jmp");
fm = dt << Fit Model(
Y(:Shrinkage),
Effects(:Formation Method, :Compaction Method, :Sintering Time),
Personality("Standard Least Squares"),
Emphasis("Effect Leverage"),
Run()
);
dtEquations = dt << Summary(Group(:Formation Method, :Compaction Method), Freq("None"), Weight("None"));
dtEquations << New Column("Sintering Time", Character, Continuous, << Set Each Value(
PredForm = Arg(Arg((FM << GetPredictionFormula), 3), 1);
PredForm = Substitute(Name Expr(PredForm), Extract Expr(PredForm, Match(Wild List())), Eval(Extract Expr(PredForm, Match(Wild List()))));
PredForm = Substitute(Name Expr(PredForm), Extract Expr(PredForm, Match(Wild List())), Eval(Extract Expr(PredForm, Match(Wild List()))));
Char(Name Expr(PredForm));
));
Re: Cómo obtener la forma semievaluada de una ecuación de predicción@jthi brillante, gracias!
Agregué una expresión simplificada al último bloque para reducir todos los coeficientes a uno, pero por lo demás la solución fue perfecta.
dtEquations << New Column("Sintering Time", Character, Continuous, << Set Each Value(
PredForm = Arg(Arg((FM << GetPredictionFormula), 3), 1);
PredForm = Substitute( Name Expr( PredForm ),
Extract Expr( PredForm, Match( Wild List() ) ), Eval( Extract Expr( PredForm, Match( Wild List() ) ) )
);
PredForm = Substitute( Name Expr( PredForm ),
Extract Expr( PredForm, Match( Wild List() ) ), Eval( Extract Expr( PredForm, Match( Wild List() ) ) )
);
Char(Simplify Expr(Name Expr(PredForm)));
));Re: Cómo obtener la forma semievaluada de una ecuación de predicciónEso es ingenioso, gran pregunta. @pauldeen y gran solucion @jthi !