2009-12-10 25 views
15

J'ai quelques points de données et leur point moyen. J'ai besoin de trouver si ces points de données (avec cette moyenne) suivent une distribution gaussienne. Y a-t-il une fonction dans MATLAB qui peut faire ce genre de test? Ou dois-je écrire moi-même un test?Test si une distribution de données suit une distribution gaussienne dans MATLAB

J'ai essayé d'examiner différentes fonctions statistiques fournies par MATLAB. Je suis très nouveau à MATLAB donc j'ai peut-être oublié la bonne fonction.

acclamations

Répondre

14

Cocher cette documentation page sur tous available hypothesis tests .

De ceux-ci, pour votre but, vous pouvez utiliser:

... entre autres

Vous pouvez également utiliser des tests visuels comme:

+0

Je n'aime pas que ceux-ci sont de la boîte à outils Mathwork $ $ tatistic $; on pourrait facilement hacker ensemble le p. ex. Jarque-Bera sans cela, mais pour le reste, vous devez importer des fichiers de 'octave'.L'autre problème avec un firehose de tests statistiques est qu'il n'y a pas d'indication de la puissance relative de chacun d'entre eux (vrai, cela dépend de l'hypothèse alternative). – shabbychef

+0

oui, les liens wikipedia seraient plus agréables. ils sont plus précis et plus rapides à lire. –

5

Pour les tests en général, regarder le test de Kolmogorov-Smirnov, également dans la boîte à outils Statistiques, comme kstest et la version à deux échantillons: kstest2. Vous lui donnez vos données empiriques (et les données d'une fonction possible, comme le gaussien, etc ...) puis il teste la probabilité que votre échantillon ait été tiré de la distribution normale (ou celle que vous avez fournie pour l'échantillon à deux Version) ... Le nicety est que ça va fonctionner pour toutes les distributions possibles ...

5

J'aime le test de Spiegelhalter (DJ Spiegelhalter, 'tests diagnostiques de la forme, distributive' 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. 

à chaque fois que les tests statistiques de piratage, toujours les tester sous le null! voici un exemple simple:

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

-je obtenir les résultats:

ans =  
    0.0505 

De même

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

Je reçois

ans = 
    0.0475