Un test di normalità di script per molte colonneCiao,
Mi piace scrivere uno script in grado di verificare la normalità di molte colonne e creare una nuova colonna con output binario (0,1) per indicare normale e non normale. Ho visto un addin per test di normalità, ma non so come posso usarlo per ottenere ciò che voglio.
Qualsiasi aiuto è molto apprezzato.
Grazie.
Ri: Un test di normalità di script per molte colonneGrazie mille.
Ri: Un test di normalità di script per molte colonneL'idea di Jim del campionamento casuale è buona, ma poi devi affrontare il problema della dimensione e della potenza del campione. Potrebbe essere più semplice per regolare il tuo p -valori che utilizzano l'approccio del tasso di rilevamento falso (FDR).
Ri: Un test di normalità di script per molte colonneÈ possibile campionare in modo semplice dai dati a una dimensione campionaria ragionevole in modo da non annegare le statistiche con la dimensione del campione.
Ri: Un test di normalità di script per molte colonneGrazie Dan per i commenti. Ma cosa dovrei fare allora? Sto cercando di capire se le distribuzioni sono normali o meno e ho campioni di grandi dimensioni.
Apprezzo il tuo aiuto su questo. Grazie
Ri: Un test di normalità di script per molte colonneSono d'accordo che i dati sembrano normali. Hai riscontrato il problema con test statistici con grandi quantità di dati. Qualsiasi differenza, non importa quanto leggera, mostrerà come statisticamente significativa. Hai oltre 100.000 osservazioni. Il test per la normalità (come qualsiasi test statistico) troverà una differenza statisticamente significativa a causa della grande dimensione del campione. Questa differenza statisticamente significativa non è probabilmente una differenza praticamente significativa.
Ri: Un test di normalità di script per molte colonneCiao David,
Grazie. Ho provato con un tavolo diverso e ho guardato una colonna. Ho ottenuto il risultato che la distribuzione non è normale e sono sorpreso perché la distribuzione è normale per me. Il valore p riportato è 0,01. Ho allegato l'istogramma. Qualche commento? Grazie.
Ri: Un test di normalità di script per molte colonneAlcuni dati migliori ... per esempio
dt = Open("$SAMPLE_DATA/Semiconductor Capability.jmp");
For (i=5,i<=10,i++,
colName = Column(dt,i) << Get Name;
show(colName);
pValue = Test Normal(dt,colName);
show(pValue);
);
Ri: Un test di normalità di script per molte colonneQuel ciclo era solo per illustrazione. Con i dati della Big Class non ha molto senso. L'errore è perché sta provando a testare la normalità per la colonna età - che ha un tipo di modellamento ordinale - mentre il test per la normalità presuppone che la colonna sia continua. Quindi devi solo fornirgli alcuni dati di input significativi.
Ri: Un test di normalità di script per molte colonneGrazie mille per un feedback e una soluzione rapidi. Ho usato il modello che mi hai inviato e quando eseguo l'ultimo ciclo:
For (i=1,i<=NItems(lstNames),i++,
pValue = Test Normal(dt,lstNames[i]);
show(pValue);
If (pValue<0.05,
show("failed normality test")
,
show("passed normality test"))
);
Ottengo un messaggio di errore:
Cannot subscript Display Box in access or evaluation of 'Subscript' , rep[/*###*/"Goodness-of-Fit Test"]
Apprezzo il vostro aiuto. Grazie.
);
Ri: Un test di normalità di script per molte colonneEcco una discussione sul flusso di lavoro associato alla costruzione della funzione definita dall'utente
http://www.pega-analytics.co.uk/blog/testing-residuals-for-normality/
Ri: Un test di normalità di script per molte colonneNon sei sicuro di quale sia la tua conoscenza di JSL ma puoi utilizzare una funzione definita dall'utente come questa:
Test Normal = Function({dt,col},{Default Local},
dist = dt << Distribution( Invisible,
Continuous Distribution(
Column( Eval(col) ),
Fit Distribution(
Normal( Goodness of Fit( 1 ) )
)
),
Histograms Only
);
rep = dist << Report;
ob = rep["Goodness-of-Fit Test"];
tb = ob[TableBox(1)];
mat = tb[NumberColBox(2)] << Get;
pValue = mat[1];
rep << Close Window;
Return(pValue);
);
// illustration of using hte function
dt = Open("$SAMPLE_DATA/Big Class.jmp");
pValue = Test Normal(dt,"height");
show(pValue);
If (pValue<0.05,
show("failed normality test")
,
show("passed normality test")
);
Da qui, puoi inserire la funzione all'interno di un ciclo for che itera sulle colonne:
lstNames = dt << Get Column Names(String,Numeric);
For (i=1,i<=NItems(lstNames),i++,
pValue = Test Normal(dt,lstNames[i]);
// etc
);