Ước tính phân phối từ dữ liệu


12

Tôi có một mẫu dữ liệu được tạo Rbởi rnorm(50,0,1), vì vậy dữ liệu rõ ràng có phân phối bình thường. Tuy nhiên, Rkhông "biết" thông tin phân phối này về dữ liệu.

Có một phương pháp nào trong Rđó có thể ước tính loại phân phối mà mẫu của tôi đến từ đâu không? Nếu không, tôi sẽ sử dụng shapiro.testchức năng và tiến hành theo cách đó.


Tôi không chắc là tôi nhận ra kết quả của câu hỏi này. Đúng là nếu bạn chỉ có một vectơ số trong R, thì không có nhiều siêu dữ liệu liên quan đến nó, nhưng tại sao điều đó lại làm phiền bạn? Tại sao bạn cần điều đó / bạn muốn làm gì với nó? Giả sử nó đã có như vậy, nó sẽ chỉ hữu ích trong phạm vi mà bạn đã truyền vectơ đó cho một hàm với các phương thức cụ thể cho dữ liệu Gaussian so với khác. Tôi không biết về bất kỳ ai (mặc dù tôi hầu như không phải là người dùng R chuyên gia nhất thế giới).
gung - Phục hồi Monica

Nếu bạn chỉ muốn kiểm tra xem bất kỳ mẫu đã cho nào có vẻ bình thường hay không, thử nghiệm Shapiro-Wilk là một lựa chọn hợp lý (mặc dù nó đáng để bạn đọc câu hỏi này và câu trả lời được đưa ra ở đó). Tôi có thể thấy làm thế nào điều này có thể xuất hiện trong một nghiên cứu mô phỏng, nhưng không có thêm chi tiết về nghiên cứu này, thật khó để đưa ra một câu trả lời hữu ích.
gung - Phục hồi Monica

Tại sao bạn cần xác định phân phối cho dữ liệu? Lựa chọn phân phối tự động thường là một ý tưởng hấp dẫn, nhưng điều đó không làm cho nó trở thành một ý tưởng tốt.
Glen_b -Reinstate Monica

Câu trả lời:


21

fitdistrchức năng trong gói MASS hoặc một số chức năng trong gói fitdistrplus . Dưới đây là một số ví dụ từ sau này.

require(fitdistrplus)

set.seed(1)
dat <- rnorm(50,0,1)
f1 <- fitdist(dat,"norm")
f2 <- fitdist(dat,"logis")
f3 <- fitdist(dat,"cauchy")

ví dụ

> f1
Fitting of the distribution ' norm ' by maximum likelihood 
Parameters:
      estimate Std. Error
mean 0.1004483 0.11639515
sd   0.8230380 0.08230325

và bạn có thể thấy các lô với

plotdist(dat,"norm",para=list(mean=f1$estimate[1],sd=f1$estimate[2]))
plotdist(dat,"logis",para=list(location=f2$estimate[1],scale=f2$estimate[2]))
plotdist(dat,"cauchy",para=list(location=f3$estimate[1],scale=f3$estimate[2]))

vì vậy nó có vẻ hợp lý như một phân phối bình thường

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

nhưng cũng có thể là một phân phối logistic (bạn sẽ cần một mẫu lớn hơn để phân biệt chúng trong các đuôi)

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

mặc dù với một qqplot và nhìn vào CDF, bạn có thể biết rằng đây có lẽ không phải là một bản phân phối Cauchy

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


1
Cảm ơn Henry cho một cái nhìn tổng quan đáng yêu. Tôi đã được hỏi nếu có bất kỳ gói nào lấy dữ liệu và nhổ ra phân phối (và tham số) nào tốt nhất. Bạn có biết bất kỳ chức năng như vậy trong bất kỳ gói nào không?
Roman Luštrik

3
fitdistcung cấp các ước tính của các tham số. Có một số gợi ý về việc phân phối có thể là gì từ các chức năng như descdist(dat, boot = 1000)nhưng chúng cũng sẽ được hưởng lợi từ một mẫu lớn hơn.
Henry

Không có chức năng nào trong số này sẽ giải quyết vấn đề bạn đặt ra trong câu hỏi cuối cùng của bạn khi mẫu không đại diện.
Giăng

1
@Scott Kaiser: Tôi không nghĩ vậy. fitdist()là một chức năng trong gói fitdistrplus và đây là những gì tôi đang sử dụng. Trong khi đó, fitdistr()là một chức năng trong gói MASS và sẽ không hoạt động ở đây trong mẫu này.
Henry

1
Tôi không có đủ điểm để thêm nhận xét này như một nhận xét, nhưng chỉ là một ghi chú bổ sung cho thông tin được cung cấp trong chuỗi trên, bạn cũng có thể gọi đơn giản plot(f1)thay vì bị plotdist(dat,"norm",para=list(mean=f1$estimate[1],sd=f1$estimate[2]))
chê
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.