¿Cómo excluyo automáticamente las filas que incluyen valores atípicos identificados por la función "Explorar valores atípicos"?Hola,
Estoy buscando replicar lo que hago manualmente en el script JSL.
Sé cómo ejecutar la función "Explorar valores atípicos" en JSL, pero todavía tengo que seleccionar manualmente las filas con valores atípicos identificados por "Explorar valores atípicos", luego presione 'seleccionar filas' y luego presione 'excluir'.
Estoy tratando de crear un script que ejecuto y excluya automáticamente los valores atípicos identificados sin que yo tenga que hacer nada más (idealmente, ni siquiera abre la ventana Explorar valores atípicos.
¿Alguien tiene alguna idea?
¡Gracias!
secuencias de comandosRe: ¿Cómo excluyo automáticamente las filas que incluyen valores atípicos identificados por la función "Explorar valores atípicos"?Has cometido un error muy común.La primera vez que corres
el = Explore Outliers(
está apuntando a la tabla de datos "dt". Sin embargo, cuando vaya a ejecutar la segunda vez, habrá creado una nueva tabla de datos "dtQuant", que no es la tabla de datos actual hasta donde JMP sabe.Y, por supuesto, no encontrará valores atípicos.Para solucionar esto, todo lo que necesita hacer es obligar a JMP a asegurarse de que esté apuntando a la tabla de datos correcta.
el = dt << Explore Outliers(
En otro tema, usar "j" como nombre de variable a veces puede generar problemas.JMP tiene una función llamada j.Aunque puede tener una variable llamada j, puede hacer que la lectura del código sea confusa.
Re: ¿Cómo excluyo automáticamente las filas que incluyen valores atípicos identificados por la función "Explorar valores atípicos"?He desglosado el código mientras intento depurar. Parece que el problema es que en el segundo bucle no se pueden guardar los límites de valores atípicos del rango de cuantiles.
En el registro está diciendo "
Esta cláusula Where para la tabla de datos 'Límites de valores atípicos cuantiles' no generó filas: dt:Grade == grades[j]"
Sin embargo, sé que cada grado en esa lista tiene límites y existe. Lo he comprobado comenzando con diferentes valores de J y siempre funciona en el primer ciclo y luego falla en el segundo ciclo. Supongo que tiene algo que ver con la forma en que estoy almacenando los datos en la variable el.
Names Default to here(1);
dt = current data table();
// Determine grades to loop through
dt1 = dt << summary(Group(:Grade));
dt1 << select where ( :Grade == "");
dt1 << delete rows;
dt1 << select where ( :Grade == "Check input");
dt1 << delete rows;
grades = dt1:Grade << get values;
Close (dt1, nosave);
For (j = 3, j<= N items ( grades ), J++,
show(grades[j]);
el = Explore Outliers(
Y( dt:Hardness, dt:UTS, dt:M100, dt:Elongation, dt:LCR, dt:Prof, dt:SG ),
Tail Quantile( 0.25 ),
Show only columns with outliers( 1 ),
Quantile Range Outliers,
Where( dt:Grade == grades[j]);
);
show (el);
dtQuant = el << Save Quantile Outlier Limits;
Report(el)<< close window;
);
Re: ¿Cómo excluyo automáticamente las filas que incluyen valores atípicos identificados por la función "Explorar valores atípicos"?Sin ver su código, solo puedo adivinar cuál es el problema.Parece que ha agregado una columna en su tabla de datos, que contiene las columnas en las que desea basar su análisis de valores atípicos.Si estoy adivinando correctamente, a continuación hay una modificación de mi secuencia de comandos anterior, que tiene una nueva columna agregada a la tabla de datos, que contiene las columnas que se analizarán.El script lee las columnas que se van a analizar desde la columna y luego usa esos nombres de columna para limitar las columnas que se van a evaluar.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Water Treatment.jmp" );
// Create a new column with the names of the columns to be used
// in the analysis
dt << New Column( "theColumns",
character,
set values(
{"Q-E", "ZN-E", "PH-E", "DBO-E", "DQO-E", "SS-E", "SSV-E", "SED-E", "COND-E", "PH-P", "DBO-P", "SS-P",
"SSV-P", "SED-P", "COND-P", "PH-D", "DBO-D", "DQO-D", "SS-D", "SSV-D", "SED-D", "COND-D", "PH-S"}
)
);
// Get the list of columns from the column that contains
// the columns to be analyzed
colNames = dt:theColumns << get values;
// Get rid of entries that have blank/null values
For( i = N Items( colNames ), i >= 1, i--,
If( colNames[i] == "",
Remove From( colNames, i, 1 )
)
);
// Run the analysis using the list of column extracted from the
// "theColumns" column
el = Explore Outliers(
Y( Eval( colNames ) ),
Quantile Range Outliers,
);
dtQuant = el << Save Quantile Outlier Limits;
dtQuant << show window( 0 );
Report( el ) << close window;
// Get rid of non involved columns
dtQuant << select where( :Number of Outliers == 0 );
dtQuant << delete rows;
// Loop through the remaining rows and set the affected rows in the dt table to selected
dt << clear row states;
For( i = 1, i <= N Rows( dtQuant ), i++,
dt << select where(
As Column( dt, dtQuant:Column[i] ) <= dtQuant:Low Threshold[i] | As Column( dt, dtQuant:Column[i] )
>= dtQuant:High Threshold[i],
current selection( "extend" )
)
);
// Hide and exclude the rows
dt << hide and exclude;
// Close the no longer needed data table
Close( dtQuant, nosave );Re: ¿Cómo excluyo automáticamente las filas que incluyen valores atípicos identificados por la función "Explorar valores atípicos"?Gracias @txnelson para la solución
Intenté modificarlo para poder recorrer todo el código a través de una lista de variables de una columna para usar los valores atípicos de rango de cuantiles con una función adicional de "dónde".
El ciclo parece bloquearse al no poder guardar los límites de valores atípicos cuantiles, lo que dice que el objeto no es programable. ¿Algunas ideas?Re: ¿Cómo excluyo automáticamente las filas que incluyen valores atípicos identificados por la función "Explorar valores atípicos"?Además de @txnelson la respuesta de, es posible que encuentre algo en este hilo .
Re: ¿Cómo excluyo automáticamente las filas que incluyen valores atípicos identificados por la función "Explorar valores atípicos"?Sí, tienes razón, lo siento por ese descuido de mi parte.Re: ¿Cómo excluyo automáticamente las filas que incluyen valores atípicos identificados por la función "Explorar valores atípicos"?@SDF1 la solicitud es para Explorar valores atípicos, no para Explorar desaparecidos
@JC7
Aquí hay un ejemplo que elaboré que usa la tabla de datos de muestra de tratamiento de agua y oculta y excluye todas las filas encontradas para todas las columnas que se encontraron como valores atípicos.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Water Treatment.jmp" );
el = Explore Outliers(
Y(
:Name( "Q-E" ),
:Name( "ZN-E" ),
:Name( "PH-E" ),
:Name( "DBO-E" ),
:Name( "DQO-E" ),
:Name( "SS-E" ),
:Name( "SSV-E" ),
:Name( "SED-E" ),
:Name( "COND-E" ),
:Name( "PH-P" ),
:Name( "DBO-P" ),
:Name( "SS-P" ),
:Name( "SSV-P" ),
:Name( "SED-P" ),
:Name( "COND-P" ),
:Name( "PH-D" ),
:Name( "DBO-D" ),
:Name( "DQO-D" ),
:Name( "SS-D" ),
:Name( "SSV-D" ),
:Name( "SED-D" ),
:Name( "COND-D" ),
:Name( "PH-S" ),
:Name( "DBO-S" ),
:Name( "DQO-S" ),
:Name( "SS-S" ),
:Name( "SSV-S" ),
:Name( "SED-S" ),
:Name( "COND-S" ),
:Name( "RD-DBO-P" ),
:Name( "RD-SS-P" ),
:Name( "RD-SED-P" ),
:Name( "RD-DBO-S" ),
:Name( "RD-DQO-S" ),
:Name( "RD-DBO-G" ),
:Name( "RD-DQO-G" ),
:Name( "RD-SS-G" ),
:Name( "RD-SED-G" )
),
Quantile Range Outliers,
);
dtQuant = el << Save Quantile Outlier Limits;
dtQuant << show window( 0 );
Report( el ) << close window;
// Get rid of non involved columns
dtQuant << select where( :Number of Outliers == 0 );
dtQuant << delete rows;
// Loop through the remaining rows and set the affected rows in the dt table to selected
dt << clear row states;
For( i = 1, i <= N Rows( dtQuant ), i++,
dt << select where(
As Column( dt, dtQuant:Column[i] ) <= dtQuant:Low Threshold[i] | As Column( dt, dtQuant:Column[i] )
>= dtQuant:High Threshold[i],
current selection( "extend" )
)
);
// Hide and exclude the rows
dt << hide and exclude;
// Close the no longer needed data table
Close( dtQuant, nosave );
Re: ¿Cómo excluyo automáticamente las filas que incluyen valores atípicos identificados por la función "Explorar valores atípicos"?Hola @JC7 ,
Debería ser bastante fácil seguir algo como esto:
Names Default To Here( 1 );
dt = Current Data Table();
colnames = dt << Get column Names();
obj = dt << Explore Missing Values( Y( Eval( colnames ) ) );
obj << select rows( Eval( colnames ) );
SD
Re: ¿Cómo excluyo automáticamente las filas que incluyen valores atípicos identificados por la función "Explorar valores atípicos"?Estoy usando el método de valores atípicos de rango de cuantiles. ¡Lo siento, olvidé decirlo en la publicación original!Re: ¿Cómo excluyo automáticamente las filas que incluyen valores atípicos identificados por la función "Explorar valores atípicos"?¿Qué método de valores atípicos está seleccionando cuando ejecuta Explorar valores atípicos? Parece que se pueden requerir diferentes soluciones para los diferentes métodos.