A variância é uma medida estatística que quantifica o grau de dispersão ou variação dos dados em relação à média, indicando o nível de heterogeneidade no conjunto. Se os dados estiverem muito próximos à média, a variância será baixa, se estiverem espalhados, será alta. Em termos simples, a variância nos diz o quanto os valores de um conjunto de dados estão espalhados.
Propriedades da Variância:
- Sempre positiva: Como os desvios são elevados ao quadrado, a variância não pode ser negativa.
- Unidade ao quadrado: A unidade da variância é o quadrado da unidade dos dados. Por exemplo, se os dados estão em metros, a variância será $large m^{2}$.
- Dependência do desvio da média: Um conjunto de dados mais espalhado terá maior variância.
Dados NÃO agrupados
Fórmulas:
$$Amostras: \large s^2= \frac{\sum_{i=1}^{n}(x_{i}- \bar{x})^2}{n-1}$$
$$Populações: \large \sigma^2= \frac{\sum_{i=1}^{n}(x_{i}- \mu)^2}{N}$$
Sendo:
- $s^{2}:$ variância da amostra
- $\sigma^{2}:$ variância da população
- $x_{i}:$ cada dado da série de dados
- $\bar{x}:$ média aritmética da amostra
- $\mu:$ média aritmética da população
- $n – 1:$ total de elementos da amostra (Correção de Bessel)
- $N:$ total de elementos da população
Python:
''' Amostras '''
s2_a = sum(list(map(lambda x: (x - m)**2 , values))) / (len(values) - 1)
''' Populações '''
s2_p = sum(list(map(lambda x: (x - m)**2 , values))) / len(values)
Julia:
""" Amostras """
s2_a = sum((valor .- m).^2) / (n - 1)
""" Populações """
s2_p = sum((valor .- m).^2) / n
Libs:
Exemplos
Determinar a variância do conjunto de dados Z = {1, 18, 27, 35, 43, 52, 69}, considerando-o como sendo uma população e como sendo uma amostra de uma população.
Python
lista = [1, 18, 27, 35, 43, 52, 69]
# encontrando a media
m = sum(lista) / len(lista)
# Calculando a variância amostral
s2_a = sum(list(map(lambda x: (x - m)**2, lista))) / (len(lista) - 1)
# Calculando a variância populacional
s2_p = sum(list(map(lambda x: (x - m)**2, lista))) / len(lista)
print(f'Variância amostral: {s2_a}')
print(f'Variância populacional: {s2_p}')
''' Usando o Numpy '''
# Calculando a variância amostral
s2_a = np.var(lista, ddof=1)
# Calculando a variância populacional
s2_p = np.var(lista)
print(f'Variância amostral: {s2_a}')
print(f'Variância populacional: {s2_p}')
Julia
valor = [1, 18, 27, 35, 43, 52, 69]
# encontrando o número de elementos do conjunto de dados e a média
n = length(valor)
m = sum(valor) / length(valor)
# Calculando a variância amostral
s2_a = sum((valor .- m).^2) / (n - 1)
# Calculando a variância populacional
s2_p = sum((valor .- m).^2) / n
Dados agrupados SEM intervalos de classe
Fórmulas:
$$Amostras: \large s^2= \frac{\sum_{i=1}^{n}(x_{i}- \bar{x})^2 \cdot f_{i}}{n-1}$$
$$Populações: \large \sigma^2= \frac{\sum_{i=1}^{n}(x_{i}- \mu)^2 \cdot f_{i}}{N}$$
Sendo:
- $s^{2}:$ variância da amostra
- $\sigma^{2}:$ variância da população
- $x_{i}:$ cada dado da série de dados
- $\bar{x}:$ média aritmética da amostra
- $\mu:$ média aritmética da população
- $f_{i}:$ frequência simples da classe do dado da série
- $n – 1:$ total de elementos da amostra (Correção de Bessel)
- $N:$ total de elementos da população
Python :
''' Amostras '''
s2_a = sum(list(map(lambda x, f: ((x - m)**2) * f, val, freq))) / (sum(freq) - 1)
''' Populações '''
s2_p = sum(list(map(lambda x, f: ((x - m)**2) * f, val, freq))) / sum(freq)
Julia:
""" Amostras """
s2_a = sum(((pm .- m).^2) .*freq) / (n - 1)
""" Populações """
s2_p = sum(((pm .- m).^2) .*freq) / n
Exemplos
A tabela a seguir se refere à distribuição de frequências das notas dos alunos da turma A da disciplina de Estatística e Probabilidade, já trabalhada anteriormente.
Notas | Frequências |
---|---|
3 | 1 |
4 | 4 |
5 | 6 |
6 | 9 |
7 | 10 |
8 | 9 |
9 | 5 |
10 | 6 |
Considerando esses dados como uma amostra e como uma população, calcule a variância.
Python
val = [3, 4, 5, 6, 7, 8, 9, 10]
freq = [1, 4, 6, 9, 10, 9, 5, 6]
# Encontrando a media
m = sum(list(map(lambda x, f: (x * f), val, freq))) / sum(freq)
# Calculando a variância amostral
s2_a = sum(list(map(lambda x, f: ((x - m)**2) * f, val, freq))) / (sum(freq)-1)
# Calculando a variância populacional
s2_p = sum(list(map(lambda x, f: ((x - m)**2) * f, val, freq))) / sum(freq)
print(f'Variância amostral: {s2_a}')
print(f'Variância populacional: {s2_p}')
''' Usando o Numpy '''
dicio = {3: 1, 4: 4, 5: 6, 6: 9, 7: 10, 8: 9, 9: 5, 10: 6}
# Convertendo os valores do dicionário em uma lista com todos os valores
lista = [k for k, v in dicio.items() for _ in range(v)]
# Calculando a variância amostral
s2_a = np.var(lista, ddof=1)
# Calculando a variância populacional
s2_p = np.var(lista)
print(f'Variância amostral: {s2_a}')
print(f'Variância populacional: {s2_p}')
Julia
val = [3, 4, 5, 6, 7, 8, 9, 10]
freq = [1, 4, 6, 9, 10, 9, 5, 6]
# Encontrando o número de elementos do conjunto de dados
n = sum(freq)
# Encontrando a media
m = sum(val .* freq) / sum(freq)
# Calculando a variância amostral
s2_a = sum(((val .- m).^2) .*freq) / (n - 1)
# Calculando a variância populacional
s2_p = sum(((val .- m).^2) .*freq) / n
Dados agrupados COM intervalos de classe
Exemplos
A tabela a seguir mostra o resultado da pesagem de 70 pessoas adultas que utilizaram em um mesmo dia a balança de uma farmácia.
Peso (em Kg) | Quantidade de pessoas |
---|---|
59.0 – 61.5 | 3 |
61.5 – 64.0 | 5 |
64.0 – 66.5 | 5 |
66.5 – 69.0 | 7 |
69.0 – 71.5 | 9 |
71.5 – 74.0 | 11 |
74.0 – 76.5 | 8 |
76.5 – 79.0 | 7 |
79.0 – 81.5 | 5 |
81.5 – 84.0 | 6 |
84.0 – 86.5 | 4 |
Determinar a variância e realizar os cálculos considerando a distribuição de frequências como uma amostra e como uma população.
Python
dicio = {'59.0 - 61.5':3,'61.5 - 64.0':5,'64.0 - 66.5':5,'66.5 - 69.0':7,
'69.0 - 71.5':9,'71.5 - 74.0':11,'74.0 - 76.5':8,'76.5 - 79.0':7,
'79.0 - 81.5':5,'81.5 - 84.0':6,'84.0 - 86.5':4}
# Para calcular a variância de um conjunto de dados com intervalos de classe, primeiro é necessário encontrar o ponto médio de cada intervalo de classe.
pm = list(map(lambda x: (float(x.split(' - ')[0]) + float(x.split(' - ')[1])) / 2, dicio.keys()))
# lista de frequências
freq = list(dicio.values())
# Encontrando a media
m = sum(list(map(lambda x, f: (x * f), pm, freq))) / sum(freq)
# Calculando a variância amostral
s2_a = sum(list(map(lambda x, f: ((x - m)**2) * f, pm, freq))) / (sum(freq)-1)
# Calculando a variância populacional
s2_p = sum(list(map(lambda x, f: ((x - m)**2) * f, pm, freq))) / sum(freq)
print(f'Variância amostral: {s2_a}')
print(f'Variância populacional: {s2_p}')
Julia
dicio = Dict("59.0 - 61.5"=>3,"61.5 - 64.0"=>5,"64.0 - 66.5"=>5,"66.5 - 69.0"=>7,"69.0 - 71.5"=>9,"71.5 - 74.0"=>11, "74.0 - 76.5"=>8,"76.5 - 79.0"=>7,"79.0 - 81.5"=>5,"81.5 - 84.0"=>6,"84.0 - 86.5"=>4)
# Para calcular a variância de um conjunto de dados com intervalos de classe, primeiro é necessário encontrar o ponto médio de cada intervalo de classe.
# Ponto médio de cada intervalo (mantendo a correspondência com a ordem das frequências)
pm_freq_pairs = [(parse(Float64, split(interval, " - ")[1]) + parse(Float64, split(interval, " - ")[2])) / 2 => freq for (interval, freq) in dicio]
# Vetor de valores com o ponto médio dos intervalos de classe
pm_freq_pairs = [(parse(Float64, split(interval, " - ")[1]) + parse(Float64, split(interval, " - ")[2])) / 2 => freq for (interval, freq) in dicio]
# vetor com os pontos médios
pm = [pair[1] for pair in pm_freq_pairs]
# vetor com as frequências
freq = [pair[2] for pair in pm_freq_pairs]
n = sum(freq)
m = sum(pm .* freq) / sum(freq)
s2_a = sum(((pm .- m).^2) .*freq) / (n - 1)
s2_p = sum(((pm .- m).^2) .*freq) / n
Deixe um comentário