Phương pháp này rất đơn giản, vì vậy tôi sẽ mô tả nó bằng những từ đơn giản. Đầu tiên, lấy hàm phân phối tích lũy của một số phân phối mà bạn muốn lấy mẫu từ đó. Hàm lấy làm giá trị đầu vào x và cho bạn biết xác suất lấy được là bao nhiêuFXx . Vì thếX≤x
FX(x)=Pr(X≤x)=p
nghịch đảo của hàm chức năng như vậy, sẽ lấy p làm đầu vào và trả về x . Chú ý rằng p 's được phân bố đều - điều này có thể được sử dụng để lấy mẫu từ bất kỳ F X nếu bạn biết F - 1 X . Phương pháp này được gọi là lấy mẫu biến đổi nghịch đảo . Ý tưởng rất đơn giản: thật dễ dàng để lấy mẫu các giá trị thống nhất từ U ( 0 , 1 ) , vì vậy nếu bạn muốn lấy mẫu từ một số U ( 0 , 1 )F−1XpxpFXF−1XU(0,1) , chỉ cần mang giá trị u ~FXu∼U(0,1) và chuyển qua F - 1 X để thu được x 'suF−1Xx
F−1X(u)=x
hoặc trong R (để phân phối bình thường)
U <- runif(1e6)
X <- qnorm(U)
Nhìn chung, để hình dung nó nhìn vào CDF bên dưới, chúng tôi nghĩ đến các bản phân phối về mặt xem xét -axis cho xác suất của các giá trị từ x -axis. Với phương pháp lấy mẫu này, chúng tôi làm ngược lại và bắt đầu với "xác suất" và sử dụng chúng để chọn các giá trị có liên quan đến chúng. Với các phân phối rời rạc, bạn coi U là một dòng từ 0 đến 1 và gán các giá trị dựa trên vị trí một điểm u nằm trên dòng này (ví dụ 0 nếu 0 ≤ u < 0,5 hoặc 1 nếu 0,5 ≤ u e r n o uyxU01u00≤u<0.51 để lấy mẫu từ B0.5≤u≤1 ).Bernoulli(0.5)
Thật không may, điều này không phải lúc nào cũng có thể vì không phải mọi hàm đều có nghịch đảo của nó, ví dụ: bạn không thể sử dụng phương thức này với các phân phối bivariate. Nó cũng không phải là phương pháp hiệu quả nhất trong mọi tình huống, trong nhiều trường hợp thuật toán tốt hơn tồn tại.
Bạn cũng hỏi phân phối của . Vì F - 1 X là nghịch đảo của F X , nên F X ( F - 1 X ( u ) ) = u và F - 1 X ( F X ( x ) ) = x , do đó, các giá trị thu được bằng phương pháp đó có sự phân bố tương tự như X . Bạn có thể kiểm tra điều này bằng một mô phỏng đơn giảnF−1X(u)F−1XFXFX(F−1X(u))=uF−1X(FX(x))=xX
U <- runif(1e6)
all.equal(pnorm(qnorm(U)), U)