ước tính mật độ hạt nhân gói np với kernel Epanechnikov


8

Tôi đang làm việc với bộ dữ liệu "mạch nước phun" từ gói MASS và so sánh các ước tính mật độ hạt nhân của gói np.

Vấn đề của tôi là hiểu được ước tính mật độ bằng cách sử dụng xác thực chéo bình phương tối thiểu và nhân Epanechnikov:

blep<-npudensbw(~geyser$waiting,bwmethod="cv.ls",ckertype="epanechnikov")
plot(npudens(bws=blep))

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

Đối với nhân Gaussian có vẻ ổn:

blga<-npudensbw(~geyser$waiting,bwmethod="cv.ls",ckertype="gaussian")
plot(npudens(bws=blga))

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

Hoặc nếu tôi sử dụng kernel Epanechnikov và khả năng tối đa cv:

bmax<-npudensbw(~geyser$waiting,bwmethod="cv.ml",ckertype="epanechnikov")
plot(npudens(~geyser$waiting,bws=bmax))

Đó là lỗi của tôi hay nó là một vấn đề trong gói?

Chỉnh sửa: Nếu tôi sử dụng Mathicala cho kernel Epanechnikov và cv bình phương nhỏ nhất thì nó đang hoạt động:

d = SmoothKernelDistribution[data, bw = "LeastSquaresCrossValidation", ker = "Epanechnikov"]
Plot[{PDF[d, x], {x, 20,110}]

Câu trả lời:


6

BIÊN TẬP

Điều này được giải thích trong FAQ :

Tôi sử dụng âm mưu () (npplot ()) để vẽ đồ thị, giả sử, mật độ và âm mưu kết quả trông giống như mật độ đảo ngược hơn là mật độ

Điều này có thể xảy ra khi băng thông datadriven bị suy giảm đáng kể. Các quy trình lựa chọn băng thông dựa trên dữ liệu (tự động) không được đảm bảo luôn tạo ra kết quả tốt do có lẽ sự hiện diện của các ngoại lệ hoặc làm tròn / phân tách dữ liệu liên tục, trong số các quy trình khác. Theo mặc định, npplot () lấy hai cực trị của dữ liệu (tối thiểu, tối đa, điểm dữ liệu thực tế) sau đó tạo ra một lưới dữ liệu đánh giá cách đều nhau (nghĩa là không phải là điểm dữ liệu thực tế nói chung) và tính mật độ cho các điểm này. Do băng thông cực kỳ nhỏ, ước tính mật độ tại các điểm đánh giá này chính xác bằng 0, trong khi đó, đối với các thực hiện mẫu (trong trường hợp này chỉ có hai, cực tiểu và cực đại) là khác không, do đó chúng ta có hai đỉnh ở các cạnh của cốt truyện và một cái bát bằng không ở mọi nơi khác. Điều này cũng có thể xảy ra khi dữ liệu của bạn bị rời rạc nhiều và bạn coi nó là liên tục. Trong những trường hợp như vậy, việc xử lý dữ liệu theo yêu cầu có thể dẫn đến các ước tính hợp lý hơn

Theo đề xuất xử lý dữ liệu theo lệnh, hoạt động:

blep<-npudensbw(~ordered(geyser$waiting), 
                bwmethod="cv.ls", ckertype="epanechnikov", ckerorder=2)

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

Nó cũng thành công với các đơn đặt hàng kernel cao hơn, chẳng hạn như ckerorder=4trong ví dụ này:

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


Cảm ơn, nhưng tại sao nó hoạt động với nhân Gaussian hoặc trong Mathicala?
TMoek
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.