function MSA = KMO(X)
% Função que tem o objetivo de calcular a Estatística
% de Bartlett para o teste de esfericidade e a Medida
% de Adequacidade da Amostra de Kaiser-Meyer-Olkin. O
% argumento de entrada é: X = matriz de dados(amostra
% multivariada).
R=corrcoef(X);
[n,p]=size(X);
% Cálculo da estatística de Bartlett
Q2=-((n-1)-(2*p+5)/6)*log(det(R));
GL=p*(p-1)/2;
pvalor=(1-chi2cdf(Q2,GL));
disp('Teste de Esfericidade -Estatística de Bartlett');
disp(' ');
Q2;
disp(' ');
pvalor;
disp(' ');
% Cálculo da medida KMO
[p,p]=size(R);
for i=1:p-1
for j=i+1:p
l=0;
for k=1:p
if (i~=k)&&(j~=k)
l=l+1;
w(l)=k;
else
m=1;
end
end
Y1=X(:,i);
X1=X(:,w);
B1=pinv(X1'*X1)*(X1'*Y1);
e1=Y1-X1*B1;
Y2=X(:,j);
B2=pinv(X1'*X1)*(X1'*Y2);
e2=Y2-X1*B2;
r(i,j)=sum(e1.*e2)/sqrt((sum(e2.^2))*(sum(e1.^2)));
r(j,i)=r(i,j);
r(i,i)=0;
clear w
end
end
q=r;
r2=R.^2;
q2=q.^2;
sr2=0;
sq2=0;
for i=1:p
for j=1:p
if i==j
k=1;
else
sr2=sr2+r2(i,j);
sq2=sq2+q2(i,j);
end
end
end
MSA=sr2/(sr2+sq2);
disp('Medida de adequacidade da amostra de Kaiser-Meyer-Olkin')
disp(' ')
MSA
disp(' ')