Bir sayı kümesini bir gauss çan eğrisine zorlama


9

( Bu, Stack Overflow : Bell Curve Gaussian Algorithm (Python ve / veya C #) ile ilgili programlama sorumla ilgilidir .)

Answers.com'da şu basit örneği buldum:

  1. Kümedeki tüm değerlerin toplamının, kümedeki öğelerin sayısına bölünmesiyle aritmetik ortalama (ortalama) =>
  2. Kümedeki tüm değerlerin karelerinin toplamını bulun
  3. (2) 'nin çıktısını kümedeki elemanların sayısına bölün
  4. Ortalama (1) karesini (3) çıktısından çıkarın
  5. Sonucun karekökünü al (4)

Örnek: Set A = {1,3,4,5,7}

  1. (1 + 3 + 4 + 5 + 7) / 5 = 4
  2. (1 * 1 + 3 * 3 + 4 * 4 + 5 * 5 + 7 * 7) = 1 + 9 + 16 + 25 + 49 = 100
  3. 100/5 = 20
  4. 20 - 4 * 4 = 20-16 = 4
  5. KAREKÖK (4) = 2

(Bu, wiki.answers.com'daki bir gönderiden gelir .)

Şimdi tüm bunlar göz önüne alındığında, yukarıdaki verileri 200 ila 800 arasında değişen bir çan eğrisine (kredi puanı gibi) nasıl sığdırabilirim. Açıkça, yukarıdaki sette 5 sayısı 500 olacaktır. 3 aynı ölçekte olmalıdır. Orijinal Set A = {1,3,4,5,7} kümesi çan eğrisi olmasa da, çan eğrisine zorlamak istiyorum.

Bunların 5 kişi olduğunu düşünün. Gelecek ay puanlar şu şekilde değişebilir: Set A2={1,2,4,5,9}(bir adam bir puan kaybeder ve en iyi adam iki puan daha kazanır - zenginler zenginleşir ve yoksullar zayıflar). Sonra belki yeni bir adam sete girer: Set A3={1,2,4,5,8,9}.


2
Ayarladığınız zaman zaman değişirse, aynı çan eğrisine uyması imkansızdır. kümesine sahip olduğunuzu varsayalım , bu nedenle 4, 800 olmalıdır, ancak yeni bir gözlem 5 gelirse, 800 olmalıdır.A={1,2,3,4}
mpiktas

1
CrossValidated'a hoş geldiniz, NealWalters. Bir istatistikçiye "Bunu nasıl yaparım" sorusuna verilen ortak bir yanıtın "Bunu neden yapmak istiyorsunuz?"
onestop

@onestop - önceki yazıya olan bağlantımı gör. Okulda, "eğri üzerinde" not alan öğretmenleri duyduğumu hatırlıyorum. Bu yüzden bir testte hangi puanı alırsanız alın, her sınıfa yalnızca belirli bir oran verilir. Kredi puanlarının nasıl çalıştığı hakkında hiçbir fikrim yok, ancak simüle ettiğim şeye çok benziyor. İnsanlara örneğin kredi ödediklerinde puan veriyorum. Ancak bazı insanlar düzinelerce kredi ödeyecek. Vahşi puanlarımı bir dizi normalleştirilmiş noktaya yoğunlaştırmak istiyorum.
NealWalters

Son yorumunuzu okurken, yaklaşımın en iyi olduğunu merak ediyorum: örneğin, ödenen her kredi için 1 puan, diğer şeyler için diğer puanlar verin, sonra sonunda muazzam puanı evcilleştirmeye çalışın veya belki de her bileşenle daha anlamlı bir şey yapın son puanı oluşturur? Örneğin, ödenen krediler için puan verirseniz, Ödenen Krediler (LPO) puanlarınızı log (1 + NumberOfLoansPaidOff) olarak hesaplayabilirsiniz. Yani sıfır kredisi olan biri 0 LPO, 3 kredisi olan biri 1,1 LPO alırken, 100 kredisi olan biri 4.6 LPO alır. 5'te Cap LPO
Wayne

Yanıtlar:


13

200 ila 800 gibi ölçeklendirilmiş bir aralık ( örneğin SAT'ler için ), yalnızca ölçü birimlerinin değişimidir . (Tam olarak Fahrenhayt'taki sıcaklıkları santigrat sıcaklıklarına değiştirmek gibi çalışır.)

500 orta değerinin, verilerin ortalamasına karşılık gelmesi amaçlanmıştır. Aralık, veriler bir Normal dağılımı ("Çan eğrisi") takip ettiğinde verilerin yaklaşık% 99,7'sine karşılık gelmek üzere tasarlanmıştır . Bir garanti veri (8/9 dahil Chebyshev eşitsizliği ).

Bu durumda, formül 1-5 verilerin standart sapmasını hesaplar. Bu sadece orijinal veriler için yeni bir ölçü birimidir. Yeni ölçekte 100 birime karşılık gelmesi gerekiyor. Bu nedenle, orijinal bir değeri ölçeklendirilmiş değere dönüştürmek için,

  • Ortalamayı çıkarın.

  • Standart sapmaya bölün.

  • 100 ile çarpın.

  • 500 ekleyin.

Sonuç aralığın dışındaysa [200,800] olduğu gibi kullanabilir veya 200'e, 800'e kadar yuvarlayarak aralığa "kenetleyebilirsiniz".

Örnekte , verileri kullanma{1,3,4,5,7}, ortalama 4 ve SD 2. Bu nedenle, yeniden ölçekleme üzerine,1 olur (14)/2100+500=350. Benzer şekilde hesaplanan yeniden ölçeklenmiş veri kümesinin tamamı{350,450,500,550,650}.

Orijinal veriler açıkça normal olmayan bir şekilde dağıtıldığında, başka bir yaklaşıma ihtiyacınız vardır . Artık ortalama veya SD hesaplamıyorsunuz. Bunun yerine, tüm puanları 1. (en küçük) ilenth (en büyük). Bunlar rütbeleri . Herhangi bir rütbeyi dönüştürionun içine yüzdesi (i1/2)/n. (Örnekte,n=5 ve veriler zaten sıralama düzeninde i=1,2,3,4,5. Dolayısıyla bunların yüzdeleri1/10,3/10,5/10,7/10,9/10, genellikle 10%,30%Herhangi bir yüzdeye karşılık gelen (arasında 0 ve 1, zorunlu olarak) normal bir kantildir . Hata fonksiyonu ile yakından ilişkili olan normal kuantil fonksiyon ile hesaplanır . (Basit sayısal yaklaşımlar kodlama açısından basittir.) Tipik olarak -3 ile 3 arasında olacak olan değerlerin (daha önce olduğu gibi) aralığa yeniden ölçeklenmesi gerekir[200,800]. Bunu önce normal kantili 100 ile çarpıp 500 ekleyerek yapın.

Normal kantil işlevi, e-tablolar ( örneğin Excel'in normsinv'i ) dahil olmak üzere birçok bilgi işlem platformunda kullanılabilir . Örneğin , veriler için normal miktarlar (veya "normal puanlar"){1,3,4,5,7} Hangi {372,448,500,552,628}.

Bu " normal puanlama " yaklaşımı, 370 veya daha az değeriniz olduğunda her zaman 200 ile 800 arasında puan verir. 1111 veya daha az değeriniz olduğunda, en yüksek ve en düşük değerler hariç tümü 200 ile 800 arasında puanlara sahip olacaktır.


+1, cevabımı sildim, çünkü senin yolun iyiydi ve benim eskimiş :)
mpiktas

1-5'te 5'i nereden alıyorsunuz? Ortalama 4'tür. 1-4 olmalı mı? Bugün Python ile test ediyorum, tekrar teşekkürler.
NealWalters

@NealWalters Üzgünüm, bu bir parmak kaymasıydı. Şimdi düzelttim, böylece (1-4) / 2 * 100 + 500 okuyor.
whuber

4

Bu yaklaşımı deneyebilirsiniz - veri kümenizi -1 ve +1 değerleri arasında olacak şekilde normalleştirin:

(individual_valuemin_of_all_valuesmax_of_all_valuesmin_of-all_values0.5)2.
Bu, veri kümenizdeki her değeri -1 ve +1 arasında bir değere dönüştürür; gerçek maksimum ve minimum değerler sırasıyla +1 ve -1 olarak ayarlanır ve ardından bu +1 ve -1 değerlerini +0.9999 olacak şekilde sıfırlar ve -0.9999 (aşağıdaki hesaplamalar için gereklidir.)

Daha sonra, normal bir dağılıma yaklaşık olarak uymaya "zorlamak" için yukarıdaki normalize edilmiş değerlerin her birine Fisher Dönüşümünü uygulayın ve sonra bu Fisher Transform değerlerinin her birini 200 ile 800 arasında bir değer aralığına "normalleştirmeyin":

Fish_valuemin_all_Fish_valuesmax_all_Fish_valuesmin_all_Fish_values600+200
Maksimum Fisher Transform değeri tam olarak 800'e, minimum Fisher Transform değeri tam olarak 200'e ayarlanacak ve diğer tüm değerler, yaklaşık normal dağılıma göre bu iki uç arasında yer alacaktır.

SO hakkındaki orijinal sorunuza ve ölçeklenebilirlik konusuna atıfta bulunarak, bu yaklaşımın avantajı, herhangi bir yeni veri noktasının kendisinin bir bütün olarak veri kümesi için yeni bir maksimum veya minimum olmaması şartıyla, yukarıdaki hesaplamaları yeni veri noktasına uygulayabilirsiniz orijinal veri setinin mevcut puanlarından herhangi birini etkilemeden 200 ile 800 arasında puan almak. Yeni bir veri noktası yeni bir maksimum veya minimum ise, bu yeni "normalleştirici" maksimum veya minimum değerle tüm veri setinin puanlarını yeniden hesaplamanız gerekir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.