2016-07-23 19 views
2

Ich habe Daten cdecn:Plotten empirische kumulative Wahrscheinlichkeitsfunktion und deren inverse

set.seed(0) 
cdecn <- sample(1:10,570,replace=TRUE) 
a <- rnorm(cdecn,mean(cdecn),sd(cdecn)) 

Ich habe ein Diagramm erstellt, das die kumulativen Wahrscheinlichkeiten anzeigt.

aprob <- ecdf(a) 
plot(aprob) 

enter image description here

Ich frage mich, wie ich die x-Achse und y-Achse umschalten kann ein neues Grundstück zu erhalten, das heißt, die Umkehrung der ECDF.

Gibt es auch für die neue Grafik eine Möglichkeit, eine vertikale Linie hinzuzufügen, wo die meine Kurve 0 schneidet?

Antwort

2

Wir können Folgendes tun. Meine Kommentare entlang des Codes sind sehr erklärend.

## reproducible example 
set.seed(0) 
cdecn <- sample(1:10,570,replace=TRUE) 
a <- rnorm(cdecn,mean(cdecn),sd(cdecn)) ## random samples 

a <- sort(a) ## sort samples in ascending order 
e_cdf <- ecdf(a) ## ecdf function 
e_cdf_val <- 1:length(a)/length(a) ## the same as: e_cdf_val <- e_cdf(a) 

par(mfrow = c(1,2)) 

## ordinary ecdf plot 
plot(a, e_cdf_val, type = "s", xlab = "ordered samples", ylab = "ECDF", 
    main = "ECDF") 

## switch axises to get 'inverse' ECDF 
plot(e_cdf_val, a, type = "s", xlab = "ECDF", ylab = "ordered sample", 
    main = "'inverse' ECDF") 

## where the curve intersects 0 
p <- e_cdf(0) 
## [1] 0.01578947 

## highlight the intersection point 
points(p, 0, pch = 20, col = "red") 

## add a dotted red vertical line through intersection 
abline(v = p, lty = 3, col = "red") 

## display value p to the right of the intersection point 
## round up to 4 digits 
text(p, 0, pos = 4, labels = round(p, 4), col = "red") 

enter image description here

+0

Nein, keine Notwendigkeit, Ihre Antwort zu entfernen! Ich frage mich nur, ob Sie eine bessere Methode zum Hinzufügen der geraden Linie haben. Ich habe endlich etwas gefunden, aber es ist wahrscheinlich nicht sehr direkt. –

+0

Die Handlung mit der geschalteten Achse war, was ich suchte. Ich werde dem Diagramm eine zweite Kurve hinzufügen und die Unterschiede zwischen den Kurven veranschaulichen. Daher benötige ich eine vertikale Linie durch den Punkt (x, 0). In diesem Fall würde ich eine vertikale Linie bei ungefähr x = 0,05 wünschen. Also meine Frage ist, wie man diesen Punkt identifiziert. – Dylan

1
cdecn <- sample(1:10,570,replace=TRUE) 
a <- rnorm(cdecn,mean(cdecn),sd(cdecn)) 

aprob <- ecdf(a) 
plot(aprob) 

# Switch the x and y axes 
x <- seq(0,1,0.001754386) 
plot(y=knots(aprob), x=x, ylab = "Fn(y)") 

enter image description here

# Add a 45 degree straight line at 0, 0 
my_line <- function(x,y,...){ 
    points(x,y,...) 
    segments(min(x), y==0, max(x), max(y),...) 
} 
lines(my_line(x=x, y = knots(aprob))) 

enter image description here

0

Die "Gerade bei x == 0" Bit macht mich vermuten, dass Sie eine qqplot wollen:

qqnorm(a) 
qqline(a)