2010-11-18 125 views
9

我需要分析一些關於DSL線路的互聯網會話的數據。我想看看會話持續時間是如何分配的。我想到一個簡單的方法來做到這一點,首先要製作所有會話持續時間的概率密度圖。獲取數據的概率密度

我已經加載了R中的數據並使用了density()函數。所以,它是這樣的

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

我是新來的R和這種分析。這是我通過谷歌搜索發現的。我有一個情節,但我留下了一些問題。這是正確的功能去做我想做的事還是還有別的?

在圖中我發現Y軸刻度是從0 ... 1.5。我不明白它是如何可能是1.5,不應該從0 ... 1?

此外,我想獲得更平滑的曲線。因爲,數據集非常大,線條實際上是鋸齒狀的。當我提出這個問題時,讓他們平滑下來會更好。我會怎麼做呢?

+5

你誤解了密度。 X的密度可以被看作一個值**,與**從總體中抽取一個位於X附近的數字成比例。現在根據定義,密度函數的積分等於1。這並不意味着密度函數的最大值應該是1,它可以很容易地變大。事實上,對於df =(1,1)的F分佈,密度的最大值(在0處)甚至是無窮大。 – 2010-11-18 13:18:42

+0

@Joris是的,我現在意識到我沒有正確解釋它。簡單地說,我認爲,因爲它的概率分佈將小於1 :)。 – sfactor 2010-11-18 14:08:29

回答

2

你應該使用bandwith(bw)參數來改變曲線的平滑度。通常R做得很好,並自動給出一個很好的和平滑的曲線,但是對於您的特定數據集可能不是這種情況。

至於你正在使用的呼叫,是的,這是正確的,type="l"是沒有必要的,它是用於繪製密度對象的默認值。曲線下的面積(即密度函數的-Inf到+ Inf的積分)將爲1.

現在,密度曲線是最適合您的情況嗎?也許,也許不是......這取決於你想要做什麼類型的分析。可能使用hist就足夠了,並且可能會提供更多信息,因爲您可以選擇特定的持續時間(有關更多信息,請參閱?hist)。

+0

謝謝我會看看,但我仍然不明白爲什麼密度軸會大於1. – sfactor 2010-11-18 12:56:08

+0

正如我所說,它是曲線下面積(即sum(dx * y))= 1 。y軸的實際值根據帶寬而變化。較小的帶寬值將產生較高的y值。嘗試繪製密度(rnorm(1000),0.2)和密度(rnorm(1000),2)'以查看差異。 – nico 2010-11-18 13:16:41

+0

該hist相對於密度看起來右傾斜。是因爲假設一個具有泊松分佈變量的正態核心? – 2010-11-18 13:19:00

10

正如尼科所說,你應該檢查出hist,但你也可以結合他們兩個。然後你可以用lines來代替密度。 例子:

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) 

應該給你這樣的: Histogram of duration

注意,核密度估計假設高斯核爲默認。但帶寬通常是最重要的因素。如果你打電話density其直接報告的默認估計帶寬:

> 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 

這是0.7752。檢查它的數據並按照nico的建議進行操作。您可能需要查看?bw.nrd

+0

非常好~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ – 2012-01-09 13:50:19

1

我打算將此添加爲對上一個答案的評論,但它太大了。 視在傾斜是由於值在直方圖中被分組的方式。對離散數據使用直方圖通常是一個錯誤。見下面...

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

是的,這是正確的,箱將始終在整數的任一側(右= TRUE與右= FALSE)。我主要是使用它來事先對數據進行可視化處理,而對此沒有什麼影響但它可以很容易地固定一個簡單的-0.5密度... – eyjo 2010-11-18 18:18:40

+0

@eyjo:這是假設你使用整數中斷,但你不受限制 – nico 2010-11-18 19:16:31