O Ibope e o problema de amostragem
Autor: Pedro | Publicado: 2012-10-18T17:47:00-03:00

O Ibope e o problema de amostragem: (crossposted Zeletron)


Ontem li sobre a pesquisa do Ibope que mostra Fernando Haddad na frente de José Serra por 49×33 com margem de erro de 3%. Eu pessoalmente espero que Haddad perca, mas isto não vem ao caso agora, queria mostrar como são feitas as pesquisas e como são feitos os erros (propositais ou não).
Se você 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 vê o erro foi enorme.
Como se calcula a precisão da amostragem de uma pesquisa de opinião?
A grosso modo, sem refinar muito o modelo pode-se dizer que para uma amostragem aleatória de n indivíduos de uma população grande a margem de error (com um intervalo de confiança de 99%) é:Esta fórmula mostra que a taxa de erro converte assintóticamente para 0 e que a partir de um certo número (1000 por exemplo, não adianta aumentar o n que o erro não 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 há problemas. E o Zeletron vai mostrar onde estão estes problemas.
O programa abaixo em Python mostra para você incréu como funciona.


#!/usr/bin/env python
import urllib2
import random
import math
&nbsp;
random.seed()
group1 = ['a','A','e','E','i','I','o','O','f','l','r']
AmostragemHonesta = False
&nbsp;
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])
&nbsp;
n_es = [i for i in genesis if i in group1]
n_as = [i for i in genesis if i not in group1]
&nbsp;
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]
&nbsp;
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))
&nbsp;
num_gen = float(len(genesis))
num_sample = float(len(rndGenesis))
&nbsp;
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 não é aleatória? Bom aí, simplesmente a coisa não funciona bem. Vamos ver?
Basta trocar no programa acima a variável 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? Fácil. Introduzindo no método de amostragem um viés 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 população? Como fazer um erro?
Se um determinado candidato tem um público preferencial de mais baixo nível aquisitivo você privilegia este candidato amostrando em pontos de fluxo (em SP na praça da Sé). Se amostrar em domicílio também pois o acesso a condomínios fechados é mais restrito que a casas de baixa renda.
Vamos aguardar a eleição, mas agora você pode entender melhor a razão do erro gigante de alguns institutos de pesquisa. Chamam de margem de erro, mas algumas vezes pode ser margem de lucro…