2009-12-10 7 views
15

folgt. Ich habe einige Datenpunkte und ihren Mittelwert. Ich muss herausfinden, ob diese Datenpunkte (mit diesem Mittelwert) einer Gauß-Verteilung folgen. Gibt es eine Funktion in MATLAB, die diese Art von Test durchführen kann? Oder muss ich einen eigenen Test schreiben?Testen Sie, ob eine Datenverteilung einer Gaußschen Verteilung in MATLAB

Ich habe versucht, verschiedene statistische Funktionen von MATLAB zur Verfügung gestellt. Ich bin neu bei MATLAB, also habe ich vielleicht die richtige Funktion übersehen.

prost

Antwort

14

prüfen diese documentation page auf alle available hypothesis tests .

Von denen, für Ihre Zwecke können Sie:

... unter anderem

Sie können auch einige visuelle Tests wie verwenden:

+0

Ich mag es nicht nur, dass das sind alle aus die Mathwork $ $ tatistic $ Toolbox; man könnte leicht die z. Jarque-Bera ohne es, aber für den Rest müssen Sie einige Dateien von "Octave" importieren.Das andere Problem mit einem Firehose von statistischen Tests ist, gibt es keinen Hinweis auf die relative Macht von jedem von ihnen (wahr, es hängt von der alternativen Hypothese ab). – shabbychef

+0

Ja, Wikipedia-Links wäre schöner. Sie sind eher auf den Punkt und schneller zu lesen. –

5

Denn im allgemeinen Test, sucht den Kolmogorov-Smirnov-Test, auch in der Statistik-Toolbox, wie kstest und die Zwei-Probe-Version auf: kstest2. Sie füttern es Ihre empirischen Daten, (und die Daten von einer möglichen Funktion, wie der Gaussian, etc ...) dann testet es die Wahrscheinlichkeit, dass Ihre Probe aus der Normalverteilung gezogen wurde (oder die, die Sie für die Zwei-Probe geliefert haben Version) ... Die nicety ist, dass es dann für alle möglichen Verteilungen arbeiten ...

5

I Spiegelhalter-Test (DJ Spiegelhalter mögen, 'Diagnostische Tests von verteilungs Form' Biometrika, 1983):

function pval = spiegel_test(x) 
% compute pvalue under null of x normally distributed; 
% x should be a vector; 
xm = mean(x); 
xs = std(x); 
xz = (x - xm) ./ xs; 
xz2 = xz.^2; 
N = sum(xz2 .* log(xz2)); 
n = numel(x); 
ts = (N - 0.73 * n)/(0.8969 * sqrt(n)); %under the null, ts ~ N(0,1) 
pval = 1 - abs(erf(ts/sqrt(2))); %2-sided test. 

Wenn Sie statistische Tests hacken, testen Sie sie immer unter Null! Hier ist ein einfaches Beispiel:

pvals = nan(10000,1); 
for j=1:numel(pvals); 
pvals(j) = spiegel_test(randn(300,1)); 
end 
nnz(pvals < 0.05) ./ numel(pvals) 

ich die Ergebnisse erhalten:

ans =  
    0.0505 

Ähnlich

nnz(pvals > 0.95) ./ numel(pvals) 

ich

ans = 
    0.0475 
Verwandte Themen