¿Cómo simular datos de proceso con algún grado de autocorrelación?Trabajo en un entorno de fabricación y, a menudo, veo datos que tienen una distribución relativamente normal, pero que no necesariamente están distribuidos al azar.El Sigma general (desviación estándar) suele ser mayor que el Sigma interno (sigma del gráfico de control) con respecto a los cálculos de capacidad del proceso.Esto puede ocurrir por una variedad de razones, como cambios de lote de materia prima y calibraciones periódicas de instrumentos.Estoy tratando de evaluar algunas estrategias de control propuestas, pero no sé cómo simular con precisión mi proceso.Si solo uso Random Normal(), no obtengo ninguna de las autocorrelaciones que normalmente vería con los datos del proceso real.¿Alguna idea de cómo simular datos donde el índice de estabilidad no es 1?Este no es un problema de serie de tiempo tradicional donde hay un período predecible para el patrón de datos.Gracias a todos de antemano por su ayuda.
AnalíticaTabla de datosOtrosecuencias de comandosRe: ¿Cómo simular datos de proceso con cierto grado de autocorrelación?Hay una función para este propósito:

Re: ¿Cómo simular datos de proceso con cierto grado de autocorrelación?Muchas gracias, @ih , por la sugerencia!Probaré tanto esta idea como la de Mark.
Re: ¿Cómo simular datos de proceso con cierto grado de autocorrelación?Gracias, @Mark_Bailey por la sugerenciaParece que debería ser exactamente lo que necesito, pero me temo que tengo problemas para descubrir cómo implementarlo correctamente.Para empezar, me gustaría generar una columna simulada en una tabla de datos.Conozco la desviación estándar promedio del proceso general, dentro de sigma (gráfico de control sigma, que en esta situación se basa en el rango móvil) y el valor de "Autocorrelación" (de las estadísticas de resumen en la plataforma de distribución).También puedo obtener un valor de Correlación para el parámetro de proceso contra el Retraso () de sí mismo (por una fila) de Ajustar Y por X, y podría repetir el análisis de correlación para diferentes rezagos de fila.¿Alguna posibilidad de que pueda ayudarme a entender cómo debo estructurar la fórmula dada la información que tengo (o hágamelo saber si me estoy perdiendo el tren por completo)?
Re: ¿Cómo simular datos de proceso con cierto grado de autocorrelación?Después de un poco de investigación, algunas notas:
- Hay algo de ruido agregado a los valores, parece tener una desviación estándar cercana a 1
- Debe definir un vector medio y una matriz de covarianza simétrica con las mismas dimensiones que un vector medio.
Algunos ejemplos:
Names Default To Here( 1 );
//Make a dataset from a mean vector, covariance matrix, and number of rows
Make Correlated Table = Function({mv, cm, nr, name = "Data Table"}, {dt},
randmvnMat = Random Multivariate Normal( mv, cm, nr );
dt = New Table( name );
dt << Set Matrix(randmvnMat);
dt << Scatterplot Matrix( Y( dt << Get Column References ), Matrix Format( "Lower Triangular" ), Density Ellipses( 1 ) );
dt
);
dt1 = Make Correlated Table(
mv = [0 1 1 0],
cv = [
1 0 0 0,
0 1 0 0,
0 0 1 0,
0 0 0 1
],
nr = 100,
name = "No Correlation"
);
dt2 = Make Correlated Table(
mv = [0 10 20],
cv = [
1 1 0,
1 1 0,
0 0 1
],
nr = 20,
name = "1-2 Correlated"
);
dt3 = Make Correlated Table(
mv = [0 10 20],
cv = [
1 1 1,
1 1 1,
1 1 1
],
nr = 20,
name = "1-2-3 Correlated"
);
dt4 = Make Correlated Table(
mv = [0 10 20],
cv = [
1.0 0.8 -0.5,
0.8 1.0 0.0,
-0.5 0.0 1.0
],
nr = 20,
name = "Some Correlation"
);
Re: ¿Cómo simular datos de proceso con cierto grado de autocorrelación?Me disculpo. Estaba equivocado. No tiene correlación múltiple (es decir, más de una variable). Tienes una serie de tiempo. Déjame investigarlo más.
Re: ¿Cómo simular datos de proceso con cierto grado de autocorrelación?Gracias, @ih - Su ingenioso script lo hizo para que pudiera entender cómo se pretendía que funcionara la función Random Multivariate Normal().Esto será genial para simular múltiples factores correlacionados, y no es algo de lo que yo fuera consciente antes.
Re: ¿Cómo simular datos de proceso con cierto grado de autocorrelación?Gracias, Marcos.Si ayuda, en absoluto, aquí hay un ejemplo del tipo de datos que estoy tratando de simular.

