o problema de amostragem: (crossposted Zeletron)Ontem li sobre a pesquisa do Ibope que mostra Fernando Haddad na frente de Jose Serra por 4933 com margem de erro de 3%. Eu pessoalmente espero que Haddad perca, mas isto nao vem ao caso agora, queria mostrar como sao feitas as pesquisas e como sao feitos os erros (propositais ou nao).Se voce quiser ler o texto do Reinaldo Azevedo de hoje que compila os erros do Ibope no primeiro turno em todo o Brasil, em alguns casos muito fora da margem de erro. Reproduzo abaixo o caso do Amazonas.Como se ve o erro foi enorme.Como se calcula a precisao da amostragem de uma pesquisa de opiniao?A grosso modo, sem refinar muito o modelo pode-se dizer que para uma amostragem aleatoria de n individuos de uma populacao grande a margem de error (com um intervalo de confianca de 99%) e:Esta formula mostra que a taxa de erro converte assintoticamente para 0 e que a partir de um certo numero (1000 por exemplo, nao adianta aumentar o n que o erro nao muda muito).Isto quer dizer que feitas 100 pesquisas somente uma poderia ficar fora da margem de erro. Como no primeiro turno erraram a maior parte das pesquisas, isto quer dizer que ha problemas. E o Zeletron vai mostrar onde estao estes problemas.O programa abaixo em Python mostra para voce increu como funciona.#!/usr/bin/env pythonimport urllib2import randomimport math random.seed()group1 = ['a','A','e','E','i','I','o','O','f','l','r']AmostragemHonesta = False genesis = [i for i in urllib2.urlopen('http://pastebin.com/raw.php?i=uuAYXcjm').read()]genesis.sort()rndGenesis = []if AmostragemHonesta: for i in xrange(2000): rndGenesis.append(random.choice(genesis))else: for i in xrange(2000): rndGenesis.append(genesis[24*i+7000]) n_es = [i for i in genesis if i in group1]n_as = [i for i in genesis if i not in group1] n_r_es = [i for i in rndGenesis if i in group1]n_r_as = [i for i in rndGenesis if i not in group1] num_as = float(len(n_as))num_es = float(len(n_es))num_r_as = float(len(n_r_as))num_r_es = float(len(n_r_es)) num_gen = float(len(genesis))num_sample = float(len(rndGenesis)) print "Real: %.2f %.2f"%(num_as/num_gen,num_es/num_gen)print "Amostra: %.2f %.2f"%(num_r_as/num_sample,num_r_es/num_sample)print "Margem de Erro: %.2f"%(1.29/math.sqrt(num_sample))Resultado: Real: 0.61 0.39 Amostra: 0.59 0.41 Margem de Erro: 0.03Mas o que acontece se a amostra nao e aleatoria? Bom ai, simplesmente a coisa nao funciona bem. Vamos ver?Basta trocar no programa acima a variavel AmostragemHonesta de True para False.Resultado:Real: 0.61 0.39 Amostra: 0.46 0.54 Margem de Erro: 0.03Mas como um instituto de pesquisa pode amostrar errado? Facil. Introduzindo no metodo de amostragem um vies que privilegie determinado lado. No nosso exemplo amostrando mais para o final do array gera uma desvantagem para o um dos lados.Mas e numa populacao? Como fazer um erro?Se um determinado candidato tem um publico preferencial de mais baixo nivel aquisitivo voce privilegia este candidato amostrando em pontos de fluxo (em SP na praca da Se). Se amostrar em domicilio tambem pois o acesso a condominios fechados e mais restrito que a casas de baixa renda.Vamos aguardar a eleicao, mas agora voce pode entender melhor a razao do erro gigante de alguns institutos de pesquisa. Chamam de margem de erro, mas algumas vezes pode ser margem de lucro...