Exemplo n.º 1
0
double mgfgamma(double x, double shape, double scale, int give_log)
{
    if (!R_FINITE(shape) ||
        !R_FINITE(scale) ||
        shape <= 0.0 ||
        scale <= 0.0 ||
        scale * x > 1.)
        return R_NaN;

    if (x == 0.0)
        return ACT_D_exp(0.0);

    return ACT_D_exp(-shape * log1p(-scale * x));
}
Exemplo n.º 2
0
double dinvparalogis(double x, double shape, double scale, int give_log)
{
    /*  We work with the density expressed as
     *
     *  shape^2 * u^shape * (1 - u) / x
     *
     *  with u = v/(1 + v) = 1/(1 + 1/v), v = (x/scale)^shape.
     */

    double tmp, logu, log1mu;

    if (!R_FINITE(shape) ||
        !R_FINITE(scale) ||
        shape <= 0.0 ||
        scale <= 0.0)
        return R_NaN;;

    if (!R_FINITE(x) || x < 0.0)
        return ACT_D__0;

    /* handle x == 0 separately */
    if (x == 0)
    {
	if (shape < 1.0) return R_PosInf;
	if (shape > 1.0) return ACT_D__0;
	/* else */
	return ACT_D_val(1.0 / scale);
    }

    tmp = shape * (log(x) - log(scale));
    logu = - log1pexp(-tmp);
    log1mu = - log1pexp(tmp);

    return ACT_D_exp(2.0 * log(shape) + shape * logu + log1mu - log(x));
}
Exemplo n.º 3
0
double dpareto1(double x, double shape, double min, int give_log)
{
#ifdef IEEE_754
    if (ISNAN(x) || ISNAN(shape) || ISNAN(min))
	return x + shape + min;
#endif
    if (!R_FINITE(shape) ||
        !R_FINITE(min)   ||
        shape <= 0.0 ||
        min <= 0.0)
        return R_NaN;

    if (!R_FINITE(x) || x < min)
        return ACT_D__0;

    return ACT_D_exp(log(shape) + shape * log(min) - (shape + 1.0) * log(x));
}
Exemplo n.º 4
0
Arquivo: gamma.c Projeto: cran/actuar
double mgfgamma(double t, double shape, double scale, int give_log)
{
#ifdef IEEE_754
    if (ISNAN(t) || ISNAN(shape) || ISNAN(scale))
	return t + shape + scale;
#endif
    if (!R_FINITE(shape) ||
        !R_FINITE(scale) ||
        shape <= 0.0 ||
        scale <= 0.0 ||
        scale * t > 1.)
        return R_NaN;

    if (t == 0.0)
        return ACT_D__1;

    return ACT_D_exp(-shape * log1p(-scale * t));
}
Exemplo n.º 5
0
Arquivo: unif.c Projeto: cran/actuar
double mgfunif(double t, double min, double max, int give_log)
{
#ifdef IEEE_754
    if (ISNAN(t) || ISNAN(min) || ISNAN(max))
	return t + min + max;
#endif
    if (!R_FINITE(min) ||
        !R_FINITE(max) ||
        min >= max)
        return R_NaN;

    if (t == 0.0)
        return ACT_D__1;

    double tmp1, tmp2;

    tmp1 = exp(t * max) - exp(t * min);
    tmp2 = t * (max - min);

    return ACT_D_exp(log(tmp1) - log(tmp2));
}
Exemplo n.º 6
0
double dinvexp(double x, double scale, int give_log)
{
    /*  We work with the density expressed as
     *
     *  u * e^(-u) / x
     *
     *  with u = scale/x.
     */

    double logu;

    if (!R_FINITE(scale) || scale <= 0.0)
        return R_NaN;

    /* handle also x == 0 here */
    if (!R_FINITE(x) || x <= 0.0)
        return ACT_D__0;

    logu = log(scale) - log(x);

    return ACT_D_exp(logu - exp(logu) - log(x));
}
Exemplo n.º 7
0
Arquivo: invexp.c Projeto: cran/actuar
double dinvexp(double x, double scale, int give_log)
{
    /*  We work with the density expressed as
     *
     *  u * e^(-u) / x
     *
     *  with u = scale/x.
     */

#ifdef IEEE_754
    if (ISNAN(x) || ISNAN(scale))
	return x + scale;
#endif
    if (!R_FINITE(scale) || scale <= 0.0)
        return R_NaN;

    /* handle also x == 0 here */
    if (!R_FINITE(x) || x <= 0.0)
        return ACT_D__0;

    double logu = log(scale) - log(x);

    return ACT_D_exp(logu - exp(logu) - log(x));
}