Nếu bạn có hàm phân phối tích lũy , thì việc tính giá trị p cho thống kê T đã cho chỉ đơn giản là 1 - F ( T ) . Đây là đơn giản trong R. Nếu bạn có hàm mật độ xác suất trên Mặt khác, sau đó F ( x ) = ∫ x - ∞ p ( t ) d tFpT1−F(T)F(x)=∫x−∞p(t)dt . Bạn có thể tìm thấy tích phân này hoặc bằng số. Trong R, nó sẽ trông như thế này:
dF <- function(x)dnorm(x)
pF <- function(q)integrate(dF,-Inf,q)$value
> pF(1)
[1] 0.8413448
> pnorm(1)
[1] 0.8413447
Bạn có thể điều chỉnh integrate
cho chính xác hơn. Điều này tất nhiên có thể thất bại đối với các trường hợp cụ thể, khi tích phân không hoạt động tốt, nhưng nó sẽ hoạt động với phần lớn các hàm mật độ.
Tất nhiên bạn có thể chuyển tham số vào pF
, nếu bạn có một vài giá trị tham số để thử và không muốn xác định lại dF
mỗi lần.
dF <- function(x,mean=0,sd=1)dnorm(x,mean=mean,sd=sd)
pF <- function(q,mean=0,sd=1)integrate(dF,-Inf,q,mean=mean,sd=sd)$value
> pF(1,1,1)
[1] 0.5
> pnorm(1,1,1)
[1] 0.5
Tất nhiên, bạn cũng có thể sử dụng các phương thức Monte-Carlo như chi tiết bởi @suncoolsu, đây sẽ chỉ là một phương thức số khác để tích hợp.