Ein Skript-Normalitätstest für viele SpaltenHallo,
Ich schreibe gerne ein Skript, das die Normalität vieler Spalten überprüft und eine neue Spalte mit binärer Ausgabe (0,1) erstellt, um normal und nicht normal anzuzeigen. Ich habe ein Addin für den Normalitätstest gesehen, aber ich weiß nicht, wie ich das nutzen kann, um das zu erreichen, was ich will.
Jede Hilfe wird sehr geschätzt.
Vielen Dank.
Re: Ein Skript-Normalitätstest für viele SpaltenVielen Dank.
Re: Ein Skript-Normalitätstest für viele SpaltenJims Idee der Zufallsstichprobe ist gut, aber dann müssen Sie sich mit der Stichprobengröße und -stärke auseinandersetzen. Es könnte einfacher sein, Ihre Einstellung vorzunehmen p -Werte, die den Ansatz der falschen Erkennungsrate (FDR) verwenden.
Re: Ein Skript-Normalitätstest für viele SpaltenSie könnten aus Ihren Daten eine Stichprobe auf eine angemessene Stichprobengröße erstellen, damit die Statistiken nicht mit der Stichprobengröße überschwemmt werden.
Re: Ein Skript-Normalitätstest für viele SpaltenDanke Dan für die Kommentare. Aber was soll ich dann tun? Ich versuche zu verstehen, ob die Verteilungen normal sind oder nicht und ich habe große Stichproben.
Ich danke Ihnen für Ihre Hilfe. Vielen Dank
Re: Ein Skript-Normalitätstest für viele SpaltenIch stimme zu, dass die Daten normal aussehen. Sie haben das Problem beim statistischen Testen mit großen Datenmengen festgestellt. Jeder noch so kleine Unterschied wird als statistisch signifikant angezeigt. Sie haben über 100.000 Beobachtungen. Der Test auf Normalität (wie bei jedem statistischen Test) wird aufgrund der großen Stichprobengröße einen statistisch signifikanten Unterschied feststellen. Dieser statistisch signifikante Unterschied ist wahrscheinlich kein praktisch signifikanter Unterschied.
Re: Ein Skript-Normalitätstest für viele SpaltenHallo David,
Vielen Dank. Ich versuchte es mit einer anderen Tabelle und schaute auf eine Spalte. Ich habe das Ergebnis bekommen, dass die Verteilung nicht normal ist und ich bin überrascht, weil die Verteilung für mich normal ist. Der berichtete p-Wert beträgt 0,01. Ich habe das Histogramm angehängt. Irgendwelche Kommentare? Vielen Dank.
Re: Ein Skript-Normalitätstest für viele SpaltenEinige bessere Daten ... zum Beispiel
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);
);
Re: Ein Skript-Normalitätstest für viele SpaltenDiese Schleife dient nur zur Veranschaulichung. Bei den Big Class-Daten macht das nicht viel Sinn. Der Fehler liegt darin, dass versucht wird, die Normalität für die Altersspalte zu testen, die über einen ordinalen Modellierungstyp verfügt, während der Test auf Normalität davon ausgeht, dass die Spalte kontinuierlich ist. Sie müssen also nur einige aussagekräftige Eingabedaten bereitstellen.
Re: Ein Skript-Normalitätstest für viele SpaltenVielen Dank für die schnelle Rückmeldung und Lösung. Ich habe die Vorlage verwendet, die Sie mir geschickt haben, und wenn ich die letzte Schleife ablaufe:
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"))
);
Ich bekomme eine Fehlermeldung:
Cannot subscript Display Box in access or evaluation of 'Subscript' , rep[/*###*/"Goodness-of-Fit Test"]
Ich schätze Ihre Hilfe. Vielen Dank.
);
Re: Ein Skript-Normalitätstest für viele SpaltenHier finden Sie eine Diskussion über den Arbeitsablauf beim Erstellen der benutzerdefinierten Funktion
http://www.pega-analytics.co.uk/blog/testing-residuals-for-normality/
Re: Ein Skript-Normalitätstest für viele SpaltenSie sind sich nicht sicher, wie Ihre JSL-Kenntnisse aussehen, Sie können jedoch eine benutzerdefinierte Funktion wie diese verwenden:
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")
);
Von hier aus können Sie die Funktion in eine for-Schleife einfügen, die über die Spalten iteriert:
lstNames = dt << Get Column Names(String,Numeric);
For (i=1,i<=NItems(lstNames),i++,
pValue = Test Normal(dt,lstNames[i]);
// etc
);