正态分布范围之间列的概率
Probability of a column between a range for a Normal Distribution
我正在尝试获取一个新的专栏,例如 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 for duration 11:16:41
我的 CDF 类似于 - P(6 <X≤ 12) = Φ((12−μ)/σ)−Φ((6−μ)/σ)
从你的问题来看,不清楚你是否已经知道均值和方差。我将讨论这两种情况。此外,我假设您有理由相信持续时间实际上是正态分布的。
已知参数:如果你有一个预先指定的均值和方差给定。比如说,mu = 11
和 sigma = 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 而不是正态分布(为什么将其称为 'student' 分布的故事也很好。您可以在维基百科 link 中找到它)。为了找到均值和方差,首先将 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)
。为此,我们需要 12
和 6
的标准化/缩放/规范化版本。也就是说,我们要减去均值再除以标准差:
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
我正在尝试获取一个新的专栏,例如 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 for duration 11:16:41
我的 CDF 类似于 - P(6 <X≤ 12) = Φ((12−μ)/σ)−Φ((6−μ)/σ)
从你的问题来看,不清楚你是否已经知道均值和方差。我将讨论这两种情况。此外,我假设您有理由相信持续时间实际上是正态分布的。
已知参数:如果你有一个预先指定的均值和方差给定。比如说,mu = 11
和 sigma = 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 而不是正态分布(为什么将其称为 'student' 分布的故事也很好。您可以在维基百科 link 中找到它)。为了找到均值和方差,首先将 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)
。为此,我们需要 12
和 6
的标准化/缩放/规范化版本。也就是说,我们要减去均值再除以标准差:
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