R 获取数据的概率密度

R 获取数据的概率密度,r,plot,probability,distribution,data-analysis,R,Plot,Probability,Distribution,Data Analysis,我需要分析一些关于DSL线路的互联网会话的数据。我想看看会话持续时间是如何分配的。我想一个简单的方法是首先绘制所有会话持续时间的概率密度图 我已经在R中加载了数据,并使用了density()函数。是这样的 plot(density(data$duration), type = "l", col = "blue", main = "Density Plot of Duration", xlab = "duration(h)", ylab = "probability density")

我需要分析一些关于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


另外,我想得到一条更平滑的曲线。因为数据集非常大,所以线条非常参差不齐。在我介绍这篇文章的时候,最好把它们整理一下。我该怎么做呢?

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

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


现在,在你的情况下,密度曲线是最好的选择吗?也许,也许不是。。。这取决于你想做什么样的分析。可能使用
hist
就足够了,而且可能会提供更多信息,因为您可以选择特定的持续时间仓位(有关更多信息,请参见
?hist
)。

正如nico所说,您应该查看
hist
,但您也可以将两者结合起来。然后可以用
调用密度。 例如:


这里是0.7752。检查您的数据,并按照nico的建议进行处理。你可能想看看
?bw.nrd

我本来想在前面的答案中添加这个作为注释,但它太大了。 明显的倾斜是由于值在直方图中的分块方式造成的。对离散数据使用直方图通常是错误的。见下文

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())
set.seed(1001)

谢谢,我会看一看,但我仍然不明白为什么密度轴会大于1。正如我所说,曲线下的面积(即总和(dx*y))等于1。y轴的实际值因带宽而异。较小的带宽值将生成较高的y值。尝试绘制
密度(rnorm(1000),0.2)
密度(rnorm(1000),2)
以查看差异。hist相对于密度看起来向右倾斜。这是因为假设一个具有泊松分布变量的正态核吗?@David:我不能100%确定R是如何计算密度估计的。我想这也可能是直方图的分类问题,但我把答案留给了比我更有知识的人。你误解了密度。X的密度可以看作是一个与从总体中提取一个与X非常接近的数字的概率成正比的值。现在根据定义,密度函数的积分等于1。这并不意味着密度函数的最大值应该是1,它很容易会更大。事实上,对于df=(1,1)的F分布,密度的最大值(在0处)甚至是无穷大。@Joris是的,我现在意识到我没有正确地解释它。我相当简单地假设,由于它是一个概率分布,它将小于1:)@JorisMeys,当曲线下的总面积为1时,PDF怎么可能大于1?如果PDF超过1,是否可能是分布不正态且需要归一化?@karthiks,因为例如高度为10、宽度为0.01的矩形的面积为0.1,而Y值(因此PDF)为10。对于需要同时考虑X轴和Y轴的区域,而不仅仅是Y轴。是的,也就是说,箱子将始终位于整数的任一侧(右=真vs.右=假)。我主要是将其用于数据的预先可视化,没有什么害处。但是它可以很容易地用一个简单的-0.5的密度来修正…@eyjo:这是假设你使用的是整数打断,但你不受它的限制
> 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  
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())