def principal(): # I. carregamos a matriz de dados # Filósofos: #dados = n.loadtxt('notas_filosofos.txt') # Compositores: #dados = n.loadtxt('notas_filosofos.txt') #covar, autovetores, autovalores, autovalores_prop, dados_finais = pca(dados) # print '\n\nautovetores', autovetores.T # print '\nMatriz de covariância:\n', n.around(covar, decimals=2) # print '\nMatriz de correlação de Pearson:\n', n.around(pearson(dados), decimals=2) # print '\nAutovalores:\n', n.around(autovalores_prop, decimals=2) # print '\nVariância dos Autovalores:\n', n.around(n.var(autovalores_prop), decimals=2) # print '\nSoma dos dois primeiros:\n', round(autovalores_prop[0] + autovalores_prop[1], ndigits=2) # print '\nDados finais:\n', n.around(dados_finais, decimals=2) #c1 = dados_finais[:,0] #c2 = dados_finais[:,1] #p.clf() #p.plot(c1, c2) #p.xlim((-4,4)) #p.ylim((-4,4)) #p.savefig('pca.eps') # for i in xrange(dados.shape[1]): # dados[:,i]=(dados[:,i]-dados[:,i].mean())/dados[:,i].std() # T, P, E = pp.PCA_nipals(dados) # princ = T[:,:2] # p.plot(princ[:,0], princ[:,1], color="black") # p.savefig('pca_outro.eps') # # Aleatórios: # #num_agentes = [10,15,20,25,30,35,40,45,50,100, 150, 200, 250, 300, 350, 400, 450, 500, 1000] num_agentes = [100] num_vars = 8 a = [] autovalores_todos = {} for i in num_agentes: autovalores_todos[i] = [] for j in xrange(1): # aqui eu jogo os valores sampleados #print '\n\ndados toscos\n\n', dados #print '\n\ndados monte carlo\n\n', montecarlo(10) #d = n.loadtxt('notas_filosofos.txt') #dados = n.array([[r.uniform(1,9) for x in range(num_vars)] for y in range(i)]) # ########3 # dados = n.array(montecarlo2(i)) # print 'quantidade de aleatorios: ', len(dados) # covar, autovetores, autovalores, autovalores_prop, dados_finais = pca(dados) # print '\n*** Teste %s para %s agentes ***\n' % (j, i) # print '\nMatriz de covariância:\n', n.around(covar, decimals=2) # print '\nMatriz de correlação de Pearson:\n', n.around(pearson(dados), decimals=2) # print '\nAutovalores:\n', n.around(autovalores_prop, decimals=2) # print '\nVariância dos Autovalores:\n', n.around(n.var(autovalores_prop), decimals=2) # print '\nSoma dos dois primeiros:\n', round(autovalores_prop[0] + autovalores_prop[1], ndigits=2) # c1 = dados_finais[:,0] # c2 = dados_finais[:,1] # PCA ALEATORIOS dados = n.array(montecarlo2(i)) for i in xrange(dados.shape[1]): dados[:, i] = (dados[:, i] - dados[:, i].mean()) / dados[:, i].std() T, P, E = pp.PCA_nipals(dados) princ = T[:, :2] p.plot(princ[:, 0], princ[:, 1], 'rx', label='Random values') # PCA FILOSOFOS dados_fi = n.loadtxt('notas_compositores.txt') for i in xrange(dados_fi.shape[1]): dados_fi[:, i] = (dados_fi[:, i] - dados_fi[:, i].mean()) / dados_fi[:, i].std() T, P, E = pp.PCA_nipals(dados_fi) princ = T[:, :2] p.plot(princ[:, 0], princ[:, 1], 'bo', label='Original scores') p.xlim((-4, 4)) p.ylim((-4, 4)) p.legend(loc='lower right') p.savefig('pca_final.eps')
colunas = [[x[i] for x in nn] for i in range(8)] correlacao = [ stats.pearsonr(n.array(col), n.array(coluna))[0] for col in colunas for coluna in colunas ] for i in range(8): m.append(correlacao[i * 8:i * 8 + 8]) # pearson == m print 'PEARSON' for linha in m: print[str(round(x, ndigits=2)) for x in linha] # cálculo PCA T, P, E = pca.PCA_nipals(nn) princ = T[:, :2] # cálculo dos autovalores % print 'AUTOVALORES', E * 100 # contribuições c1 = P[0] c2 = P[1] cc1 = c1 / sum(abs(c1)) * 100 cc2 = c2 / sum(abs(c2)) * 100 print 'CONTRIBUICOES' print 'C1', [abs(x) for x in cc1] print 'C2', [abs(x) for x in cc2] # oposições/inovação
autovals = n.zeros((nperturb, 8)) # agora para 8d princ_orig = princ_orig[:, :8] princ = princ[:, :8] for foobar in xrange(nperturb): dist = n.random.randint(-2, 3, copia_dados.shape) copia_dados += dist for i in xrange(copia_dados.shape[1]): copia_dados[:, i] = (copia_dados[:, i] - copia_dados[:, i].mean()) / copia_dados[:, i].std() # fazemos pca para dados considerando esses pontos aleatórios entre -2 e 2 # FIXME: substituir depois pca_nipals T, P, E = pca.PCA_nipals(copia_dados) autovals[foobar] = E[:8] princ = T[:, :8] for i in xrange(ncomp): for j in xrange(ncomp): distancias[i, j, foobar] = n.sum((princ_orig[i] - princ[j])**2)**.5 stds = n.zeros((ncomp, ncomp)) means = n.zeros((ncomp, ncomp)) main_stds = [] main_means = [] print 'dados', copia_dados for i in xrange(ncomp): for j in xrange(ncomp): stds[i, j] = distancias[i, j, :].std() means[i, j] = distancias[i, j, :].mean()