2017-09-04 2 views
3

Ich versuche, eine neue Spalte sagen duration_probablity, die die Wahrscheinlichkeit eines Werts zwischen 6 und 12 Stunden fällt. P(6 < Origin_Duration ≤ 12)Wahrscheinlichkeit einer Spalte zwischen einem Bereich für eine Normalverteilung

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 

Ich bin nicht sicher, wie dass ich versuche zu bekommen kumulative Verteilungsfunktion der Standardnormalverteilung in R. zu tun. Die Wahrscheinlichkeit, dass die Aufenthaltsdauer eines Pendlers an bestimmten Stationen zwischen 6 und 12 Stunden beträgt. Der Ausgang würde zum Beispiel sagen, 0,96 für die Dauer 11:16:41

Meine CDF würde wie etwas sein - P(6 <X≤ 12) = Φ((12−μ)/σ)−Φ((6−μ)/σ)

+0

Haben Sie versucht, etwas? Was ist die Methodik zur Berechnung dieser Wahrscheinlichkeiten? Was ist die erwartete Ausgabe? – Sotos

+0

@Sotos Ich bin nicht sicher, wie das in R zu tun ist. Ich versuche, kumulative Verteilungsfunktion der Standardnormalverteilung zu bekommen. Die Wahrscheinlichkeit, dass die Aufenthaltsdauer eines Pendlers an bestimmten Stationen zwischen 6 und 12 Stunden beträgt. Die Ausgabe würde sagen, zum Beispiel 0,96 für die Dauer 11:16:41 – RUser

+0

Also was ist die CDF Formeln? Wie ist es definiert? Was erwartest du vom Endergebnis? Sie müssen explizit sein und so viele Informationen wie möglich geben. – Sotos

Antwort

4

Aus Ihrer Frage unklar ist, ob Sie bereits über die Mittel und die Varianz oder nicht wissen. Ich werde beide Fälle diskutieren. Ich gehe auch davon aus, dass Sie Grund zu der Annahme haben, dass die Laufzeiten tatsächlich normal verteilt sind.

Bekannte Parameter: Wenn Sie einen vorgegebenen Mittelwert und die angegebene Varianz haben. Sprich, mu = 11 und sigma = 3. Dann können Sie das P(6 < X ≤ 12) = P(X ≤ 12) - P(X ≤ 6) verwenden. Die Basis R-Funktion pnorm() ist in der Lage, dies zu berechnen:

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

Unbekannten Parameter, P(6 < X < 12): Wenn Sie noch nicht wissen, was der Mittelwert und die Varianz sind, können Sie Schätzungen von Daten verwenden und die student t-distribution stattdessen verwenden von der normalen Verteilung (die Geschichte, warum das "Studentenverteilung" genannt wird, ist auch nett. Sie können es im wikipedia-Link finden). Um den Mittelwert und die Varianz zu finden, ist es sinnvoll, zunächst df$Origin_Duration von Charakter einiger Zeit Typ zu verwandeln:

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 

Beachten Sie, dass ich den Mittelwert subtrahiert zunächst vor der Änderung zu berechnen. Ich habe das getan, um die Dauer in Minuten zu haben. Die Standardabweichung ist daher als 153,68 Minuten zu lesen.

Wir werden die pt Funktion verwenden, um die Wahrscheinlichkeit P(X ≤ 12) - P(X ≤ 6) zu berechnen. Um dies zu erreichen, benötigen wir eine standardisierte/skalierte/normalisierte Version von 12 und 6. Das heißt, wir haben die Mittel und dividieren durch die Standardabweichung subtrahieren:

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 

hinzugefügt Kommentar als Antwort: Unbekannt Parameter, alle Einträge:

# 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

Mittelwert und Varianz sind unbekannt. \t Für jede Kartennummer - basierend auf der Dauer, muss ich die Wahrscheinlichkeit finden.Ich habe Informationen darüber bekommen, wie ich anfangen soll. Meine Frage ist für jede Zeile in der Datenmenge, ich muss bekommen Wahrscheinlichkeit Wert – RUser

+0

Siehe die aktualisierte Antwort –

+0

Ausgezeichnet. Jede Referenz zur Überprüfung der Normalverteilung (Origin_Duration) – RUser

Verwandte Themen