Memaksa satu set angka ke kurva lonceng gaussian

9

( Ini berkaitan dengan pertanyaan pemrograman saya tentang Stack Overflow : Bell Curve Gaussian Algorithm (Python dan / atau C #) .)

Di Answers.com, saya menemukan contoh sederhana ini:

  1. Temukan rata-rata aritmatika (rata-rata) => Jumlah semua nilai dalam set, dibagi dengan jumlah elemen dalam set
  2. Temukan jumlah kuadrat dari semua nilai di set
  3. Bagi hasil (2) dari jumlah elemen dalam himpunan
  4. Kurangi kuadrat rata-rata (1) dari output (3)
  5. Ambil akar kuadrat dari hasil (4)

Contoh: 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. SQRT (4) = 2

(Ini berasal dari posting di wiki.answers.com .)

Sekarang mengingat semua itu, bagaimana saya bisa memasukkan data di atas ke kurva lonceng (seperti skor kredit) mulai dari 200 hingga 800. Jelas angka 5 pada set di atas akan menjadi 500. Tetapi kemudian apa rumus untuk menentukan apa 3 harus pada skala yang sama. Meskipun set asli Set A = {1,3,4,5,7} bukan kurva-lonceng, saya ingin memaksanya menjadi kurva-lonceng.

Bayangkan ini adalah skor 5 orang. Bulan depan skor mungkin berubah sebagai berikut: Set A2={1,2,4,5,9}(satu orang kehilangan satu poin, dan pria teratas mendapatkan dua poin lagi - yang kaya semakin kaya dan yang miskin semakin miskin). Maka mungkin seorang pria baru masuk ke set: Set A3={1,2,4,5,8,9}.

NealWalters
sumber
2
Jika set Anda berubah waktu dari waktu, tidak mungkin untuk memasangnya dengan kurva lonceng yang sama. Misalkan Anda memiliki himpunan , jadi 4 harus menjadi 800, tetapi jika pengamatan baru 5 tiba, maka itu harus menjadi 800.A={1,2,3,4}
mpiktas
1
Selamat datang di CrossValidated, NealWalters. Anda mungkin menemukan bahwa respons umum untuk bertanya kepada ahli statistik "Bagaimana saya melakukan ini" adalah "Mengapa Anda ingin melakukan itu?"
onestop
@onestop - lihat tautan saya ke posting sebelumnya. Di sekolah, saya ingat pernah mendengar guru yang bertingkat "di kurva". Jadi, berapa pun skor yang Anda dapatkan pada tes, hanya persentase tertentu dari setiap orang yang mendapatkan nilai masing-masing. Saya tidak tahu bagaimana skor kredit bekerja, tetapi itu sangat mirip dengan apa yang saya simulasi. Saya memberi orang poin misalnya ketika mereka membayar pinjaman. Tetapi beberapa orang akan membayar lusinan pinjaman. Saya ingin menyingkat titik liar saya menjadi satu set titik normal.
NealWalters
membaca komentar terakhir Anda, saya bertanya-tanya pendekatan apa yang terbaik: memberi, misalnya 1 poin untuk setiap pinjaman dilunasi, poin lain untuk hal-hal lain, kemudian mencoba menjinakkan skor besar di akhir, atau mungkin melakukan sesuatu yang lebih bermakna dengan setiap komponen yang membuat skor akhir? Misalnya, jika Anda memberikan poin untuk pinjaman yang telah dilunasi, Anda dapat menghitung poin Pinjaman Anda yang Dibayar (PUT) sebagai log (1 + NumberOfLoansPaidOff). Jadi seseorang dengan nol pinjaman dilunasi mendapat LPO 0, seseorang dengan 3 pinjaman lunas mendapat LPO 1,1, sementara seseorang dengan 100 pinjaman lunas mendapat LPO sebesar 4,6. Tutup LPO pukul 5.
Wayne

Jawaban:

13

Rentang skala , seperti 200 hingga 800 (untuk SAT, misalnya ), hanyalah perubahan satuan pengukuran . (Ini berfungsi persis seperti mengubah suhu di Fahrenheit ke yang di Celsius.)

Nilai tengah 500 dimaksudkan untuk sesuai dengan rata-rata data. Rentang ini dimaksudkan untuk sesuai dengan sekitar 99,7% dari data ketika data mengikuti distribusi Normal ("Bell curve"). Hal ini dijamin untuk memasukkan 8/9 dari data ( Chebyshev Ketimpangan ).

Dalam hal ini, rumus 1-5 menghitung standar deviasi data. Ini hanyalah unit pengukuran baru untuk data asli. Perlu sesuai dengan 100 unit dalam skala baru. Karenanya, untuk mengonversi nilai asli ke nilai yang diskalakan,

  • Kurangi rata-rata.

  • Membagi dengan deviasi standar.

  • Kalikan dengan 100.

  • Tambahkan 500.

Jika hasilnya terletak di luar rentang Anda bisa menggunakannya apa adanya atau "menjepit" ke kisaran dengan membulatkan hingga 200, turun ke 800.[200,800]

Dalam contoh , menggunakan data , rata-rata adalah dan SD adalah . Oleh karena itu, setelah pengubahan ukuran, menjadi . Seluruh dataset yang dihitung ulang, dihitung dengan cara yang sama, adalah .{1,3,4,5,7}421(14)/2100+500=350{350,450,500,550,650}

Ketika data asli didistribusikan dengan cara yang tidak normal, Anda perlu pendekatan lain . Anda tidak lagi menghitung rata-rata atau SD. Alih-alih, letakkan semua skor secara berurutan, dari 1 (terkecil) hingga ke (terbesar). Ini adalah peringkat mereka . Mengkonversi peringkat ke nya persentase . (Dalam contoh, dan data sudah dalam urutan peringkat . Oleh karena itu persentase mereka adalah , sering ditulis setara dengan , dll.) Sesuai dengan persentase apa pun (antara dan , tentu saja) adalahni (i1/2)/nn=5i=1,2,3,4,51/10,3/10,5/10,7/10,9/1010%,30%01kuantil normal . Ini dihitung dengan fungsi kuantil normal , yang terkait erat dengan fungsi kesalahan . ( Perkiraan numerik sederhana langsung ke kode.) Nilai-nilainya, yang biasanya akan antara -3 dan 3, harus diubah kembali (sama seperti sebelumnya) ke kisaran . Lakukan ini dengan terlebih dahulu mengalikan kuantil normal dengan 100 lalu menambahkan 500.[200,800]

Fungsi kuantil normal tersedia di banyak platform komputasi, termasuk spreadsheet ( norma Excel , misalnya). Misalnya, kuantil normal (atau "skor normal") untuk data adalah .{ 372 , 448 , 500 , 552 , 628 }{1,3,4,5,7}{372,448,500,552,628}

Pendekatan " skor normal " ini akan selalu memberikan skor antara 200 dan 800 ketika Anda memiliki nilai 370 atau lebih sedikit. Ketika Anda memiliki 1.111 atau lebih sedikit nilai, semua kecuali yang tertinggi dan terendah akan memiliki skor antara 200 dan 800.

whuber
sumber
+1, saya telah menghapus jawaban saya, karena Anda jauh lebih baik dan membuat milik saya usang :)
mpiktas
Di mana Anda mendapatkan 5 dalam 1-5? 4 adalah rata-rata. Haruskah 1-4? Saya menguji hari ini dengan Python, terima kasih lagi.
NealWalters
@NealWalters Maaf, itu tergelincir. Saya telah memperbaikinya sekarang sehingga berbunyi (1-4) / 2 * 100 + 500.
whuber
4

Anda dapat mencoba pendekatan ini - menormalkan set data Anda untuk berkisar antara nilai -1 dan +1 dengan demikian: Ini akan mengonversi setiap nilai dalam set data Anda menjadi nilai antara -1 dan +1, dengan nilai maksimum dan minimum aktual masing-masing ditetapkan ke +1 dan -1, dan kemudian mengatur ulang nilai +1 dan -1 ini menjadi +0.9999 dan -0.9999 (diperlukan untuk perhitungan berikut.)

(individual_valuemin_of_all_valuesmax_of_all_valuesmin_of-all_values0.5)2.

Kemudian terapkan Fisher Transformation untuk masing-masing nilai yang dinormalisasi di atas untuk "memaksanya" untuk kira-kira sesuai dengan distribusi normal, dan kemudian "un-normalisasi" masing-masing nilai Fisher Transform ini untuk rentang nilai antara 200 dan 800 dengan demikian: Nilai maksimum Fisher Transform akan disetel tepat 800, nilai minimum Fisher Transform akan ditetapkan hingga tepat 200, dan semua nilai lainnya akan berada di antara kedua ekstrem ini, menurut perkiraan distribusi normal.

Fish_valuemin_all_Fish_valuesmax_all_Fish_valuesmin_all_Fish_values600+200

Merujuk pertanyaan asli Anda pada SO dan masalah skalabilitas, keuntungan dari pendekatan ini adalah bahwa asalkan titik data baru itu sendiri bukan maksimum atau minimum baru untuk set data secara keseluruhan Anda dapat menerapkan perhitungan di atas untuk titik data baru untuk mendapatkan skor antara 200 dan 800 tanpa memengaruhi skor apa pun yang ada dari kumpulan data asli. Jika titik data baru adalah maksimum atau minimum baru, Anda harus menghitung ulang skor untuk seluruh data yang ditetapkan dengan nilai maksimum atau minimum "normalisasi" baru ini.

babelproofreader
sumber