halfnormal              package:fdrtool              R Documentation

_T_h_e _H_a_l_f-_N_o_r_m_a_l _D_i_s_t_r_i_b_u_t_i_o_n

_D_e_s_c_r_i_p_t_i_o_n:

     Density, distribution function, quantile function and random
     generation for the half-normal distribution with parameter
     'theta'.

_U_s_a_g_e:

     dhalfnorm(x, theta=sqrt(pi/2), log = FALSE)
     phalfnorm(q, theta=sqrt(pi/2), lower.tail = TRUE, log.p = FALSE)
     qhalfnorm(p, theta=sqrt(pi/2), lower.tail = TRUE, log.p = FALSE)
     rhalfnorm(n, theta=sqrt(pi/2))
     sd2theta(sd)
     theta2sd(theta)

_A_r_g_u_m_e_n_t_s:

     x,q: vector of quantiles.

       p: vector of probabilities.

       n: number of observations. If 'length(n) > 1', the length is
          taken to be the number required.

   theta: parameter of half-normal distribution.

log, log.p: logical; if TRUE, probabilities p are given as log(p).

lower.tail: logical; if TRUE (default), probabilities are P[X <= x],
          otherwise, P[X > x].

      sd: standard deviation of the zero-mean normal distribution  that
          corresponds to the half-normal with parameter 'theta'. 

_D_e_t_a_i_l_s:

     'x = abs(z)' follows a half-normal distribution with if 'z' is a
     normal variate with zero mean.  The half-normal distribution has
     density

                f(x) = 2*theta/pi e^-(x^2*theta^2/pi)

     It has mean  E(x) = 1/theta and variance  Var(x) =
     (pi-2)/(2*theta^2).

     The parameter theta is related to the standard deviation sigma of
     the corresponding  zero-mean normal distribution by the equation
     theta = sqrt(pi/2)/sigma.

     If theta is not specified in the above functions  it assumes the
     default values of sqrt(pi/2),  corresponding to sigma=1.

_V_a_l_u_e:

     'dhalfnorm' gives the density, 'phalfnorm' gives the distribution
     function, 'qhalfnorm' gives the quantile function, and 'rhalfnorm'
     generates random deviates. 'sd2theta' computes a 'theta'
     parameter.  'theta2sd' computes a 'sd' parameter.

_S_e_e _A_l_s_o:

     'Normal'.

_E_x_a_m_p_l_e_s:

     # load "fdrtool" library
     library("fdrtool")

     ## density of half-normal compared with a corresponding normal
     par(mfrow=c(1,2))

     sd.norm = 0.64
     x  = seq(0, 5, 0.01)
     x2 = seq(-5, 5, 0.01)
     plot(x, dhalfnorm(x, sd2theta(sd.norm)), type="l", xlim=c(-5, 5), lwd=2,
        main="Probability Density", ylab="pdf(x)")
     lines(x2, dnorm(x2, sd=sd.norm), col=8 )

     plot(x, phalfnorm(x, sd2theta(sd.norm)), type="l", xlim=c(-5, 5),  lwd=2,
        main="Distribution Function", ylab="cdf(x)")
     lines(x2, pnorm(x2, sd=sd.norm), col=8 )

     legend("topleft", 
     c("half-normal", "normal"), lwd=c(2,1),
     col=c(1, 8), bty="n", cex=1.0)

     par(mfrow=c(1,1))

     ## distribution function

     integrate(dhalfnorm, 0, 1.4, theta = 1.234)
     phalfnorm(1.4, theta = 1.234)

     ## quantile function
     qhalfnorm(-1) # NaN
     qhalfnorm(0)
     qhalfnorm(.5)
     qhalfnorm(1)
     qhalfnorm(2) # NaN

     ## random numbers
     theta = 0.72
     hz = rhalfnorm(10000, theta)
     hist(hz, freq=FALSE)
     lines(x, dhalfnorm(x, theta))

     mean(hz) 
     1/theta  # theoretical mean

     var(hz)
     (pi-2)/(2*theta*theta) # theoretical variance

     ## relationship with two-sided normal p-values
     z = rnorm(1000)

     # two-sided p-values
     pvl = 1- phalfnorm(abs(z))
     pvl2 = 2 - 2*pnorm(abs(z)) 
     sum(pvl-pvl2)^2 # equivalent
     hist(pvl2, freq=FALSE)  # uniform distribution

     # back to half-normal scores
     hz = qhalfnorm(1-pvl)
     hist(hz, freq=FALSE)
     lines(x, dhalfnorm(x))

