Cách tìm / ước tính hàm mật độ xác suất từ ​​hàm mật độ trong R


17

Giả sử rằng tôi có một biến như Xvới phân phối chưa biết. Trong Mathematica, bằng cách sử dụng SmoothKernelDensityhàm, chúng ta có thể có hàm mật độ ước tính. Hàm mật độ ước tính này có thể được sử dụng cùng với PDFhàm để tính hàm mật độ xác suất của một giá trị như Xdưới dạng PDF[density,X]giả sử rằng "mật độ" là kết quả của SmoothKernelDensity. Sẽ tốt hơn nếu có tính năng như vậy trong R. Đây là cách nó hoạt động trong Mathematica

http://reference.wolfram.com/mathIALa/ref/SmoothKernelDistribution.html

Như một ví dụ (dựa trên các hàm Mathicala):

data = RandomVariate[NormalDistribution[], 100]; #generates 100 values from N(0,1)

density= SmoothKernelDistribution[data]; #estimated density

PDF[density, 2.345] returns 0.0588784 

Tại đây bạn có thể tìm thêm thông tin về PDF:

http://reference.wolfram.com/mathIALa/ref/PDF.html

Tôi biết rằng tôi có thể vẽ đồ thị hàm mật độ của nó bằng density(X)R và bằng cách sử dụngecdf(X) tôi có thể có được hàm phân phối tích lũy theo kinh nghiệm của nó. Tôi có thể làm điều tương tự trong R dựa trên những gì tôi mô tả về Mathicala không?

Bất kỳ trợ giúp và ý tưởng được đánh giá cao.


density(x)đưa ra ước tính của pdf, như bạn đã lưu ý, nhưng sự phù hợp của nó phụ thuộc vào mục đích mà bạn muốn có mật độ. Ví dụ, lưu ý rằng phương sai bị sai lệch (khi thực hiện tích chập, bạn thêm phương sai của hạt nhân vào phương sai của dữ liệu, bản thân nó là một ước lượng không thiên vị) - sự đánh đổi sai lệch như vậy là phổ biến. Có những lựa chọn thay thế khác, chẳng hạn như ước tính mật độ log-spline, chẳng hạn - nhưng một lần nữa, sự phù hợp của nó một phần phụ thuộc vào những gì bạn muốn làm với nó.
Glen_b -Reinstate Monica

@Glen_b Tôi muốn sử dụng mật độ ước tính để tìm xác suất của các giá trị khác trong phân phối. Chẳng hạn, tôi có một vectơ dữ liệu nằm trong khoảng từ 0 đến 10. Tập dữ liệu này chỉ chứa 70 giá trị duy nhất trong khoảng từ 0 đến 10. Tôi có thể vẽ mật độ. Bây giờ, giả sử rằng tôi quan tâm đến việc tìm xác suất có X = 7.5, không có trong dữ liệu quan sát, trong một mẫu ngẫu nhiên. Làm thế nào tôi có thể lấy nó? Tôi biết rằng nó ecdf(X)mang lại cho tôi tỷ lệ phần trăm tương đương 7,5 nhưng đó không phải là thứ tôi đang tìm kiếm.
Amin

" Tìm xác suất có X = 7,5 " - có vấn đề của bạn! Hoặc bạn có phân phối liên tục (trong trường hợp đó câu trả lời thực tế là "0") hoặc bạn không (trong trường hợp đó bạn không nên sử dụng ước tính mật độ, vì bạn không có mật độ).
Glen_b -Reinstate Monica

1
Lưu ý định nghĩa của ecdf (hoặc cdf nói chung hơn); ecdf(b)-ecdf(a)sẽ ước tính . Tất nhiên với các biến liên tục, sự khác biệt giữa < là không quan trọng. Nếu X rời rạc, thì bạn có thể ước tính P ( X = 7.5 ) bằng cách tính tỷ lệ mẫu của các giá trị là 0,75. P(a<Xb)<X P(X=7.5)
Glen_b -Reinstate Monica

1
Xin lỗi, đó là một lỗi. Ý tôi là tỷ lệ mẫu của các giá trị là 7,5; Con trai tôi đánh lạc hướng tôi khi tôi đang gõ những từ cuối cùng. Ước tính mẫu của bạn về xác suất của một sự kiện không quan sát được bằng không. Bạn có muốn áp dụng trước? Bạn có muốn một khoảng tin cậy cho tỷ lệ thay vì ước tính điểm không? Vấn đề thực sự của bạn chưa phải là vấn đề R, vấn đề của bạn là giải thích chính xác những gì bạn thực sự muốn. Bạn có thể nên chỉnh sửa câu hỏi của bạn, hoặc đăng một câu hỏi mới.
Glen_b -Reinstate Monica

Câu trả lời:


34

?densitychỉ ra rằng nó sử dụng approxđể thực hiện nội suy tuyến tính; ?approxchỉ ra rằng approxfuntạo ra một chức năng phù hợp:

x <- log(rgamma(150,5))
df <- approxfun(density(x))
plot(density(x))
xnew <- c(0.45,1.84,2.3)
points(xnew,df(xnew),col=2)

enter image description here

Bằng cách sử dụng integratebắt đầu từ một khoảng cách thích hợp dưới mức tối thiểu trong mẫu (bội số - có thể là 4 hoặc 5, có lẽ - của băng thông được sử dụng dfthường sẽ làm cho một khoảng cách thích hợp), người ta có thể có được xấp xỉ tốt của cdf tương ứng với df.


hay đấy. Có vẻ như df(2.3)cung cấp giá trị của hàm mật độ ước tính tại x=2.3nhưng những gì PDFtrong Mathicala sẽ cho khu vực dưới đường cong ở trên x=2.3. Tôi không chắc lắm về điều này. Đây chỉ là phỏng đoán của tôi. Bạn có thể tái sản xuất những gì tôi đã làm trong Mathematica không?
Amin

Hàm của tôi ở trên rõ ràng đưa ra ước tính dựa trên hạt nhân của "hàm mật độ xác suất" ... "được đánh giá tại x". Hoặc bạn muốn điều đó, hoặc bạn không. Nếu bạn không, bạn phải giải thích những gì bạn làm muốn - về thống kê, chứ không chỉ là "sinh sản hành vi này.
Glen_b -Reinstate Monica

Tôi nghĩ rằng tôi đã nhầm lẫn và vô tình đã thúc đẩy mật độ đó là xác suất không có. Tôi không có ý định gây hiểu lầm. Nếu bạn nghĩ rằng PDFtrong Mathicala thực hiện những gì bạn mô tả trong câu trả lời của bạn (nghĩa là tìm giá trị của hàm mật độ cho giá trị X đã cho) thì tôi nghĩ rằng tôi đã có câu trả lời của mình. Chỉ có nhiều nhầm lẫn về việc sử dụng từ ngữ!
Amin

2
Từ những gì PDFtrang nói, nó trả về cùng một loại điều tôi làm, nhưng các phương thức mà nó sử dụng trong tính toán của nó trong trường hợp này có thể chính xác hơn một chút (tuy nhiên với mục đích chính xác như vậy có ít giá trị). Đối với một số thảo luận về phân biệt xác suất / mật độ, xem tại đâyđây .
Glen_b -Reinstate Monica
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.