2017-06-06 1 views
3

J'utilise le test de Kolmogorov-Smirnov dans MATLAB pour déterminer la normalité de chaque colonne d'une matrice de données avant d'effectuer une régression linéaire généralisée. Un exemple de vecteur de données est:Kolmogorov-Smirnov test de normalité dans MATLAB - normalisation des données?

data = [8126,3163,9129,5399,8682,1126,1053,7805,2989,2758,3277,1152,6994,6833]; 

Le test s'exécute et me donne un résultat. Cependant, quand je trace la fonction de distribution cumulative empirique (cdf) (bleu) et la cdf normale standard (rouge) pour une comparaison visuelle, l'échelle d'un tel vecteur de données est telle que le graphique n'est pas utile:

le code utilisé pour tracer ce chiffre est:

[h,p,ksstat,cv] = kstest(data); 
[f,x_values] = ecdf(data); 
figure() 
F = plot(x_values,f); 
set(F,'LineWidth',2); 
hold on 
G = plot(x_values,normcdf(x_values,0,1),'r-'); 
set(G,'LineWidth',2); 
legend([F G],... 
    'Empirical CDF','Standard Normal CDF',... 
    'Location','SE'); 

est-ce que cela signifie le résultat de mon test n'est pas valide? Si oui, puis-je simplement normaliser les données, par ex.

dataN=(data-min(data))./(max(data)-min(data)); 

tout en maintenant la validité du test?

Merci pour votre temps,

Laura

+3

Vous tracez le CDF gaussien avec la moyenne nulle et l'écart-type '1'. Donc, pour des valeurs de données de l'ordre de milliers, le CDF est très approximativement 1. Vous devez probablement utiliser la moyenne et l'écart-type estimés à partir de vos données; ou normaliser les données et alors vous pouvez garder le CDF gaussien avec la moyenne zéro et l'écart-type de l'unité –

+0

Bien sûr! Merci pour votre conseil Luis - changer la moyenne et l'écart-type a corrigé le problème – Laura

+2

N'importe quand! Vous voudrez peut-être répondre vous-même (je ne suis pas sûr de la façon dont vous appliquez exactement la moyenne et le dev dev) et accepter la réponse pour que la question ne soit pas considérée comme sans réponse –

Répondre

3

Merci à Luis Mendo Je résolu ce problème. normcdf nécessite la moyenne et l'écart-type du vecteur de données comme entrées, ce que je n'avais pas changé à partir de l'exemple de code que je travaillais. Le code édité est:

[h,p,ksstat,cv] = kstest(data); 
[f,x_values] = ecdf(data); 
figure() 
F = plot(x_values,f); 
set(F,'LineWidth',2); 
hold on 
variableMean = mean(data); 
variableSD = std(data); 
G = plot(x_values,normcdf(x_values,variableMean,variableSD),'r-'); 
set(G,'LineWidth',2); 
legend([F G],... 
    'Empirical CDF','Standard Normal CDF',... 
    'Location','SE');