Thống kê giả


27

Nếu bạn sẽ phát minh ra một số tin tức giả mạo, bạn sẽ muốn chế tạo một số dữ liệu để sao lưu nó. Bạn phải có một số kết luận định trước và bạn muốn một số thống kê để củng cố lập luận về logic bị lỗi của bạn. Thử thách này sẽ giúp bạn!

Cho ba số đầu vào:

  • N - số điểm dữ liệu
  • μ - trung bình của các điểm dữ liệu
  • σ - độ lệch chuẩn của các điểm dữ liệu, nơi μσ được xác định bởi:

    nhập mô tả hình ảnh ở đây

Đầu ra một danh sách có thứ tự các con số, 𝑥 tôi , điều này sẽ tạo ra cho N , μσ .

Tôi sẽ không trở nên quá cầu kỳ về I / O định dạng, nhưng tôi hy vọng một số loại thập phân cho μ , σ , và các điểm dữ liệu đầu ra. Tối thiểu, nên hỗ trợ ít nhất 3 số liệu và cường độ tối thiểu 1.000.000. Phao của IEEE là tốt

  • N sẽ luôn là một số nguyên, trong đó 1 ≤ N 1.000
  • μ thể được bất kỳ số thực
  • σ sẽ luôn ≥ 0
  • điểm dữ liệu có thể là bất kỳ số thực
  • nếu N là 1, sau đó σ sẽ luôn luôn là 0.

Lưu ý rằng hầu hết các đầu vào sẽ có nhiều đầu ra có thể. Bạn chỉ cần cung cấp một đầu ra hợp lệ. Đầu ra có thể là xác định hoặc không xác định.

Ví dụ

Input (N, μ, σ) -> Possible Output [list]

2, 0.5, 1.5 -> [1, 2]
5, 3, 1.414 -> [1, 2, 3, 4, 5]
3, 5, 2.160 -> [2, 6, 7]
3, 5, 2.160 -> [8, 4, 3]
1, 0, 0 -> [0]

6
Nên thêm đầu vào trung thực / giả mạo cho giá trị p để chúng tôi phải tạo dữ liệu tương quan hoặc không tương quan với sao lưu giả hoặc giả mạo ahaha.
Bạch tuộc ma thuật Urn

1
Không gì +ve-venghĩa là gì?
CG.

@ChavenG. Chữ viết tắt cho tích cựctiêu cực . Tôi đã chỉnh sửa để làm rõ.
Chấn thương kỹ thuật số

Khi N = 1, sẽ luôn là 0 để biến nó thành có thể?
xnor

1
Thực sự chúng tôi nên sử dụng độ lệch chuẩn mẫu không được hiệu chỉnh và không triển khai cho các đầu vào có N = 1.
Jonathan Allan

Câu trả lời:


8

Bình thường , 44 35 34 byte

? eA.DhQ2 + eQ * G, -eQJ * E @ hc1thQ2 + eQJ * G, -eQKE + eQK 
.N? eA.DN2+T*G+LT_B*Y@hc1tN2*G+LT_BY
.N? EA.DN2+T*G+LT_B*Y@cNtN2*G+LT_BY

Hãy thử trực tuyến! (Đoạn mã trên xác định hàm. :.*Được thêm vào liên kết để gọi hàm.)

Toán

Điều này xây dựng dữ liệu đối xứng. Nếu Nlà chẵn thì dữ liệu chỉ là giá trị trung bình cộng hoặc trừ đi độ lệch chuẩn. Tuy nhiên, nếu Nlà số lẻ, thì chúng ta chỉ cần mở một hộp giun, vì giá trị trung bình phải có để dữ liệu đối xứng, và do đó biến động phải được nhân với một yếu tố nhất định.

Nếu n

  • Một nửa dữ liệu là μ+σ.
  • Một nửa dữ liệu là μ-σ.

Nếu nlà số lẻ

  • Một mốc thời gian là μ.
  • Ít hơn một nửa dữ liệu là μ+σ*sqrt(n/(n-1)).
  • Ít hơn một nửa dữ liệu là μ-σ*sqrt(n/(n-1)).

6

MATL , 22 byte

Cảm ơn @DigitalTrauma đã sửa lỗi.

