【问题标题】:Probability of a column between a range for a Normal Distribution列在正态分布范围之间的概率
【发布时间】:2017-09-04 06:24:04
【问题描述】:

我正在尝试获取一个新列,例如 duration_probablity,它获取值落在 6 到 12 小时之间的概率。 P(6 < Origin_Duration ≤ 12)

 dput(df)
structure(list(CRD_NUM = c(1000120005478330, 1000130009109199, 
1000140001635234, 1000140002374747, 1000140003618308, 1000140007236959, 
1000140015078086, 1000140026268650, 1000140027281272, 1000148000012215
), Origin_Duration = c("10:48:38", "07:41:34", "11:16:41", "09:19:35", 
"17:09:19", "08:59:05", "11:27:28", "12:17:41", "10:45:42", "12:19:05"
)), .Names = c("CRD_NUM", "Origin_Duration"), class = c("data.table", 
"data.frame"), row.names = c(NA, -10L))

            CRD_NUM Origin_Duration
 1: 1000120005478330        10:48:38
 2: 1000130009109199        07:41:34
 3: 1000140001635234        11:16:41
 4: 1000140002374747        09:19:35
 5: 1000140003618308        17:09:19
 6: 1000140007236959        08:59:05
 7: 1000140015078086        11:27:28
 8: 1000140026268650        12:17:41
 9: 1000140027281272        10:45:42
10: 1000148000012215        12:19:05

我不确定如何在 R 中做到这一点。我正在尝试获得标准正态分布的累积分布函数。通勤者在某个车站停留时间在 6 到 12 小时之间的概率。 输出例如 0.96 持续时间 11:16:41

我的 CDF 类似于 - P(6 <X≤ 12) = Φ((12−μ)/σ)−Φ((6−μ)/σ)

【问题讨论】:

  • 你有什么尝试吗?计算这些概率的方法是什么?预期的输出是什么?
  • @Sotos 我不确定如何在 R 中做到这一点。我正在尝试获取标准正态分布的累积分布函数。通勤者在某个车站停留时间在 6 到 12 小时之间的概率。输出例如 0.96 持续时间 11:16:41
  • 那么什么是 CDF 公式?它是如何定义的?你期望最终的结果是什么?您需要明确并提供尽可能多的信息
  • @Sotos P(6 <X≤ 12) = Φ((12−μ)/σ)−Φ((6−μ)/σ)
  • 请参阅 pnorm,但您的公式中缺少一些内容:数据与分布参数之间的联系。

标签: r normal-distribution


【解决方案1】:

从您的问题来看,您是否已经知道均值和方差尚不清楚。我将讨论这两种情况。另外,我假设您有理由相信持续时间实际上是正态分布的。

已知参数:如果您有预先指定的均值和方差。比如mu = 11sigma = 3。然后你可以使用P(6 < X ≤ 12) = P(X ≤ 12) - P(X ≤ 6)。基础 R 函数pnorm() 能够计算出这个:

mu    <- 11
sigma <- 3
pnorm(12, mu, sigma) - pnorm(6, mu, sigma)
# 0.5827683

未知参数,P(6 &lt; X &lt; 12):如果您还不知道均值和方差是什么,您可以使用数据中的估计值并使用student t-distribution 而不是正态分布(为什么这被称为“学生”分发的故事也很好。你可以在维基百科链接中找到它)。为了找到均值和方差,首先将df$Origin_Duration 从字符转换为某种时间类型是有意义的:

df$Origin_Duration <- as.POSIXct(df$Origin_Duration, format = "%H:%M:%S")

mu          <- mean(df$Origin_Duration)       # "2017-09-04 11:12:28 CEST"
df$demeaned <- df$Origin_Duration - mu
sigma       <- var(df$demeaned)^0.5           # 153.68 

请注意,在计算变异之前,我先减去了平均值。我这样做是为了获得以分钟为单位的持续时间。因此,标准偏差应为 153.68 分钟。

我们将使用pt 函数来计算概率P(X ≤ 12) - P(X ≤ 6)。为此,我们需要126 的标准化/缩放/规范化版本。也就是说,我们必须减去均值并除以标准差:

x6  <- as.numeric(difftime("2017-09-04 06:00:00", mu), unit = "mins")/sigma
x12 <- as.numeric(difftime("2017-09-04 12:00:00", mu), unit = "mins")/sigma

deg_fr <- length(df$demeaned)-1

p_x_smaller_than12 <- pt( x12, df = deg_fr )    #  0.6178973
p_x_smaller_than6  <- pt( x6,  df = deg_fr )    #  0.03627651
p_x_smaller_than12 - p_x_smaller_than6
# [1] 0.5816208

为回应评论添加:未知参数,所有条目:

# scale gives the distance from the mean in terms of standard deviations:
df$scaled <- scale(df$Origin_Duration)

pt(df$scaled, df = deg_fr)
# [1,] 0.4400575
# [2,] 0.1015886
# [3,] 0.5106114
# [4,] 0.2406431
# [5,] 0.9773264
# [6,] 0.2039751
# [7,] 0.5377728
# [8,] 0.6593331
# [9,] 0.4327620
# [10,] 0.6625280

【讨论】:

  • 均值和方差未知。对于每个卡号 - 基于持续时间,我需要找到概率。我得到了一些关于如何开始的信息。我的问题是针对数据集中的每一行,我需要获取概率值
  • 优秀。检查分布正态性的任何参考(Origin_Duration)
猜你喜欢
  • 2020-03-24
  • 2018-05-17
  • 2014-01-28
  • 2020-09-20
  • 2019-05-18
  • 2013-03-21
  • 1970-01-01
  • 1970-01-01
  • 2013-05-02
相关资源
最近更新 更多