Ciao,
Mi piace scrivere uno script per ottenere l'UCL per l'analisi anomala multivariata utilizzando Mahalanobis Distance.
Posso ottenere l'UCL passando attraverso il menu JMP, ma è comunque possibile ottenere l'UCL e impostarlo sul nome della variabile in uno script.
Apprezzo il tuo aiuto. Grazie.
Grazie mille per il tuo aiuto Cameron. Questo è molto utile.
Ciao @A ,
Sembra un po' complicato rimuovere questo valore dal rapporto, ma è possibile ottenerlo eseguendo lo script dell'azione "Salva distanze anomale" e quindi estraendo la proprietà della colonna "Mahal. Valore" che risulta da tale azione.Non è troppo difficile ottenere i valori delle proprietà delle colonne salvati come variabili.Ecco un esempio che utilizza il set di dati di esempio Thickness:
dt = Open("$SAMPLE_DATA/Quality Control/Thickness.jmp");
multi = dt << Multivariate(
Y(
:Thickness 01,
:Thickness 02,
:Thickness 03,
:Thickness 04,
:Thickness 05,
:Thickness 06,
:Thickness 07,
:Thickness 08,
:Thickness 09,
:Thickness 10,
:Thickness 11,
:Thickness 12
),
Estimation Method( "Row-wise" )
);
multi << Mahalanobis Distances( 1 , Save Outlier Distances);
mahal_ucl = Column("Mahal. Distances") << Get Property("Mahal. Value");Tuttavia, questo limite è in realtà molto facile da calcolare in una funzione.È solo la radice quadrata dell'UCL in un grafico T^2 di Hotelling.
Mahal_UCL = function({p,m},
sqrt(((m-1)^2)/m*beta quantile(0.95,p/2,(m-p-1)/2));
);La formula è riportata anche nel libro Metodi multivariati a pagina 49 nel menu Aiuto (Aiuto > Libri > Metodi multivariati).
Ecco un esempio che utilizza i dati Thickness.Il limite di controllo di Mahalanobis è 4,36. Utilizzando la funzione fornita in precedenza, è possibile calcolare l'UCL della distanza di Mahalanobis per m=50 punti dati e p=12 variabili.Ecco l'output del log che mostra un limite di controllo corrispondente:
Mahal_UCL(12,50);
/*:
4.36283881449635
La funzione Mahal_UCL ho scritto hard-code in alpha = 0.05. Potresti rendere alpha un terzo parametro in questo modo:
Mahal_UCL = function({p, m, alpha},
sqrt( ( ( m-1 )^2 )/m*beta quantile( 1-alpha, p/2, ( m-p-1 )/2 ) );
);