Come simulare i dati di processo con un certo grado di autocorrelazione?Lavoro in un ambiente di produzione e spesso vedo dati distribuiti in modo relativamente normale, ma non necessariamente in modo casuale.Il Sigma generale (deviazione standard) è spesso maggiore del Sigma interno (sigma grafico di controllo) per quanto riguarda i calcoli della capacità di processo.Ciò può verificarsi per una serie di motivi, come cambi di lotto di materie prime e calibrazioni periodiche degli strumenti.Sto cercando di valutare alcune strategie di controllo proposte, ma non riesco a capire come simulare accuratamente il mio processo.Se uso solo Random Normal(), non ottengo nessuna dell'autocorrelazione che di solito vedrei con i dati di processo effettivi.Qualche idea su come simulare dati in cui l'indice di stabilità non è 1?Questo non è un problema di serie temporali tradizionale in cui esiste un periodo prevedibile per il modello di dati.Grazie a tutti in anticipo per il vostro aiuto.
AnaliticaTabella datiAltroSceneggiaturaRe: Come simulare i dati di processo con un certo grado di autocorrelazione?C'è una funzione per questo scopo:

Re: Come simulare i dati di processo con un certo grado di autocorrelazione?Grazie mille, @ih , per il suggerimento!Proverò sia questa che l'idea di Mark.
Re: Come simulare i dati di processo con un certo grado di autocorrelazione?Grazie, @Mark_Bailey per il suggerimento.Sembra che dovrebbe essere esattamente ciò di cui ho bisogno, ma temo di avere problemi a capire come implementarlo correttamente.Per cominciare, vorrei solo generare una colonna simulata in una tabella di dati.Conosco la deviazione standard media complessiva del processo, all'interno di sigma (grafico di controllo sigma - che in questa situazione si basa sull'intervallo mobile) e il valore di "Autocorrelazione" (dalle statistiche di riepilogo nella piattaforma di distribuzione).Posso anche ottenere un valore di correlazione per il parametro di processo rispetto al Lag() stesso (di una riga) da Fit Y per X - e potrei ripetere l'analisi di correlazione per diversi ritardi di riga.Qualche possibilità potresti aiutarmi a capire come dovrei strutturare la formula date le informazioni che ho (o fammi sapere se mi manca del tutto la barca)?
Re: Come simulare i dati di processo con un certo grado di autocorrelazione?Dopo qualche indagine, alcune note:
- C'è del rumore aggiunto ai valori, sembra avere una deviazione standard vicino a 1
- È necessario definire un vettore medio e una matrice di covarianza simmetrica con le stesse dimensioni di un vettore medio.
Qualche esempio:
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: Come simulare i dati di processo con un certo grado di autocorrelazione?Chiedo scusa. Mi sbagliavo. Non hai più correlazioni (cioè più di una variabile). Hai una serie temporale. Fammi esaminare di più.
Re: Come simulare i dati di processo con un certo grado di autocorrelazione?Grazie, @ih - Il tuo ingegnoso script l'ha fatto in modo da poter capire come doveva funzionare la funzione Random Multivariate Normal().Questo sarà fantastico per simulare più fattori correlati - e non è qualcosa di cui ero a conoscenza prima.
Re: Come simulare i dati di processo con un certo grado di autocorrelazione?Grazie, Marco.Se aiuta, ecco un esempio del tipo di dati che sto cercando di simulare.

Re: Come simulare i dati di processo con un certo grado di autocorrelazione?@Mark_Bailey mi ha indicato questo post. E ho guardato i tuoi dati. Sembra che i tuoi dati possano essere adeguatamente modellati da un cosiddetto modello AR(1), abbreviazione di A utoregressivo dell'Ordine Uno. È un tipo di modello di serie temporali che descrive un processo con autocorrelazione.
Per il modello AR(1), la sua simulazione utilizzando la colonna della formula JMP può essere eseguita procedendo come segue:
Innanzitutto, adatta il modello AR(1) ed ecco il rapporto:

Includo lo script nei dati originali e allego la tabella dati aggiornata.
Quindi, crea una colonna formula come la seguente. Sono necessari tre numeri dal rapporto precedente: due stime dei parametri e deviazione standard nel Riepilogo modello. E guarda come vengono utilizzati nella formula.
Ora un po' di questa formula. Per prima cosa immagina come una tabella JMP valuta la formula, riga per riga. Quindi la formula dice, se è la prima riga, simula solo un numero in base al campione, qui sembra che un Normal(0,1) casuale si adatti al conto. Quindi, all'aumentare del numero di riga, la formula calcola i nuovi valori in modo ricorsivo in base al valore della riga precedente. Questo è ciò che fa quel pedice di Y.
Allego anche il prodotto finito. La tua tabella di dati originale ha tre script. La tabella di dati simulati ha tre script. E puoi confrontare i loro risultati per vedere quanto sono vicini i dati simulati ai tuoi dati originali.

Ancora una parola, se i tuoi dati sono più complicati e AR(1) non è più sufficiente, potresti dover cercare modelli di serie temporali più complicati. A quel punto, la simulazione non è più un compito facile. Fortunatamente, la piattaforma Time Series ha funzionalità di simulazione integrate. Esegui lo script Serie storica nelle tabelle allegate, la tua o quella simulata. Nel report, in Confronto modello, accanto al modello, fai clic sul triangolo rosso e seleziona Genera simulazione, che ti porterà a una finestra di dialogo per simulare le serie temporali. La finestra di dialogo dovrebbe essere per lo più auto-esplicativa, quindi non elaborerò.

Re: Come simulare i dati di processo con un certo grado di autocorrelazione?Se non ti dispiace scherzare con JSL, puoi giocare al gioco di simulazione all'infinito. Si prega di trovare in allegato un paio di vecchi script che potrebbero darti alcune idee. Il primo si basa sulla risposta di @peng_liu e consente di simulare l'output di un processo AR(2) e vedere come i parametri stimati corrispondono ai parametri del modello utilizzati. Affermare l'ovvio forse, ma non tutti i processi possono essere utilmente modellati come autoregressivi, indipendentemente dal numero di parametri utilizzati. Ho sempre trovato il libro di Box e Luceno molto utile nel contesto industriale. Il secondo script simula quello che chiamano un "processo di innovazione appiccicoso".
Re: Come simulare i dati di processo con un certo grado di autocorrelazione?Modifica: ho anche letto male e ho dato un suggerimento per la multi-correlazione invece dell'autocorrelazione. Ops!
non ho provato @Mark_Bailey 's suggerimento, penso che potrebbe essere un modo più semplice per fare la stessa cosa:
Potresti provare a utilizzare i componenti principali, creare un valore casuale per le variabili latenti, quindi calcolare le variabili simulate in base a tali variabili latenti e aggiungere l'errore univariato.

Usando questo metodo puoi persino creare dati simili al tuo processo trovando il tuo caricamento, coefficienti, varianze ed errori e quindi simulando dati proprio come questi.
Ecco un esempio:
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 ) )
)
)