function [F,F095,F099,Pvalue] = ANOVA1(x,k); % [F,F0,Pvalue] = ANOVA1(x,k) % % ANOVA oneway % x : data matrix % k : soit k = 1 et x est une matrice de "size(n K)", avec K groupes % et n observations par groupe (ie chaque groupe dans une colonne) % soit k est un vecteur [n1 ... nK] et x est un vecteur, % les k(i) indiquent la repartition des observations dans les K groupes % (ie k(1) observations pour le premier groupe ... % k(length(k)) observations pour le Keme groupe) % F : F value % F0 : Fseuil pour alpha = 0.05 % Pvalue % % ATTENTION : Dans le cas de decomposition orthogonale de la variance, % ========= il faudrait utiliser "la variance intra" calculee avec % toutes les datas => MODIFICATION de la FONCTION de % facon a introduire "varintra" et "df2" % N = length(x(:)); [n K] = size(x); somx2 = sum(x(:).^2); if K==1 n = k; K = length(n); na = 1; nb = 0; for i=1:K if i>1 na = na + n(i-1); end nb = nb + n(i); Ti(i) = sum(x(na:nb)); end Tg = sum(Ti); somCinter = sum(Ti.^2./n) - Tg^2/N; somCintra = somx2 - sum(Ti.^2./n); else [n K] = size(x); Ti = sum(x); Tg = sum(Ti); somCinter = sum(Ti.^2/n) - Tg^2/N; somCintra = somx2 - sum(Ti.^2/n); end somCtotal = somx2 - Tg^2/N; % % somCintra = -999 si varintra est donnee % df2 = N-K ou df2 = df2 % df1 = K-1; df2 = N-K; varinter = somCinter / df1; varintra = somCintra / df2; vartotal = somCtotal / (N-1); F = varinter/varintra; F095 = qf(0.95,df1,df2); F099 = qf(0.99,df1,df2); Pvalue = 1-pf(F,df1,df2); clc; fprintf('\n\n'); fprintf('============================\n'); fprintf(' Analysis of Variance Table \n'); fprintf('===============================================================\n'); fprintf(' Source d.f. Sums of Squares Variances F\n'); fprintf('---------------------------------------------------------------\n'); fprintf(' Inter %2.0f %8.2f %8.2f %6.3f\n',df1,somCinter,varinter,F); fprintf(' Intra %2.0f %8.2f %8.2f\n',df2,somCintra,varintra ); fprintf(' Total %2.0f %8.2f %8.2f\n',N-1,somCtotal,vartotal); fprintf('====================================================\n'); fprintf(' F Fs_0.95 Fs_0.99 Pvalue\n'); fprintf('-----------------------------------\n'); fprintf(' %6.3f %6.3f %6.3f %4.7f\n',F,F095,F099,Pvalue); fprintf('===================================\n\n\n');