Submuestra aleatoriamente de una columnaHola a todos, tengo una población de 200 tiendas en todo el país.Me interesa saber si puedo submuestrear una fracción de estas tiendas y aproximarme a la distribución de eventos. ¿Podría haber algún método de Monte Carlo para llenar, por ejemplo, 30 filas en una nueva columna con una submuestra aleatoria de las 200 originales?
Entonces podría comparar la distribución de los 30 recuentos en la submuestra con la distribución en la población de 200.
Repita este ejemplo 100 veces para determinar el riesgo de muestrear 30 tiendas para representar la población de 200.
¿Pensamientos?gracias, pablo
Primeras 10 filas del 200
Tienda # - columna 1
Cuenta par - columna 2
19 20 21 22 23 25 26 27 29 34 | 1 4 7 3 4 3 12 5 8 8 |
Ingeniería de Calidad y ProcesosRe: Submuestra aleatoriamente de una columna
gracias, ron
Re: Submuestra aleatoriamente de una columnaHola @pablo ,
la otra solución sin secuencias de comandos que puede ser útil en tales aplicaciones es usar el generador de consultas JMP en el menú Tablas.

allí puede encontrar una pestaña de muestreo aleatorio como en la imagen

Como de costumbre, lo ejecuta de forma interactiva, puede utilizar el script creado para uso adicional.
Re: Submuestra aleatoriamente de una columnaGracias, Sam, y a todos los que publicaron soluciones.
Re: Submuestra aleatoriamente de una columnaEntiendo que no está escribiendo su solución. También puede usar de forma interactiva Tablas > Subconjunto para crear una nueva tabla más pequeña con filas seleccionadas al azar de la tabla de datos original. ¿Funcionaría de esa manera para usted?
Re: Submuestra aleatoriamente de una columnaAquí hay un script de ejemplo que crea subconjuntos de un tamaño dado sin reemplazo
Names Default To Here( 1 );
dt =
// Open Data Table: semiconductor capability.jmp
// → Data Table( "semiconductor capability" )
Open( "$SAMPLE_DATA/semiconductor capability.jmp" );
// New formula column: Row
Data Table( "semiconductor capability" ) << New Column( "Row",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula( Row() )
) << Move Selected Columns( {:Row}, after( :SITE ) );
// Loop through data creating sample data tables
sampleSize = 20;
For( i = 1, i <= 20, i++,
dtSample = Data Table( "semiconductor capability" ) << Subset(
Sample Size( sampleSize ),
Selected columns only( 0 ),
output table( "Sample " || Char( i ) )
);
matSelected = dtSample:Row << get values;
// Delete row column from sample data
dtSample << delete columns( Row );
// Delete selected rows from main table
dt << select rows( matSelected );
dt << delete rows;
);
// Delete row column from original data table
dt << delete columns( Row );Re: Submuestra aleatoriamente de una columnaUna forma rápida de hacer una submuestra usando una fórmula de columna es usar la función Col Shuffle().La función devuelve un reordenamiento aleatorio de números de fila.Si elige filas donde los valores de Col Shuffle() son menores o iguales al tamaño de la submuestra (n_sub), esto equivale a hacer un orden aleatorio de la columna y seleccionar las primeras n_sub filas.
Por ejemplo, agregar una nueva columna con esta fórmula hará esto para un tamaño de submuestra de 30.

tabla de ejemplo adjunta.
Si desea hacer esto repetidamente, entonces aprender algo de JMP Scripting lo hará más fácil.Un script básico para agregar columnas como esta repetidamente es
Names Default to Here( 1 );
Number_of_Cols_to_Add = 100;
For( i = 1, i <= Number_of_Cols_to_Add, i++,
Current Data Table() <<
New Column( "Y Subsample (Size 30)",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula( If( Col Shuffle() <= 30, :Y, . ) )
)
);
Re: Submuestra aleatoriamente de una columnaHola Jeff, gracias por la respuesta.Desafortunadamente, no entiendo cómo usar la función para mi propósito.
- Resample Freq crea recuentos de remuestreos.Esto parece ser un paso intermedio para luego crear una nueva tabla con los datos submuestreados. Espero crear directamente una columna de datos submuestreados de la población original de 200 filas.
- Preferiría probar sin reemplazo, no con arranque.
Si solo necesitara submuestrear los datos originales una vez, la ruta más fácil sería Tabla > Subconjunto > Tamaño de muestra aleatorio = 30 (p. ej.)
No utilizo secuencias de comandos; de lo contrario, crearía un ciclo para producir 100 tablas de 30 muestras aleatorias y luego concatenaría las 100 tablas en una tabla maestra.
¿Hay alguna manera de tomar directamente 30 muestras aleatorias de una columna y colocar esos 30 valores en una nueva columna?
En última instancia, espero probar Confiabilidad> Distribución de vida> Comparar grupos para evaluar la distribución de las submuestras frente a la distribución de la población original.
- Luego repita para Tamaño de muestra = 20, luego 40, etc. para que pueda evaluar el tamaño de muestra mínimo que da una distribución similar a la población de 200 tiendas.
gracias, pablo
Re: Submuestra aleatoriamente de una columnaEcha un vistazo a la Frecuencia de remuestreo() función.
Frecuencia de remuestreo
Genera una selección aleatoria con recuentos de frecuencia de reemplazo, adecuada para su uso en el arranque. Por ejemplo, admite un segundo Columna de frecuencia argumento, lo que le permite hacer muestras de arranque relacionadas con una columna de frecuencia preexistente especificada en el segundo argumento. Frecuencia de remuestreo() genera un remuestreo del 100%. ResampleFreq(tasa) genera un tasa muestra de frecuencia Remuestreo (tasa, columna) genera una muestra que se calcula por la tasa multiplicada por la suma de la columna especificada. Para obtener más información sobre la sintaxis de la función Resample Freq, consulte Funciones de probabilidad discreta en el Referencia de sintaxis JSL .