domingo, 13 de maio de 2012

Tudo na linha....

Quando efectuamos experiências estatísticas podemos ter situações em que é o mesmo sujeito que é testado em diferentes situações ou não. Para cada uma das situações existem testes apropriados. No caso do SPSS cada linha de uma tabela corresponde aos diferentes resultados de um mesmo sujeito às diferentes condições. Isso implica que se tivermos sujeitos diferentes a testar as diferentes condições temos que colocar os resultados numa (longa ) coluna, acrescentado ainda uma segunda coluna de agrupamento. Nas experiências que fazemos, o que determina se estamos a fazer testes emparelhados ou não, é a natureza da população inicial em cada execução. Por exemplo, se estivermos a comparar o efeito de usar dois tipos diferentes de operadores de cruzamento e efectuarmos 30 execuções de cada condição, estaremos a efectuar testes emparelhados se em cada uma das 30 execuções as duas alternativas forem iniciadas com a mesma população. Acontece que, tipicamente, guardamos os resultados das diferentes execuções como se es testes fossem emparelhados. No caso de não serem temos a extenuante missão de passar tudo para uma coluna e introduzir a variável de agrupamento. Extenuante, a menos que tenhamos um programa que automatiza este processo.
def transform_file_spss(file_in, file_out):
    """From a file with matched values to a one without."""
    f_in = open(file_in)
    header_in = f_in.readline()
    body_in = f_in.readlines()
    f_in.close()
    
    split_header_in = header_in.split()
    number_col = len(split_header_in)
    number_lin = len(body_in)
    
    f_out = open(file_out,'w')
    header_out = 'Group\tValue\n'
    f_out.write(header_out)
    aux = [line[:-1].split() for line in body_in]
    # rearranje data
    body_out = []
    for i in range(number_col):
        # obtain column
        col = []
        for j in range(number_lin):
            col.append(aux[j][i])
        body_out.append(col)
    # write data
    for i in range(number_col):
        for j in range(number_lin):
            value = body_out[i][j]
            line_out = '%s\t%s\n' % (i,value)
            f_out.write(line_out)
    f_out.close() 
Nem mais!

Sem comentários:

Enviar um comentário