正态分布的范围之间的列的概率

问题描述:

我想要得到一个新的列,说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 

我不知道该怎么办,在河,我试图让标准正态分布的累积分布函数。通勤者在某站的停留时间在6-12小时之间的概率。 输出会说,例如0.96持续时间11点十六分41秒

我的CDF会是这样的 - P(6 <X≤ 12) = Φ((12−μ)/σ)−Φ((6−μ)/σ)

+0

你有没有尝试什么吗?计算这些概率的方法是什么?什么是预期的输出? – Sotos

+0

@Sotos我不知道如何在R中做到这一点。我试图获得标准正态分布的累积分布函数。通勤者在某站的停留时间在6-12小时之间的概率。例如,输出将持续时间为0.96 11:16:41 – RUser

+0

那么什么是CDF公式?它是如何定义的?你期望最终的结果是什么?你需要明确并提供尽可能多的信息 – Sotos

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

已知参数:如果您有给定的预先指定的均值和方差。说,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 < X < 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 
+0

均值和方差未知。 \t 对于每个卡号 - 基于持续时间,我需要找到概率。我得到了一些关于如何开始的信息。我的问题是针对数据集中的每一行,我需要得到概率值 – RUser

+0

查看更新的答案 –

+0

非常好。任何引用来检查分布的正态性(Origin_Duration) – RUser