Làm thế nào tôi có thể ước tính mật độ của một tham số không tăng trong R?


10

Tôi có một bộ dữ liệu với rất nhiều số không giống như thế này:

set.seed(1)
x <- c(rlnorm(100),rep(0,50))
hist(x,probability=TRUE,breaks = 25)

Tôi muốn vẽ một đường cho mật độ của nó, nhưng density()hàm sử dụng một cửa sổ chuyển động để tính các giá trị âm của x.

lines(density(x), col = 'grey')

Có một density(... from, to)đối số, nhưng dường như chúng chỉ cắt bớt phép tính, không làm thay đổi cửa sổ để mật độ tại 0 phù hợp với dữ liệu có thể được nhìn thấy bởi âm mưu sau:

lines(density(x, from = 0), col = 'black')

(nếu nội suy được thay đổi, tôi hy vọng rằng đường màu đen sẽ có mật độ cao hơn 0 so với đường màu xám)

Có những lựa chọn thay thế cho chức năng này sẽ cung cấp một tính toán tốt hơn về mật độ ở mức 0?

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

Câu trả lời:


14

Mật độ là vô hạn ở mức 0 vì nó bao gồm một đột biến rời rạc. Bạn cần ước tính mức tăng đột biến bằng cách sử dụng tỷ lệ số không, và sau đó ước tính phần dương của mật độ giả sử nó trơn tru. KDE sẽ gây ra vấn đề ở đầu bên trái vì nó sẽ đặt trọng số lên các giá trị âm. Một cách tiếp cận hữu ích là chuyển đổi thành nhật ký, ước tính mật độ bằng KDE và sau đó chuyển đổi trở lại. Xem Wand, Marron & Ruppert (JASA 1991) để tham khảo.

Hàm R sau đây sẽ thực hiện mật độ biến đổi:

logdensity <- function (x, bw = "SJ") 
{
    y <- log(x)
    g <- density(y, bw = bw, n = 1001)
    xgrid <- exp(g$x)
    g$y <- c(0, g$y/xgrid)
    g$x <- c(0, xgrid)
    return(g)
}

Sau đó, sau đây sẽ đưa ra cốt truyện bạn muốn:

set.seed(1)
x <- c(rlnorm(100),rep(0,50))
hist(x,probability=TRUE,breaks = 25)
fit <- logdensity(x[x>0]) # Only take density of positive part
lines(fit$x,fit$y*mean(x>0),col="red") # Scale density by proportion positive
abline(v=0,col="blue") # Add spike at zero.

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


Cảm ơn câu trả lời của bạn, nhưng tôi bối rối - bạn nói 'ước tính mức tăng đột biến bằng cách sử dụng tỷ lệ số không' nhưng vẽ nó không có giới hạn. Spike có chiều cao riêng biệt hay là vô hạn, nếu rời rạc, nó có phải là không? P(X= =0)
Abe

Đây là một hỗn hợp của một phân phối rời rạc và phân phối liên tục. Khi được vẽ như một mật độ, sự tăng đột biến là vô hạn (thực ra là hàm delta Dirac). Đôi khi người ta vẽ phần rời rạc như một hàm khối lượng xác suất (do đó, phần tăng vọt có chiều cao ) và phần liên tục là hàm mật độ. Điều đó có thể làm cho một hình ảnh tốt hơn, nhưng nó liên quan đến hai quy mô khác nhau. P(X= =0)
Rob Hyndman

cái này có ích fyi: có vẻ như, mặc dù bw = "SJ" ảnh hưởng đến mật độ trong không gian chưa được dịch, mật độ là như nhau khi sử dụng "SJ" và "nrd0" mặc định ... Tôi sắp đọc tài liệu tham khảo SJ: "Sheather và Jones (1991) Một phương pháp lựa chọn băng thông dựa trên dữ liệu đáng tin cậy để ước tính mật độ hạt nhân. " jstor.org/urdy/2345597
Abe

4

Tôi đồng ý với Rob Hyndman rằng bạn cần phải giải quyết các số 0 một cách riêng biệt. Có một vài phương pháp xử lý ước tính mật độ hạt nhân của một biến có hỗ trợ giới hạn, bao gồm 'phản xạ', 'tái chuẩn hóa' và 'kết hợp tuyến tính'. Chúng không được triển khai trong densitychức năng của R , nhưng có sẵn trong gói của Benn Jann kdenscho Stata .


1

Một tùy chọn khác khi bạn có dữ liệu có giới hạn logic thấp hơn (chẳng hạn như 0, nhưng có thể là các giá trị khác) mà bạn biết dữ liệu sẽ không đi bên dưới và ước tính mật độ hạt nhân thông thường đặt các giá trị bên dưới giới hạn đó (hoặc nếu bạn có giới hạn trên hoặc cả hai) là sử dụng ước tính logspline. Gói logspline cho R thực hiện các hàm này và các hàm có các đối số để chỉ định các giới hạn để ước tính sẽ đi đến giới hạn, nhưng không vượt quá và vẫn mở rộng thành 1.

Ngoài ra còn có các phương thức ( oldlogsplinehàm) sẽ tính đến kiểm duyệt khoảng thời gian, vì vậy nếu các số 0 đó không chính xác bằng 0, nhưng được làm tròn để bạn biết chúng đại diện cho các giá trị giữa 0 và một số số khác (ví dụ: giới hạn phát hiện) có thể cung cấp thông tin đó cho chức năng phù hợp.

Nếu các số 0 thêm là đúng 0 (không được làm tròn) thì ước tính khối lượng tăng đột biến hoặc điểm là cách tiếp cận tốt hơn, nhưng cũng có thể được kết hợp với ước tính logspline.


0

Bạn có thể thử giảm băng thông (đường màu xanh là dành cho adjust=0.5), nhập mô tả hình ảnh ở đây

nhưng có lẽ KDE không phải là phương pháp tốt nhất để xử lý dữ liệu đó.


Có một phương pháp khác mà bạn muốn giới thiệu?
Abe

@Abe Vâng, điều này phụ thuộc vào những gì bạn muốn làm ...
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.