Re: ¿Cómo simular datos de proceso con cierto grado de autocorrelación?@Mark_Bailey me indicó esta publicación. Y miré tus datos. Parece que sus datos pueden modelarse adecuadamente mediante el llamado modelo AR(1), abreviatura de A autoregresivo de Orden Uno. Es un tipo de modelo de serie temporal que describe un proceso con autocorrelación.
Para el modelo AR(1), la simulación mediante el uso de la columna de fórmula JMP se puede realizar mediante los siguientes pasos:
Primero, ajuste el modelo AR(1) y aquí está el informe:

Incluyo el script en sus datos originales y adjunto la tabla de datos actualizada.
A continuación, cree una columna de fórmula como la siguiente. Necesita tres números del informe anterior: dos estimaciones de parámetros y la desviación estándar en el Resumen del modelo. Y vea cómo se usan en la fórmula.
Ahora un poco sobre esta fórmula. Primero imagine cómo una tabla JMP evalúa la fórmula, es fila por fila. Entonces, la fórmula dice, si es la primera fila, simplemente simule algún número de acuerdo con la muestra, aquí parece que un Normal aleatorio (0,1) se ajusta a la factura. Luego, a medida que aumenta el número de fila, la fórmula calcula nuevos valores recursivamente en función del valor de la fila anterior. Esto es lo que hace ese subíndice de Y.
Adjunto el producto terminado también. Su tabla de datos original tiene tres scripts. La tabla de datos simulados tiene tres scripts. Y puede comparar sus resultados para ver qué tan cerca están los datos simulados de sus datos originales.

Una palabra más, si sus datos son más complicados y AR(1) ya no es suficiente, es posible que deba buscar modelos de series temporales más complicados. Para entonces, la simulación ya no es una tarea fácil. Afortunadamente, la plataforma Time Series tiene capacidades de simulación integradas. Ejecute el script Time Series en las tablas adjuntas, ya sea la suya o la simulada. En el informe, dentro de Comparación de modelos, al costado del modelo, haga clic en el triángulo rojo y seleccione Generar simulación, lo que lo llevará a un cuadro de diálogo para simular series temporales. El diálogo debe explicarse por sí solo, por lo que no voy a dar más detalles.

Re: ¿Cómo simular datos de proceso con cierto grado de autocorrelación?Si no te importa jugar con JSL, entonces puedes jugar el juego de simulación indefinidamente. Adjunto encontrará un par de scripts antiguos que pueden darle algunas ideas. La primera se basa en la respuesta de @peng_liu y le permite simular la salida de un proceso AR(2) y ver cómo los parámetros estimados coinciden con los parámetros del modelo utilizados. Tal vez sea obvio, pero no todos los procesos se pueden modelar de manera útil como autorregresivos, sin importar cuántos parámetros se usen. siempre encontré el libro de Box y Luceno muy útil en el contexto industrial. El segundo guión simula lo que ellos llaman un 'proceso de innovación pegajoso'.
Re: ¿Cómo simular datos de proceso con cierto grado de autocorrelación?Editar: también leí mal y sugerí una multicorrelación en lugar de una autocorrelación. ¡Ups!
no he probado @Mark_Bailey Sugerencia de, creo que podría ser una forma más fácil de hacer lo mismo:
Puede intentar usar componentes principales, crear un valor aleatorio para las variables latentes, luego calcular sus variables simuladas en función de esas variables latentes y agregar un error univariado.

Con este método, incluso puede crear datos que sean similares a su propio proceso al encontrar su propia carga, coeficientes, varianzas y errores, y luego simular datos como estos.
Aquí hay un ejemplo:
New Table( "Example Correlated Data",
Add Rows( 100 ),
New Column( "Prin 1", Numeric, "Continuous", Format( "Best", 12 ),
Formula( Random Normal( 0, 1 ) )
),
New Column( "Prin 2", Numeric, "Continuous", Format( "Best", 12 ),
Formula( Random Normal Mixture( [-1, 2], [0.3, 0.6], [0.25, 0.75] ) )
),
New Column( "X1", Numeric, "Continuous", Format( "Best", 12 ),
Formula( :Prin 1 * 20 + :Prin 2 * 1 + 5 + Random Normal( 0, 3 ) )
),
New Column( "X2", Numeric, "Continuous", Format( "Best", 12 ),
Formula( :Prin 1 * 2 + :Prin 2 * 1 + 3 + Random Normal( 0, 2 ) )
),
New Column( "X3", Numeric, "Continuous", Format( "Best", 12 ),
Formula( :Prin 1 * -1 + :Prin 2 * 0.3 + 200 + Random Normal( 0, 0.2 ) )
)
)