Buộc một tập hợp số vào đường cong chuông gaussian


9

( Điều này liên quan đến câu hỏi lập trình của tôi về Stack Overflow : Thuật toán Gaussian Bell Curve (Python và / hoặc C #) .)

Trên Hỏi & Đáp, tôi tìm thấy ví dụ đơn giản này:

  1. Tìm giá trị trung bình số học (trung bình) => Tổng của tất cả các giá trị trong tập hợp, chia cho số phần tử trong tập hợp
  2. Tìm tổng bình phương của tất cả các giá trị trong tập hợp
  3. Chia sản lượng của (2) cho số phần tử trong tập hợp
  4. Trừ bình phương trung bình (1) từ đầu ra của (3)
  5. Lấy căn bậc hai của kết quả của (4)

Ví dụ: Đặt 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

(Điều này xuất phát từ một bài đăng trên wiki.answers.com .)

Bây giờ được cung cấp tất cả những điều đó, làm thế nào tôi có thể khớp dữ liệu trên với đường cong hình chuông (chẳng hạn như điểm tín dụng) trong khoảng từ 200 đến 800. Rõ ràng số 5 trong tập hợp trên sẽ là 500. Nhưng công thức để xác định điều gì là xác định 3 nên trên cùng một quy mô. Mặc dù bộ ban đầu Tập A = {1,3,4,5,7} không phải là đường cong hình chuông, tôi muốn buộc nó thành đường cong hình chuông.

Hãy tưởng tượng đây là điểm số của 5 người. Tháng tới, điểm số có thể thay đổi như sau: Đặt A2={1,2,4,5,9}(một người mất một điểm và người đứng đầu được thêm hai điểm - người giàu trở nên giàu hơn và người nghèo trở nên nghèo hơn). Sau đó, có lẽ một anh chàng mới bước vào trường quay: Set A3={1,2,4,5,8,9}.


2
Nếu thiết lập của bạn thay đổi theo thời gian, không thể điều chỉnh nó theo cùng một đường cong hình chuông. Giả sử bạn có tập , vì vậy 4 sẽ là 800, nhưng nếu một quan sát mới 5 xuất hiện, thì nó sẽ trở thành 800.A={1,2,3,4}
mpiktas

1
Chào mừng bạn đến với CrossValidated, NealWalters. Bạn có thể thấy rằng một câu trả lời chung cho việc hỏi một nhà thống kê "Làm thế nào để tôi làm điều này" là "Tại sao bạn muốn làm điều đó?"
onestop

@onestop - xem liên kết của tôi đến trước đó. Ở trường, tôi nhớ về việc nghe các giáo viên xếp loại "trên đường cong". Vì vậy, cho dù bạn đạt điểm nào trong bài kiểm tra, chỉ có một tỷ lệ nhất định mọi người sẽ đạt được mỗi điểm. Tôi không biết làm thế nào điểm tín dụng hoạt động, nhưng nó rất giống với những gì tôi đang mô phỏng. Tôi cho mọi người điểm ví dụ khi họ trả hết một khoản vay. Nhưng một số người sẽ trả hết hàng chục khoản vay. Tôi muốn cô đọng các điểm hoang dã của mình thành một tập hợp các điểm được chuẩn hóa.
NealWalters

Đọc bình luận cuối cùng của bạn, tôi tự hỏi cách tiếp cận nào là tốt nhất: đưa ra, ví dụ 1 điểm cho mỗi khoản vay được trả, các điểm khác cho những thứ khác, sau đó cố gắng chế ngự số điểm khổng lồ ở cuối, hoặc có thể làm điều gì đó có ý nghĩa hơn với mỗi thành phần tạo nên điểm số cuối cùng? Ví dụ: nếu bạn cho điểm cho các khoản vay được trả hết, bạn có thể tính điểm Cho vay trả lãi (LPO) của bạn dưới dạng nhật ký (1 + NumberOfLoansPaid Offer). Vì vậy, những người có khoản vay bằng 0 đã trả hết LPO bằng 0, ai đó có 3 khoản vay được trả hết sẽ có LPO là 1.1, trong khi ai đó có 100 khoản vay được trả thì nhận được LPO là 4.6. Giới hạn LPO lúc 5.
Wayne

Câu trả lời:


13

Phạm vi tỷ lệ , như 200 đến 800 (đối với SAT, ví dụ ), chỉ là thay đổi đơn vị đo lường . (Nó hoạt động chính xác như thay đổi nhiệt độ ở Fahrenheit sang nhiệt độ Celsius.)

Giá trị trung bình của 500 được dự định tương ứng với mức trung bình của dữ liệu. Phạm vi được dự định tương ứng với khoảng 99,7% dữ liệu khi dữ liệu tuân theo phân phối chuẩn ("Đường cong hình chuông"). Nó được đảm bảo bao gồm 8/9 dữ liệu ( Bất bình đẳng của Ch Quashev ).

Trong trường hợp này, công thức 1-5 tính toán độ lệch chuẩn của dữ liệu. Đây chỉ đơn giản là một đơn vị đo lường mới cho dữ liệu gốc. Nó cần phải tương ứng với 100 đơn vị trong quy mô mới. Do đó, để chuyển đổi một giá trị gốc thành giá trị tỷ lệ,

  • Trừ trung bình.

  • Chia theo độ lệch chuẩn.

  • Nhân với 100.

  • Thêm 500.

Nếu kết quả nằm ngoài phạm vi bạn có thể sử dụng nó nguyên trạng hoặc "kẹp" nó vào phạm vi bằng cách làm tròn đến 200, xuống tới 800.[200,800]

Trong ví dụ , sử dụng dữ liệu , trung bình là và SD là . Do đó, khi thay đổi kích thước, trở thành . Toàn bộ tập dữ liệu được định cỡ lại, được tính tương tự, là .{1,3,4,5,7}421(14)/2100+500=350{350,450,500,550,650}

Khi dữ liệu gốc được phân phối theo cách không bình thường, bạn cần một cách tiếp cận khác . Bạn không còn tính trung bình hoặc SD. Thay vào đó, hãy đặt tất cả các điểm theo thứ tự, từ thứ 1 (nhỏ nhất) đến thứ (lớn nhất). Đây là hàng ngũ của họ . Chuyển đổi bất kỳ thứ hạng thành tỷ lệ phần trăm của nó . (Trong ví dụ, và dữ liệu đã theo thứ tự . Do đó, tỷ lệ phần trăm của chúng là , thường được viết tương đương là , v.v.) Tương ứng với bất kỳ tỷ lệ phần trăm nào (từ đến , nhất thiết) là mộtni (i1/2)/nn=5i=1,2,3,4,51/10,3/10,5/10,7/10,9/1010%,30%01lượng tử bình thường . Nó được tính toán với hàm lượng tử thông thường , có liên quan chặt chẽ với hàm lỗi . (Các xấp xỉ số đơn giản là mã đơn giản.) Các giá trị của nó, thường nằm trong khoảng từ -3 đến 3, phải được định cỡ lại (giống như trước đây) trong phạm vi . Làm điều này bằng cách đầu tiên nhân số lượng tử bình thường với 100 và sau đó thêm 500.[200,800]

Hàm lượng tử thông thường có sẵn trong nhiều nền tảng điện toán, bao gồm cả bảng tính ( ví dụ: Normsinv của Excel ). Ví dụ: các lượng tử bình thường (hoặc "điểm số bình thường") cho dữ liệu là .{ 372 , 448 , 500 , 552 , 628 }{1,3,4,5,7}{372,448,500,552,628}

Cách tiếp cận " ghi điểm bình thường " này sẽ luôn cho điểm từ 200 đến 800 khi bạn có giá trị từ 370 trở xuống. Khi bạn có 1111 hoặc ít hơn các giá trị, tất cả trừ giá trị cao nhất và thấp nhất sẽ có điểm từ 200 đến 800.


+1, tôi đã xóa câu trả lời của mình, vì cách của bạn tốt hơn và khiến tôi trở nên lỗi thời :)
mpiktas

Bạn lấy số 5 ở đâu trong 1-5? 4 là trung bình. Có nên là 1-4 không? Hôm nay tôi đang thử nghiệm với Python, cảm ơn một lần nữa.
NealWalters

@NealWalters Xin lỗi, đó là một cú trượt ngón tay. Tôi đã sửa nó ngay bây giờ để nó đọc (1-4) / 2 * 100 + 500.
whuber

4

Bạn có thể thử cách tiếp cận này - bình thường hóa dữ liệu của bạn được đặt thành phạm vi giữa các giá trị -1 và +1, do đó: Điều này sẽ chuyển đổi mọi giá trị trong dữ liệu của bạn thành giá trị giữa -1 và +1, với giá trị tối đa và tối thiểu thực tế được đặt thành +1 và -1, sau đó đặt lại các giá trị +1 và -1 này thành +0.9999 và -0.9999 (cần thiết cho các tính toán sau.)

(individual_valuemin_of_all_valuesmax_of_all_valuesmin_of-all_values0.5)2.

Sau đó, áp dụng Biến đổi Fisher cho từng giá trị được chuẩn hóa ở trên để "buộc nó" tuân thủ xấp xỉ với phân phối bình thường và sau đó "không chuẩn hóa" từng giá trị Fisher Transform này trong phạm vi giá trị từ 200 đến 800, do đó: Giá trị chuyển đổi tối đa của Fisher sẽ được đặt thành chính xác 800, giá trị Fisher Transform tối thiểu sẽ được đặt thành chính xác theo chính xác 200 và tất cả các giá trị khác sẽ nằm giữa hai thái cực này, theo một phân phối chuẩn gần đúng.

Fish_valuemin_all_Fish_valuesmax_all_Fish_valuesmin_all_Fish_values600+200

Tham khảo câu hỏi ban đầu của bạn về SO và vấn đề về khả năng mở rộng, ưu điểm của phương pháp này là cung cấp bất kỳ điểm dữ liệu mới nào không phải là tối đa hoặc tối thiểu mới cho toàn bộ dữ liệu mà bạn có thể áp dụng các tính toán trên cho điểm dữ liệu mới để có được điểm số từ 200 đến 800 mà không ảnh hưởng đến bất kỳ điểm số hiện có nào của tập dữ liệu gốc. Nếu một điểm dữ liệu mới là mức tối đa hoặc tối thiểu mới, bạn sẽ phải tính toán lại điểm số cho toàn bộ dữ liệu với giá trị tối đa hoặc tối thiểu "bình thường hóa" mới này.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.