2017-09-04 12 views
3

新しい列を取得しようとしています。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時間になる確率。あなたがすでに平均と分散を知っているかどうかは不明である、あなたの質問からP(6 <X≤ 12) = Φ((12−μ)/σ)−Φ((6−μ)/σ)

+0

あなたは何を試してみましたか?これらの確率を計算する背後にある方法論は何ですか?予想される出力は何ですか? – Sotos

+0

@Sotos私はRでそれを行う方法がわかりません。私は標準正規分布の累積分布関数を取得しようとしています。通勤者の滞在時間が特定の駅で6時間から12時間になる確率。出力は、たとえば、持続時間11:16:41の場合、0.96となります。 – RUser

+0

したがって、CDF式は何ですか?どのように定義されていますか?あなたは最終的な結果がどうなると思いますか?あなたは明示し、できるだけ多くの情報を提供する必要があります – Sotos

答えて

4

- 出力は、期間中、たとえば0.96のために11時16分41秒

を言うことになる私のCDFは、ようなものになるだろう。私は両方の場合について議論するつもりです。また、私は、期間が実際に正常に分配されていると信じる理由があると仮定します。

既知パラメータ:あらかじめ指定された平均と分散がある場合。言って、mu = 11sigma = 3。その後、それを使用することができますP(6 < X ≤ 12) = P(X ≤ 12) - P(X ≤ 6)

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

未知のパラメータ、P(6 < X < 12):あなたはまだ平均と分散が何であるかわからない場合、あなたはあなたのデータから推計を使用して、代わりにstudent t-distributionを使用することができ、ベースR機能pnorm()はこれを計算することができます正規分布(なぜこれを「生徒分布」と呼ぶのかという話は素晴らしいですが、それはウィキペディアのリンクで見つけることができます)。平均と分散を見つけるためには、まずいくつかの時間型への文字からdf$Origin_Durationを変換するために理にかなって:私は変化を計算する前に、第1の平均を差し引い

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分と読み取られます。

確率P(X ≤ 12) - P(X ≤ 6)を計算するのにpt関数を使用します。そのためには、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