Comment simuler des données de processus avec un certain degré d'autocorrélation ?Je travaille dans un environnement de fabrication et je vois souvent des données distribuées relativement normalement, mais pas nécessairement distribuées de manière aléatoire.Le sigma global (écart type) est souvent plus grand que le sigma intérieur (sigma de la carte de contrôle) en ce qui concerne les calculs de capacité de processus.Cela peut se produire pour diverses raisons, telles que les changements de lots de matières premières et les étalonnages périodiques des instruments.J'essaie d'évaluer certaines stratégies de contrôle proposées, mais je n'arrive pas à comprendre comment simuler avec précision mon processus.Si j'utilise simplement Random Normal(), je n'obtiens aucune des autocorrélations que je verrais habituellement avec les données de processus réelles.Des idées sur la façon de simuler des données où l'indice de stabilité n'est pas 1 ?Il ne s'agit pas d'un problème de série chronologique traditionnel où il existe une période prévisible pour le modèle de données.Merci à tous d'avance pour votre aide.
Ingénierie de la qualité et des procédésRe : Comment simuler des données de processus avec un certain degré d'autocorrélation ?Si cela ne vous dérange pas de jouer avec JSL, vous pouvez jouer au jeu de simulation indéfiniment. Veuillez trouver ci-joint quelques anciens scripts qui pourraient vous donner quelques idées. La première s'appuie sur la réponse de @peng_liu et vous permet de simuler la sortie d'un processus AR(2) et de voir comment les paramètres estimés correspondent aux paramètres du modèle utilisés. Énoncer l'évidence peut-être, mais tous les processus ne peuvent pas être modélisés de manière utile comme autorégressifs, quel que soit le nombre de paramètres utilisés. j'ai toujours trouvé le livre de Box et Luceno très utile dans le contexte industriel. Le deuxième script simule ce qu'ils appellent un «processus d'innovation collant».
Re : Comment simuler des données de processus avec un certain degré d'autocorrélation ?@Mark_Bailey m'a indiqué ce poste. Et j'ai regardé vos données. Il semble que vos données puissent être modélisées de manière adéquate par un modèle dit AR(1), abréviation de A utorégressif d'Ordre Un. C'est un type de modèle de série chronologique qui décrit un processus avec auto-corrélation.
Pour le modèle AR(1), sa simulation à l'aide de la colonne de formules JMP peut être effectuée en procédant comme suit :
Tout d'abord, ajustez le modèle AR(1) et voici le rapport :

J'inclus le script dans vos données d'origine et j'attache le tableau de données mis à jour.
Ensuite, créez une colonne de formules comme suit. Vous avez besoin de trois chiffres du rapport précédent : deux estimations de paramètres et un écart type dans le récapitulatif du modèle. Et voyez comment ils sont utilisés dans la formule.
Maintenant un peu sur cette formule. Imaginez d'abord comment un tableau JMP évalue la formule, c'est ligne par ligne. Donc, la formule dit, s'il s'agit de la première ligne, simulez simplement un nombre en fonction de l'échantillon, ici ressemble à un normal aléatoire (0,1) qui convient. Ensuite, à mesure que le numéro de ligne augmente, la formule calcule de nouvelles valeurs de manière récursive en fonction de la valeur de la ligne précédente. C'est ce que fait cet indice de Y.
Je joins également le produit fini. Votre table de données d'origine comporte trois scripts. La table de données simulée comporte trois scripts. Et vous pouvez comparer leurs résultats pour voir à quel point les données simulées sont proches de vos données d'origine.

Un mot de plus, si vos données sont plus compliquées et que AR(1) ne suffit plus, vous devrez peut-être rechercher des modèles de séries chronologiques plus compliqués. À ce moment-là, la simulation n'est plus une tâche facile. Heureusement, la plate-forme Time Series dispose de capacités de simulation intégrées. Exécutez le script Time Series dans les tables jointes, soit la vôtre, soit la simulation. Dans le rapport, dans Comparaison de modèles, à côté du modèle, cliquez sur le triangle rouge et sélectionnez Générer une simulation, ce qui vous mènera à une boîte de dialogue pour simuler des séries temporelles. Le dialogue devrait être principalement auto-expliqué, donc je ne vais pas m'étendre.

Re : Comment simuler des données de processus avec un certain degré d'autocorrélation ?Merci, Marc.Si cela aide, du tout - voici un exemple du type de données que j'essaie de simuler.

Re : Comment simuler des données de processus avec un certain degré d'autocorrélation ?Merci, @ih - Votre script astucieux m'a permis de comprendre comment la fonction Random Multivariate Normal() était censée fonctionner.Ce sera formidable pour simuler plusieurs facteurs corrélés - et ce n'est pas quelque chose dont j'étais conscient auparavant.
Re : Comment simuler des données de processus avec un certain degré d'autocorrélation ?Je m'excuse. J'ai eu tort. Vous n'avez pas de corrélation multiple (c'est-à-dire plus d'une variable). Vous avez une série chronologique. Permettez-moi d'en savoir plus.
Re : Comment simuler des données de processus avec un certain degré d'autocorrélation ?Après enquête, quelques notes :
- Il y a du bruit ajouté aux valeurs, il semble avoir un écart type proche de 1
- Vous devez définir un vecteur moyen et une matrice de covariance symétrique avec les mêmes dimensions qu'un vecteur moyen.
Quelques exemples:
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 : Comment simuler des données de processus avec un certain degré d'autocorrélation ?Merci, @Mark_Bailey pour la proposition.Cela semble être exactement ce dont j'ai besoin, mais j'ai bien peur d'avoir du mal à comprendre comment l'implémenter correctement.Pour commencer, je voudrais juste générer une colonne simulée dans une table de données.Je connais la moyenne, l'écart-type global du processus, dans sigma (sigma de la carte de contrôle - qui dans cette situation est basée sur la plage mobile) et la valeur "d'autocorrélation" (à partir des statistiques récapitulatives de la plate-forme de distribution).Je peux également obtenir une valeur de corrélation pour le paramètre de processus par rapport au Lag() de lui-même (d'une ligne) à partir de Fit Y by X - et je pourrais répéter l'analyse de corrélation pour différents décalages de ligne.Pourriez-vous m'aider à comprendre comment je devrais structurer la formule compte tenu des informations dont je dispose (ou faites-moi savoir si je rate complètement le bateau) ?
Re : Comment simuler des données de processus avec un certain degré d'autocorrélation ?Merci beaucoup, @ih , pour la suggestion!Je vais essayer à la fois cela et l'idée de Mark.
Re : Comment simuler des données de processus avec un certain degré d'autocorrélation ?Edit : J'ai également mal lu et suggéré une multi-corrélation au lieu d'une autocorrélation. Oups !
je n'ai pas essayé @Mark_Bailey , je pense que cela pourrait être un moyen plus simple de faire la même chose :
Vous pouvez essayer d'utiliser des composants principaux, créer une valeur aléatoire pour les variables latentes, puis calculer vos variables simulées en fonction de ces variables latentes et ajouter une erreur univariée.

En utilisant cette méthode, vous pouvez même créer des données similaires à votre propre processus en trouvant votre propre chargement, coefficients, variances et erreurs, puis en simulant des données similaires.
Voici un exemple:
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 ) )
)
)
Re : Comment simuler des données de processus avec un certain degré d'autocorrélation ?Il existe une fonction à cet effet :
