Agregar/eliminar efectos en regresión paso a paso a través de JSL y número/nombre de columna¡Hola a todos!
Realmente necesito ayuda con esto porque estoy usando JMP y JSL para mi tesis. Actualmente estoy usando JMP a través de JSL para analizar algunos datos, y mi enfoque es la regresión paso a paso. Voy a tener algunos fragmentos de código adjuntos por cierto para facilitar la ayuda.
Básicamente
1.) ¿Cómo agregar múltiples efectos en el modelo inicial a través del número de columna?
Actualmente, puedo configurar Y usando solo el número de columna que quiero, pero no puedo agregar X usando el número de columna.
quiero que pase de esto
obj = dt << Fit Model(Y(:Column Name(i)),
Effects(
:Effect1Name, :Effect2Name, /*and so on and so forth*/
),
Personality(Stepwise), Run Model(Stopping Rule(MinimumBIC))
);
a esto
obj = dt << Fit Model(Y(:Column Name(i)),
Effects(
:Column(/*indices of columns to place as effects*/)
),
Personality(Stepwise), Run Model(Stopping Rule(MinimumBIC))
);
2.) ¿Cómo eliminar los efectos que son menos significativos?
Después de ejecutar el script original, veo que algunos efectos no son tan significativos. La secuencia de comandos predeterminada será usar
obj << Remove(:/*hardcoded column name*/);
pero quiero que sea flexible para poder automatizarlo y que se vea así
obj << Remove(:Column Name(indextoremove));
pero el fragmento anterior produce este mensaje de error
Term not found in access or evaluation of 'Column Name' , Column Name/*###*/(indextoremove)
¡Gracias!
Re: Agregar/eliminar efectos en regresión por pasos a través de JSL y número/nombre de columna<SPAN class="token string">^effect_cols^ doesnt appear to work within eval(parse(eval insert(Step_Str))); as the brackets "{" of the list still exist.</SPAN>Re: Agregar/eliminar efectos en regresión por pasos a través de JSL y número/nombre de columnaHola de nuevo @cwillden !
Cambié algo en mi código, inspirado en lo que estaba haciendo anteriormente y junto con su fragmento de código. Y ahora, ¡funciona!
¡Muchas gracias!
Re: Agregar/eliminar efectos en regresión por pasos a través de JSL y número/nombre de columnaHola @cwillden ,
¡Gracias por responder! ¡Has resuelto en gran medida mi primera preocupación (agregando múltiples efectos)!
En cuanto a la segunda preocupación, ya puedo eliminar el término con el mayor valor de p. Sin embargo, creo que no es el criterio que estoy usando para eliminar un término.
Lo que estoy haciendo (si estoy haciendo esto con un método de apuntar y hacer clic y no con secuencias de comandos) es:
- Carga la mesa.
- Ejecute el módulo Ajustar modelo
- Sume las Y y las X.
- Seleccionar regresión por pasos
- Construye el modelo. (Haga clic en Ir)
- Haga clic en Ejecutar para mostrar el Informe.
- Vaya a la tabla de estimaciones de parámetros.
- Inspeccione y elimine términos basados en Prob>|t|.
Creo que el código que envió estaba eliminando términos en función de Prob>F de la tabla Estimaciones actuales de la ventana Ajustar paso a paso. Lo que quiero hacer es eliminar términos basados en Prob>|t| de la tabla Estimaciones de parámetros de la ventana Informe: Ajustar modelo.
¡Gracias otra véz!
Re: Agregar/eliminar efectos en regresión por pasos a través de JSL y número/nombre de columnaHola @pedbudoc ,
Bienvenido a la comunidad y buena suerte en tu tesis.
A diferencia de otras entradas de diálogo, la entrada Efectos no es solo una lista de columnas.También especifica efectos de orden superior en ese argumento.Puede crear la lista de efectos usando elementos como "columna (1), columna (2), columna (3), columna (1) * columna (2), columna (2) * columna (2)", etc. Además, no puede (creo) especificar múltiples índices dentro de la función Column() en ningún escenario.Una mejor solución sería obtener una lista de referencias de columnas y crear un subconjunto de la lista usando los índices de sus columnas de la siguiente manera:
dt = Current Data Table();
all_cols = dt << Get Column Reference();
//let's say factors are columns 2-4
effect_cols = all_cols[2::4];
Ahora, a JMP no parece gustarle dejarme simplemente insertar la variable effect_cols directamente como el argumento Effects para el script Fit Model.Busca una columna llamada "effect_cols" en lugar de evaluar la lista.Por lo tanto, analiza el script Fit Model desde una cadena en la que sustituimos en la evaluación de effect_cols así:
Step_Str = "\[step = dt << Fit Model(
Y( Column(5) ),
Effects(
^effect_cols^
),
Personality( "Stepwise" ),
Run
);]\";
eval(parse(eval insert(Step_Str)));
Esto debería funcionar para usted si solo tiene efectos principales.De lo contrario, tendrás que ser un poco más creativo.Todavía totalmente factible.
Ahora, para el tema de la eliminación de efectos.Eliminar solo funcionará si le da un argumento de cadena que coincida con los nombres de uno de los efectos.Puede usar una secuencia eval(parse(eval insert())) como lo hicimos antes para analizar una cadena en la que insertamos una variable que contiene el nombre del efecto que queremos eliminar.Aquí hay un ejemplo donde tomo el efecto con el valor p más grande y lo elimino:
//Get a reference to the report window containing the stepwise object
step_rprt = step << Report;
//get the term names and current p-values from Current Estimates
terms = step_rprt["Current Estimates"][StringColBox(1)] << Get;
pvals = step_rprt["Current Estimates"][NumberColBox(5)] << Get;
//Remove Intercept from each
remove from(terms,1); //remove intercept
remove from(pvals,1); //remove p-value for intercept
max_index = Contains(pvals, max(pvals)); //get index of max p-value
//create an expression to remove the term with the largest p-value
remove_worst = parse(eval insert("\[step << Remove("^terms[max_index]^");]\"));
//Evaluate the expression
eval(remove_worst);¡Espero que ayude!