R中的直方图

时间:2015-05-09 09:38:26

标签: r histogram probability

我正在寻找关于直方图的一些指导。

让我们假设我有这个vecotr(称为CF)

  [,1]    
 [1,] 2275.351
 [2,] 2269.562 
 [3,] 1925.700 
 [4,] 1904.195 
 [5,] 1974.039     

我使用以下公式在直方图中绘制此矢量。

hist(CF)

现在让我们假设我有一个属性的10 000个模拟值估计值。我想在直方图(或类似的图)中绘制那些,其中x轴返回概率。

这样的情节将使med有机会陈述如下:"概率为55%,财产价值超过1500万美元。

Suggerstions?

2 个答案:

答案 0 :(得分:5)

您可能需要的是累积分布函数(CDF)。它在y轴上有概率(不是x,如你所说),但由于这是表示所需信息的标准方法,因此最好使用此曲线。

作为一个例子,我用标准正态分布产生了10'000个值,然后构造了CDF:

CF <- rnorm(10000)
breaks <- seq(-4,4,0.5)
CDF <- sapply(breaks,function(b) sum(CF<=b)/length(CF))
plot(breaks,CDF,type="l")

从情节中,您可以例如以50%的概率读出,已经绘制了低于零的值。

如果您喜欢条形图,可以使用

进行绘图
barplot(CDF,names.arg=breaks)

我不太详细了解您的数据,因此我无法为您提供更准确的代码。但基本上,你必须选择一组合理的休息时间,然后应用上面的代码。

答案 1 :(得分:1)

我同意@Stibu你想要的CDF。当您谈论一组已实现的数据时,我们将其称为empirical cumulative distribution function(ECDF)。在R中,对此的基本函数调用是?ecdf

CF <- read.table(text="[1,] 2275.351
[2,] 2269.562 
[3,] 1925.700 
[4,] 1904.195 
[5,] 1974.039", header=F)
CF <- as.vector(CF[,-1])
CF  # [1] 2275.351 2269.562 1925.700 1904.195 1974.039
windows()
  plot(ecdf(CF))

enter image description here

如果您愿意下载fitdistrplus软件包,可以使用许多花哨的版本:

library(fitdistrplus)
windows()
  plotdist(CF)

enter image description here

fdn <- fitdist(CF, "norm")
fdw <- fitdist(CF, "weibull")
summary(fdw)
# Fitting of the distribution ' weibull ' by maximum likelihood 
# Parameters : 
#         estimate Std. Error
# shape   13.59732   4.833605
# scale 2149.24253  74.958140
# Loglikelihood:  -32.89089   AIC:  69.78178   BIC:  69.00065 
# Correlation matrix:
#           shape     scale
# shape 1.0000000 0.3328979
# scale 0.3328979 1.0000000
windows()
  plot(fdn)

enter code here

windows()
  cdfcomp(list(fdn,fdw), legendtext=c("Normal","Weibull"), lwd=2)

enter image description here