2010-07-08 79 views
12

Có một số liệu và tính toán số liệu thống kê từ nó rất dễ dàng. Làm thế nào về cách khác xung quanh?Thống kê "Đảo ngược": tạo dữ liệu dựa trên độ lệch trung bình và tiêu chuẩn

Giả sử tôi biết một số biến có giá trị X trung bình, độ lệch chuẩn Y và giả sử nó có phân phối chuẩn (Gaussian) bình thường. Điều gì sẽ là cách tốt nhất để tạo ra một tập dữ liệu "ngẫu nhiên" (kích thước tùy ý) mà sẽ phù hợp với phân phối?

CHỈNH SỬA: Loại phát triển này từ this question; Tôi có thể làm một cái gì đó dựa trên phương pháp đó, nhưng tôi tự hỏi nếu có một cách hiệu quả hơn để làm điều đó.

Trả lời

12

Bạn có thể tạo tiêu chuẩn biến ngẫu nhiên bình thường với Box-Mueller method. Sau đó, để chuyển đổi điều đó để có mu và độ lệch chuẩn sigma trung bình, nhân các mẫu của bạn bằng sigma và thêm mu. I E. cho mỗi z từ chuẩn bình thường, trả về mu + sigma * z.

1

Bạn có thể biến nó thành một mô phỏng Monte Carlo. Bắt đầu với một "phạm vi chấp nhận được" ngẫu nhiên rộng và tạo ra một vài giá trị thực sự ngẫu nhiên. Kiểm tra thống kê của bạn và xem liệu trung bình và phương sai có bị tắt hay không. Điều chỉnh "dải ô được chấp nhận" cho các giá trị ngẫu nhiên và thêm một vài giá trị khác. Lặp lại cho đến khi bạn đã đạt được cả hai yêu cầu của bạn và kích thước mẫu dân số của bạn.

Chỉ cần rời khỏi đỉnh đầu của tôi, hãy cho tôi biết suy nghĩ của bạn. :-)

0

Dễ dàng tạo tập dữ liệu với phân phối bình thường (xem http://en.wikipedia.org/wiki/Box%E2%80%93Muller_transform).
Hãy nhớ rằng mẫu được tạo sẽ không có phân bố chính xác N (0,1)! Bạn cần phải standarize nó - trừ trung bình và sau đó chia cho độ lệch std. Sau đó, bạn được tự do chuyển đổi mẫu này thành phân phối Bình thường với các tham số đã cho: nhân với độ lệch chuẩn và sau đó thêm giá trị trung bình.

2

tôi sẽ đưa ra một ví dụ sử dụng R và các thuật toán thứ 2 trong danh sách here.

X<-4; Y<-2 # mean and std 
z <- sapply(rep(0,100000), function(x) (sum(runif(12)) - 6) * Y + X) 

plot(density(z)) 
> mean(z) 
[1] 4.002347 

> sd(z) 
[1] 2.005114 

> library(fUtilities) 

> skewness(z,method ="moment") 
[1] -0.003924771 
attr(,"method") 
[1] "moment" 

> kurtosis(z,method ="moment") 
[1] 2.882696 
attr(,"method") 
[1] "moment" 
8

Điều này thực sự dễ thực hiện trong Excel với hàm norminv(). Ví dụ:

= NORMINV (rand(), 100, 15)

sẽ tạo ra một giá trị từ một phân phối chuẩn với trung bình là 100 và độ lệch chuẩn là 15 (chỉ số IQ của con người). Kéo công thức này xuống một cột và bạn có nhiều giá trị như bạn muốn.

+0

+1 cho không cần lập trình cần thiết – quantumSoup

1

Chức năng MATLAB normrnd từ Hộp công cụ thống kê có thể tạo ra các số ngẫu nhiên được phân phối bình thường với một mu và sigma đã cho.

Các vấn đề liên quan