获取数据的概率密度

sfa*_*tor 9 plot r distribution probability data-analysis

我需要分析有关DSL线路的互联网会话的一些数据.我想看看会话持续时间是如何分配的.我认为这样做的一个简单方法是首先制作所有会话持续时间的概率密度图.

我已经在R中加载了数据并使用了该density()函数.所以,它是这样的

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

我是R的新手和这种分析.这是我通过谷歌找到的.我有一个情节,但我留下了一些问题.这是正确的功能来做我想做的事还是还有别的什么?

在图中我发现Y轴刻度为0 ... 1.5.我不知道它怎么可能是1.5,不应该是0 ... 1?

此外,我想得到一个更平滑的曲线.由于数据集非常大,所以线条实际上是锯齿状的.当我提出这个问题时,让它们平滑会更好.我该怎么做呢?

eyj*_*yjo 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)
Run Code Online (Sandbox Code Playgroud)

应该给你这样的东西: 持续时间直方图

请注意,内核密度估计假定高斯内核为默认值.但带宽通常是最重要的因素.如果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  
Run Code Online (Sandbox Code Playgroud)

这是0.7752.检查它是否有数据,并按照nico的建议进行操作.你可能想看一下?bw.nrd.


nic*_*ico 2

您应该使用 bandwith ( bw) 参数来更改曲线的平滑度。一般来说,R 做得很好,并自动给出漂亮且平滑的曲线,但对于您的特定数据集来说,情况可能并非如此。

至于您正在使用的调用,是的,它是正确的,type="l"不是必需的,它是用于绘制密度对象的默认值。曲线下的面积(即密度函数从 -Inf 到 +Inf 的积分)将为 = 1。

现在,密度曲线是您的情况下使用的最佳选择吗?也许,也许不是……这实际上取决于您想要进行什么类型的分析。可能使用hist就足够了,而且可能会提供更多信息,因为您可以选择特定的持续时间段(请参阅 参考资料?hist获取更多信息)。