2010-11-18 38 views
9

Tôi cần phân tích một số dữ liệu về các phiên internet cho một Đường DSL. Tôi muốn xem xét cách phân bổ thời lượng phiên. Tôi đã tìm ra một cách đơn giản để làm điều này sẽ là bắt đầu bằng cách tạo một biểu đồ mật độ xác suất trong suốt thời gian của tất cả các phiên.Mật độ xác suất của dữ liệu

Tôi đã tải dữ liệu trong R và sử dụng chức năng density(). Vì vậy, nó giống như thế này

plot(density(data$duration), type = "l", col = "blue", main = "Density Plot of Duration", 
    xlab = "duration(h)", ylab = "probability density") 

Tôi mới dùng R và loại phân tích này. Đây là những gì tôi tìm thấy từ đi qua google. Tôi có một âm mưu nhưng tôi bị bỏ lại với một số câu hỏi. Đây có phải là chức năng đúng để làm những gì tôi đang cố gắng làm hay có cái gì khác?

Trong cốt truyện tôi thấy rằng thang đo trục Y là từ 0 ... 1.5. Tôi không hiểu làm thế nào nó có thể là 1,5, không nên nó từ 0 ... 1?

Ngoài ra, tôi muốn có đường cong mượt mà hơn. Kể từ đó, tập dữ liệu thực sự lớn các dòng thực sự bị lởm chởm. Sẽ tốt hơn nếu chúng được làm mịn khi tôi trình bày điều này. Tôi sẽ làm thế nào?

+5

Bạn hiểu sai mật độ. Mật độ của X có thể được xem như là một giá trị ** tỷ lệ thuận với ** cơ hội vẽ từ dân số một số nằm trong khoảng gần của X. Bây giờ theo định nghĩa tích phân của hàm mật độ bằng 1.Điều này không có nghĩa là giá trị tối đa của hàm mật độ phải là 1, nó có thể dễ dàng lớn hơn. Trong thực tế, đối với phân bố F với df = (1,1), giá trị lớn nhất của mật độ (tại 0) thậm chí là vô cùng. –

+0

@ Joris yes Tôi bây giờ nhận ra rằng tôi đã không giải thích nó một cách chính xác. khá đơn giản, tôi giả định rằng vì phân bố xác suất của nó sẽ nhỏ hơn 1 :). – sfactor

Trả lời

2

Bạn nên chơi xung quanh với tham số băng thông (bw) để thay đổi độ trơn của đường cong. Nói chung R làm một công việc tốt và tự động đưa ra một đường cong đẹp và trơn tru, nhưng có lẽ đó không phải là trường hợp cho tập dữ liệu cụ thể của bạn.

Đối với cuộc gọi bạn đang sử dụng, có, nó là chính xác, type="l" là không cần thiết, nó là mặc định được sử dụng để vẽ các đối tượng mật độ. Khu vực dưới đường cong (tức là tích phân từ -Inf đến + Inf của hàm mật độ của bạn) sẽ là = 1.

Bây giờ, đường cong mật độ là điều tốt nhất để sử dụng trong trường hợp của bạn? Có lẽ, có thể không ... nó thực sự phụ thuộc vào loại phân tích bạn muốn làm. Có thể sử dụng hist sẽ là đủ và có thể nhiều thông tin hơn khi bạn có thể chọn các thùng thời gian cụ thể (xem ?hist để biết thêm thông tin).

+0

cảm ơn tôi sẽ có một cái nhìn nhưng tôi vẫn không hiểu tại sao Density Axis sẽ lớn hơn 1. – sfactor

+0

Như tôi đã nói, đó là khu vực dưới đường cong (đó là tổng (dx * y)) đó là = 1 Giá trị thực tế của trục y thay đổi tùy thuộc vào băng thông. Giá trị băng thông nhỏ hơn sẽ tạo ra giá trị y cao hơn. Hãy thử vẽ âm lượng 'mật độ (rnorm (1000), 0,2)' và 'mật độ (rnorm (1000), 2)' để xem sự khác biệt. – nico

+0

Lịch sử trông có vẻ sai lệch so với mật độ. là vì giả định của một hạt nhân bình thường với một biến poisson distrbuted? –

10

Như nico đã nói, bạn nên xem hist, nhưng bạn cũng có thể kết hợp cả hai. Sau đó, bạn có thể gọi mật độ với số lines. Ví dụ:

duration <- rpois(500, 10) # For duration data I assume Poisson distributed 
hist(duration, 
    probability = TRUE, # In stead of frequency 
    breaks = "FD",  # For more breaks than the default 
    col = "darkslategray4", border = "seashell3") 
lines(density(duration - 0.5), # Add the kernel density estimate (-.5 fix for the bins) 
    col = "firebrick2", lwd = 3) 

nên cung cấp cho bạn một cái gì đó như: Histogram of duration

Lưu ý rằng ước tính mật độ hạt nhân giả định một nhân Gaussian như mặc định. Nhưng băng thông thường là yếu tố quan trọng nhất. Nếu bạn gọi trực tiếp số density báo cáo băng thông ước tính mặc định:

> density(duration) 

Call: 
     density.default(x = duration) 

Data: duration (500 obs.);  Bandwidth 'bw' = 0.7752 

     x     y    
Min. : 0.6745 Min. :1.160e-05 
1st Qu.: 7.0872 1st Qu.:1.038e-03 
Median :13.5000 Median :1.932e-02 
Mean :13.5000 Mean :3.895e-02 
3rd Qu.:19.9128 3rd Qu.:7.521e-02 
Max. :26.3255 Max. :1.164e-01 

Đây là 0.7752. Kiểm tra nó cho dữ liệu của bạn và chơi xung quanh với nó như nico đề nghị. Bạn có thể muốn xem ?bw.nrd.

+0

rất tốt ~~~~~~~~~~~~~~~~~~ –

1

Tôi sẽ thêm điều này làm nhận xét cho câu trả lời trước, nhưng nó quá lớn. Sai lệch rõ ràng là do cách thức các giá trị được binned trong một biểu đồ. Nó thường là một sai lầm khi sử dụng biểu đồ cho dữ liệu rời rạc. Xem bên dưới ...

set.seed(1001) 
tmpf <- function() { 
    duration <- rpois(500, 10) # For duration data I assume Poisson distributed 
    hist(duration, 
     probability = TRUE, # In stead of frequency 
     breaks = "FD",  # For more breaks than the default 
     col = "darkslategray4", border = "seashell3", 
     main="",ann=FALSE,axes=FALSE,xlim=c(0,25),ylim=c(0,0.15)) 
    box() 
    lines(density(duration), # Add the kernel density estimate 
     col = "firebrick2", lwd = 3) 
    par(new=TRUE) 
    plot(table(factor(duration,levels=0:25))/length(duration), 
     xlim=c(0,25),ylim=c(0,0.15),col=4,ann=FALSE,axes=FALSE) 
} 

par(mfrow=c(3,3),mar=rep(0,4)) 
replicate(9,tmpf()) 
+0

Có, đúng vậy, các thùng sẽ luôn ở bên cạnh số nguyên (phải = TRUE so với phải = FALSE). Tôi chủ yếu chỉ sử dụng điều này để xem trước dữ liệu, ít gây hại ở đó. Nhưng nó có thể dễ dàng được cố định với một đơn giản -0.5 đến mật độ ... – eyjo

+0

@eyjo: đó là giả sử bạn đang sử dụng số nguyên ngắt, nhưng bạn không bị giới hạn bởi điều đó – nico

Các vấn đề liên quan