( Isso está relacionado à minha pergunta de programação no Stack Overflow : algoritmo gaussiano de curva de Bell (Python e / ou C #) .)
No Answers.com, encontrei este exemplo simples:
- Encontre a média aritmética (média) => Soma de todos os valores no conjunto, dividida pelo número de elementos no conjunto
- Encontre a soma dos quadrados de todos os valores no conjunto
- Divida a saída de (2) pelo número de elementos no conjunto
- Subtraia o quadrado da média (1) da saída de (3)
- Tire a raiz quadrada do resultado de (4)
Exemplo: conjunto A = {1,3,4,5,7}
- (1 + 3 + 4 + 5 + 7) / 5 = 4
- (1 * 1 + 3 * 3 + 4 * 4 + 5 * 5 + 7 * 7) = 1 + 9 + 16 + 25 + 49 = 100
- 100/5 = 20
- 20 - 4 * 4 = 20-16 = 4
- SQRT (4) = 2
(Isso vem de uma postagem no wiki.answers.com .)
Agora, considerando tudo isso, como ajustar os dados acima a uma curva de sino (como uma pontuação de crédito) variando de 200 a 800. Obviamente, o número 5 no conjunto acima seria 500. Mas então, qual é a fórmula para determinar o que 3 deve estar na mesma escala. Mesmo que o conjunto original Conjunto A = {1,3,4,5,7} não seja uma curva em sino, quero forçá-lo a uma curva em sino.
Imagine que são dezenas de 5 pessoas. No próximo mês, as pontuações podem mudar da seguinte forma: Set A2={1,2,4,5,9}
(um cara perde um ponto e o cara mais alto ganha mais dois pontos - os ricos ficam mais ricos e os pobres mais pobres). Então talvez um novo cara entre no set: set A3={1,2,4,5,8,9}
.
fonte
Respostas:
Uma faixa escalada , como 200 a 800 (para SATs, por exemplo ), é apenas uma alteração de unidades de medida . (Funciona exatamente como alterar as temperaturas em Fahrenheit e as em Celsius.)
O valor médio de 500 deve corresponder à média dos dados. O intervalo deve corresponder a cerca de 99,7% dos dados quando os dados seguem uma distribuição Normal ("Curva de Bell"). É garantido que inclua 8/9 dos dados ( Desigualdade de Chebyshev ).
Nesse caso, a fórmula 1-5 calcula o desvio padrão dos dados. Esta é simplesmente uma nova unidade de medida para os dados originais. Ele precisa corresponder a 100 unidades na nova escala. Portanto, para converter um valor original em um valor escalado,
Subtraia a média.
Divida pelo desvio padrão.
Multiplique por 100.
Adicione 500.
Se o resultado estiver além do intervalo você pode usá-lo como está ou "fixá-lo" ao intervalo, arredondando até 200, até 800.[ 200 , 800 ]
No exemplo , usando dados , a média é e o SD é . Portanto, ao redimensionar, se torna . Todo o conjunto de dados redimensionado, calculado de maneira semelhante, é .{ 1 , 3 , 4 , 5 , 7 } 4 2 1 1 ( 1 - 4 ) / 2 ∗ 100 + 500 = 350 {350,450,500,550,650}
Quando os dados originais são distribuídos de uma maneira distintamente não normal, você precisa de outra abordagem . Você não calcula mais uma média ou SD. Em vez disso, colocar todas as pontuações em ordem, a partir de 1 (menor) até º (maior). Estas são as suas fileiras . Converta qualquer classificação em sua porcentagem . (No exemplo, e os dados já estão na ordem de classificação . Portanto, suas porcentagens são , geralmente escrito de forma equivalente a etc.). Correspondente a qualquer porcentagem (entre e , necessariamente) é umn i (i−1/2)/n n=5 i=1,2,3,4,5 1/10,3/10,5/10,7/10,9/10 10%,30% 0 1 quantil normal . É calculado com a função quantil normal , que está intimamente relacionada à função de erro . ( Aproximações numéricas simples são fáceis de codificar.) Seus valores, que normalmente estarão entre -3 e 3, precisam ser redimensionados (como antes) para o intervalo . Faça isso multiplicando primeiro o quantil normal por 100 e adicionando 500.[200,800]
A função quantil normal está disponível em muitas plataformas de computação, incluindo planilhas ( normas do Excel , por exemplo). Por exemplo, os quantis normais (ou "pontuações normais") para os dados são .{ 372 , 448 , 500 , 552 , 628 }{1,3,4,5,7} {372,448,500,552,628}
Essa abordagem de " pontuação normal " sempre fornecerá pontuações entre 200 e 800 quando você tiver 370 ou menos valores. Quando você tem 1111 ou menos valores, todos, exceto os mais altos e os mais baixos, terão pontuações entre 200 e 800.
fonte
Você pode tentar essa abordagem - normalize seu conjunto de dados para variar entre os valores -1 e +1, assim: Isso converterá todos os valores do seu conjunto de dados em um valor entre -1 e +1, com os valores máximo e mínimo reais sendo definidos como +1 e -1, respectivamente, e redefinirá esses valores +1 e -1 para +0,9999 e -0,9999 (necessário para os cálculos a seguir).
Em seguida, aplique a Transformação Fisher a cada um dos valores normalizados acima para "forçá-la" a se adaptar aproximadamente a uma distribuição normal e, em seguida, "des-normalizar" cada um desses valores da Transformação Fisher para variar entre 200 e 800, assim: O valor máximo da Transformação Fisher será definido exatamente como 800, o valor mínimo da Transformação Fisher será definido exatamente a 200, e todos os outros valores estarão entre esses dois extremos, de acordo com uma distribuição normal aproximada.
Fazendo referência à sua pergunta original sobre SO e à questão da escalabilidade, a vantagem dessa abordagem é que, desde que qualquer novo ponto de dados não seja ele próprio um novo máximo ou mínimo para o conjunto de dados como um todo, você poderá aplicar os cálculos acima ao novo ponto de dados obter sua pontuação entre 200 e 800 sem afetar nenhuma das pontuações existentes do conjunto de dados original. Se um novo ponto de dados for um novo máximo ou mínimo, você precisará recalcular as pontuações para todo o conjunto de dados com esse novo valor máximo ou mínimo "normalizador".
fonte