¿Cómo pasar una variable a una fórmula?Estoy usando la siguiente sintaxis. Me gustaría modificar una parte de la fórmula que es el coeficiente MA estimado.
En este caso, el valor de la El coeficiente MA es 0,144654220611782.
Mis numerosos intentos hasta ahora, incluido el uso de listas, han fracasado.
¿Cómo podría asignar el valor del coeficiente (de 0,144654220611782) a una "variable" y luego usar esa "variable" en la fórmula? Lo que significa que asigno el valor del coeficiente antes de ejecutar la sintaxis de la fórmula, con el valor pasado a la fórmula de manera adecuada.
dt << New Column( "Yt Forecast1", Numeric, "Continuous", Format( "Best", 12 ),
Formula(
ARIMA Forecast(
:Yt,
50,
ARIMA( 0, 1, 1, No Intercept( 1 ) ),
{MA Coefficients( {0.144654220611782} )},
Row() - 50,
Row() - 50
)))Re: ¿Cómo pasar una variable a una fórmula?Las fórmulas de columna se suscriben a otras columnas y variables de tabla para detectar cambios y reevaluar cuando eso suceda.Sin embargo, no para otras variables JSL. Entonces, de la forma en que funciona para usted, la fórmula puede ver el coef variable y sabe que debe suscribirse a los cambios. Creo que las otras sugerencias reemplazan la variable con una constante, por lo que la fórmula ya no sabe que debe suscribirse a algo.
Re: ¿Cómo pasar una variable a una fórmula?Dave, no pude hacer que esto funcionara. Recurrí a lo siguiente, que parece ser el trabajo que espero hacer.
Gracias, Scott.Re: ¿Cómo pasar una variable a una fórmula?Lo que me ha funcionado es esto. obtengo el valor" tempMACoeff " de la lista de lstModel = ts << Obtener modelos; (ts es el análisis de series temporales)
La fórmula de la columna acepta un nuevo valor para tempMACoeff y se actualizará...
col = dt << New Column( "Yt-Forecast", Numeric);
dt << set Table Variable( "coef", tempMACoeff );
col << Set Formula( Eval(
Eval Expr(
ARIMA Forecast(
:Yt,
50,
ARIMA( 0, 1, 1, No Intercept( 1 ) ),
{MA Coefficients( {Expr( :coef )} )},//
Row() - 50,
Row() - 50
)
)
)); // set the formula
Re: ¿Cómo pasar una variable a una fórmula?Otro enfoque es convertir la fórmula en una representación de cadena y luego hacer una sustitución de cadena estándar, convirtiéndola nuevamente en una expresión cuando asigna la fórmula de columna:
strFml = Char(Expr(
ARIMA Forecast(
:Yt,
50,
ARIMA( 0, 1, 1, No Intercept( 1 ) ),
{MA Coefficients( {_coeff_} )},
Row() - 50,
Row() - 50
)
));;
coeffValue = 0.144;
SubstituteInto("_coeff_",coeffValue);
dt << New Column("Y Forecast", numeric, Set Formula( Eval(Parse(strFml)) ));Re: ¿Cómo pasar una variable a una fórmula?Aquí hay una forma ligeramente diferente de manejar la misma solución que proporcionó Craige.La única diferencia es que esta versión codifica el valor Coef en la fórmula y no requiere una variable de tabla.
Names Default To Here( 1 );
dt = Current Data Table();
coef = 99.3;
Eval(
Substitute(
Expr(
New Table( "the table",
Add Rows( 3 ),
New Table Variable( "coef", 99.3 ),
New Column( "Column 1",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula( __coef__ ),
Set Selected
)
)
),
Expr( __coef__ ), coef
)
);Re: ¿Cómo pasar una variable a una fórmula?Necesitas algo como esto. Cuando cambia la variable de la tabla, la columna se actualiza.
Eval(
Eval Expr(
ARIMA Forecast(
:age,
40,
ARIMA( 0, 1, 1, No Intercept( 1 ) ),
{MA Coefficients( {Expr( :coef )} )},
Row() - 9,
Row() - 9
)
)
)
Usando la misma idea de variable de tabla, observe cómo el eval( eval expr( ... expr(:coef) ... ) ) obras. expr (:coef) identifica un fragmento de la fórmula que necesita una sustitución realizada al evaluarla. evaluarexpr (...) hace la evaluación de todos los bits identificados con expr, y devuelve una expresión que aún necesita ser evaluada. evaluar (...) hace eso. (Cambié todos los parámetros para que funcione algo con bigclass... ¡no uses el mío! No estoy familiarizado con las funciones de pronóstico de ARIMA, o si debería usarse en una fórmula de columna como esta. El ejemplo de índice de secuencias de comandos no utiliza una fórmula de columna).
Re: ¿Cómo pasar una variable a una fórmula?editar: después de volver a leer, esta podría no ser la respuesta.
Use una variable de tabla, mediante secuencias de comandos o desde el triángulo rojo.
New Table( "Untitled 46",
Add Rows( 3 ),
New Table Variable( "coef", 99.3 ),
New Column( "Column 1",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula( :coef ),
Set Selected
)
)
Table VariableTable VariableTabla de variables