# Analiza odpowiedniosci wg ksiazki Farawaya "Extending ...": # E jest macierza residuow Pearsonowskich utworzonych z macierzy # kontyngencji N. Wykorzystujemy rozklad svd: E = U %*% diag(d) %*% t(V). # i "wciagamy" wartosci szczegolne do U i V: U=U%*%sqrt(diag(d); V=V%*%sqrt(diag(d)). # Teraz mamy E[i,j] = t(U[i,]) %*% V[,j], czyli residua sa iloczynami skalarnymi # punktow odpowiadajacych wartosciom cechy "hair" i wartosciom cechy "eye". # Rozwiniecie svd urywamy po dwoch dominujacych skladnikach, zeby narysowac # wartosci obu cech na wspolnej plaszczyznie. Nastawiamy jednakowe skale na osiach, zeby # wspolwystepowanie wartosci dwoch cech bylo proporcjonalne do odleglosci miedzy nimi. library(MASS); #N=caith #N=read.table("haireye.txt") # dane z ksiazki Farawaya N=read.table("COOP.DAT") n=sum(N) P = N/n; PP = apply(P,1,sum) %*% t(apply(P,2,sum)) E = sqrt(n)*(P-PP)/sqrt(PP); A = svd(E) # E przydaje sie do oblicz statyst chi-kwadrat: statChi2=sum(E^2), # chociaz latwiej wykonac: print(chisq.test(N)) # Jesli mamy istotna zaleznosc, to warto obejrzec E, zeby znalezc # najbardziej zalezne wartosci cech. Analiza odpowiedniosci tez temu sluzy. print(round(E,1)) X=rbind(A$u,A$v); X=t(t(X)*sqrt(A$d)) # szybsze od X = X %*% diag(sqrt(A$d)) X=scale(X,scale=F) # centrowanie wspolrzednych par(mfrow=c(1,2), pty="s") limes=1.03*max(abs(X[,1:2])) # przyda sie do skalowania na obrazku rn=rownames(N); cn=colnames(N); nR=length(rn); nC=length(cn) plot(X[,1:2],type="n",xlim=c(-limes,limes),ylim=c(-limes,limes), xlab="", ylab="",main="Corresp Anal in Faraway's book") text(X[,1:2],c(rn,cn),col=c(rep(1,nR),rep(2,nC))) points(0,0,pch=3,cex=3) # analiza odpowiedniosci wg ksiazki i pakietu MASS corresp(N) biplot(corresp(N, nf = 2),main="Corresp Anal in MASS")