:t&1Zs/tYm-*+tZN?3G9L(

Trật tự đầu vào là: N, σ, μ.

Hãy thử trực tuyến!

Hoặc xem phiên bản sửa đổi cũng tính toán độ lệch trung bình và độ lệch chuẩn của dữ liệu được sản xuất, dưới dạng kiểm tra.

Giải trình

Mã được chia thành bốn phần:

  1. :tạo ra các mảng [1 2 ... N]nơi Nđược lấy làm đầu vào ngầm.

  2. t&1Zs/chia các số đó cho độ lệch chuẩn thực nghiệm của chúng (tính toán chuẩn hóa theo N) và tYm-trừ đi giá trị trung bình theo kinh nghiệm của các giá trị kết quả. Điều này đảm bảo rằng các kết quả có giá trị trung bình 0theo kinh nghiệm và độ lệch chuẩn theo kinh nghiệm 1.

  3. *nhân với σ+thêm μ, cả hai được coi là đầu vào ngầm.

  4. tZN?x3Gxử lý trường hợp đặc biệt đó N = 1, σ = 0mà đầu ra phải là μ. Nếu đây thực sự là trường hợp, thì độ lệch chuẩn theo kinh nghiệm được tính trong bước thứ hai là 0, phép chia đã được infnhân và nhân σvới bước thứ ba đã cho NaN. Vì vậy, những gì mã làm là: nếu mảng thu được bao gồm tất cả các NaNgiá trị (mã tZN?), xóa nó ( x) và đẩy đầu vào thứ ba ( 3G), đó là μ.


4

Python , 50 byte

lambda n,m,s:[m+s*(n-1)**.5]+[m-s/(n-1%n)**.5]*~-n

Hãy thử trực tuyến!

Sử dụng nphân phối 0-element sau với trung bình và sdev 1:

  • Với xác suất 1/n(tức là 1phần tử), đầu ra(n-1)**0.5
  • Với xác suất 1-1/n(tức là n-1các yếu tố), đầu ra-(n-1)**(-0.5)

Điều này được thay đổi mkích thước thành trung bình và sdev sbằng cách chuyển đổi x->m+s*x. Khó chịu, n=1đưa ra một phép chia bằng 0 cho một giá trị vô dụng, vì vậy chúng tôi hack nó bằng cách thực hiện /(n-1%n)**.5, với 1%nviệc 0cho n==11nếu không.

Bạn có thể nghĩ (n-1)**.5có thể rút ngắn lại ~-n**.5, nhưng lũy ​​thừa xảy ra trước tiên.

A defdài hơn một byte.

def f(n,m,s):a=(n-1%n)**.5;print[m+s*a]+[m-s/a]*~-n

3

R, 83 62 53 byte

function(n,m,s)`if`(n>1,scale(1:n)*s*sqrt(1-1/n)+m,m)

Nếu n=1, sau đó nó trả về m(vì scalesẽ trả về NA), nếu không, nó chia tỷ lệ dữ liệu [1,...,n]thành độ lệch chuẩn trung bình 0 và (mẫu), do đó, nó nhân với s*sqrt(1-1/n)để có độ lệch chuẩn dân số chính xác và thêm mvào dịch chuyển sang giá trị trung bình phù hợp. Cảm ơn Dason đã giới thiệu cho tôi chức năng chia tỷ lệ và bỏ các byte đó!

Hãy thử trực tuyến!


Bạn có thể thêm một số bài kiểm tra trong Dùng thử trực tuyến để câu trả lời của bạn có thể dễ dàng được xác minh không?
Chấn thương kỹ thuật số

Vâng! cho tôi hai phút
Giuseppe

Có lẽ chỉ cần sử dụng 1:nthay vì rt(n,n)để lưu 4 byte. Và scalechức năng có thể hữu ích.
Dason

@Dason - cảm ơn! Tôi đã học được về scaleđiều đó là tuyệt vời.
Giuseppe

1

Thạch , 20 byte

÷_Ḃ$©$*.;N$ṁ®;0ṁ⁸×⁵+

Hãy thử trực tuyến!

Full chương trình chụp ba đối số dòng lệnh: n , μ , σ .

Làm sao?

Tạo các giá trị sàn (n / 2) tương đương với giá trị trung bình và giá trị trung bình nếu n là số lẻ sao cho độ lệch chuẩn là chính xác ...

÷_Ḃ$©$*.;N$ṁ®;0ṁ⁸×⁵+ - Main link: n, μ (σ expected as third input, the 5th command argument)
   $                 - last two links as a monad:
 _                   -   n minus:
  Ḃ                  -     n mod 2            i.e. n-1 if n is odd, n if n is even
    ©                - copy value to register
÷                    - n divided by that
       .             - literal 0.5
      *              - exponentiate = (n / (n - (n mod 2))) ^ 0.5
                     -        i.e. 1 if n is even; or (n/(n-1))^0.5 if n is odd
         $           - last two links as a monad:
        N            -   negate
       ;             -   concatenate   i.e. [1,-1] or [(n/(n-1))^0.5,-(n/(n-1))^0.5]
            ®        - recall value from register
           ṁ         - mould the list like something of that length
             ;0      - concatenate a zero
                ⁸    - link's left argument, n
               ṁ     - mould the list like something of length n (removes the zero for even n)
                  ⁵  - fifth command argument, third program argument (σ)
                 ×   - multiply (vectorises)
                   + - add μ (vectorises)
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.