【发布时间】:2019-12-12 04:46:18
【问题描述】:
我想评估我模拟的数据的概率密度。
- 我知道,如果我只想找到正态分布上单个 x 值的概率密度,我可以按以下方式使用
dnorm():
dist_mean <- 10
dist_sd <- 0.2
prob_density_on_x_val <- dnorm(x = 9.9,
mean = dist_mean,
sd = dist_sd)
prob_density_on_x_val
[1] 1.760327
- 但是,如果我想评估 模拟 数据中两个 x 值之间范围的概率密度,该怎么办?
dist_mean <- 10
dist_sd <- 0.2
## simulate 100,000 values from the normal distribution,
## given specific mean and standard deviation.
set.seed(123)
random_vals <- rnorm(n = 100000,
mean = dist_mean,
sd = dist_sd)
hist(random_vals)
- 我生成的 100,000 个值是原始值,它们确实具有正常的形状。但是,这不是概率密度函数,因为曲线下的面积不等于 1。
library("pracma")
trapz(random_vals)
random_vals
[1] 1000009
我的问题:
- 根据我的模拟数据,如何为其创建概率密度函数?
- 创建后,对于两个 x 值之间的范围,我如何估计:(1) 曲线下的概率,和 (2) 曲线上的概率密度?例如,x=9.7 和 10.2 之间的概率和概率密度。或任何其他范围。
我试图解决这个问题:
在this comment 中,@Glen_b 说使用ecdf() 是在两个x 值“a”和“b”之间的范围内计算概率的方法:ecdf(b)-ecdf(a)。但是,有些事情没有意义,因为:
cdf <- ecdf(random_vals)
range_density <- cdf(10.2)-cdf(9.7)
range_density
[1] 0.77358
一个点值 (x=9.9) 上的概率密度怎么可能是 1.76,但是对于一个范围 9.7<x<10.2 它更小 (0.77)?两种分布(用dnorm 定义的一种和用rnorm 模拟的一种)具有相同的均值和标准差。
所以我认为我缺少一些基本的东西,如果能提供任何帮助,我将不胜感激。总的来说,这似乎是一个非常简单的问题,但是尽管进行了大量的阅读和挖掘,我还是找不到一个直接的解决方案。
谢谢!
编辑
我缺少的是:
- 一系列x值的概率:pdf曲线下的面积
-
特定 x 值的概率密度:给定 x 值的函数值(这就是
dnorm()的用处) - 范围的概率密度 沿着 pdf 曲线,在两个 x 值之间(选择的答案 + cmets 地址)
【问题讨论】:
标签: r normal-distribution probability-density