2017-01-12 4 views
3

In meinem unter R Code, Ich habe mich gefragt, wie ich könnte herausfinden, was rh1 ist wenn y == 0,5?Solving (Bestimmung) eine Funktion an einem Punkt in R

anzumerken, dass yatanh(rh1) verwendet, die zurück RH1 umgewandelt werden kanntanh() verwenden.

rh1 <- seq(-1, 0.1, by = 0.001) 
y <- pnorm(-0.13, atanh(rh1), 0.2) 
plot(rh1, y, type = "l") 

Antwort

4

Analytische Lösung

Für eine Normalverteilung X ~ N(mu, 0.2). Wir möchten mu finden, so dass Pr (X < -0.13) = y.

Rufen Sie Ihre vorherige Frage und meine Antwort da drüben: Determine a normal distribution given its quantile information. Hier haben wir etwas einfacheres, da es nur einen unbekannten Parameter und eine Quantilsinformation gibt.

Wieder starten wir durch Standardisierung:

Pr {X < -0.13} = y 
=> Pr { [(X - mu)/0.2] < [(-0.13 - mu)/0.2] } = y 
=> Pr { Z < [(-0.13 - mu)/0.2] } = y # Z ~ N(0,1) 
=> (-0.13 - mu)/0.2 = qnorm (y) 
=> mu = -0.13 - 0.2 * qnorm (y) 

Nun lassen atanh(rh1) = mu => rh1 = tanh(mu), so kurz gesagt, die analytische Lösung:

tanh(-0.13 - 0.2 * qnorm (y)) 

Numerische Lösung

Es ist ein Grundproblem. Wir bauen zuerst die folgende Funktion f, und wir zielen darauf ab, seine Wurzel zu finden, d.h. rh1, so dass f(rh1) = 0.

f <- function (rh1, y) pnorm(-0.13, atanh(rh1), 0.2) - y 

Die einfachste Wurzelfindungsmethode ist Bisektionsmethode, durch uniroot in R. implementiert empfehle ich Ihnen das Lesen Uniroot solution in R dafür, wie wir mit ihm im Allgemeinen funktionieren sollte.

curve(f(x, 0.5), from = -1, to = 0.1); abline (h = 0, lty = 2) 

Wir sehen, gibt es eine Wurzel zwischen (-0.2, 0), so:

uniroot(f, c(-0.2, 0), y = 0.5)$root 
# [1] -0.129243 
+0

'uniroot' tatsächlich etwas tut, ein wenig schicker als Halbierungs (Brent-Methode:‚Die Funktion Verwendung des ‚Gold-Abschnitt‘ macht Prozedur kombiniert mit der parabolischen Interpolation ', von http://www.netlib.org/c/brent.shar). Nicht dass es für dieses Problem wichtig wäre. –

3

Ihre Funktion ist monoton, so dass Sie einfach die Umkehrfunktion erstellen können.

rh1 <- seq(-1,.1,by=.001) 
y <- pnorm(-.13,atanh(rh1),.2) 

InverseFun = approxfun(y, rh1) 
InverseFun(0.5) 
[1] -0.1292726 
Verwandte Themen