|
[ 簡単な説明 ] 区間推定のライブラリです。区間推定とは、標本の統計で得られたデータから、母集団の特徴を示すパラメータの区間をある信頼度の下で推定するものです。 母平均や母分散関係のパラメータの区間推定は、正規母集団を仮定しています。 母百分率関係のパラメータの区間推定は、2項母集団(要素が1か0)を仮定しています。 |
| 関数名 | 関数の機能 | 機能説明 | 呼び出し例 |
| mest1( ) | 母平均の 区間推定 (母分散既知) |
|
mest1(n, xbar, pv, g, &xl, &xu); |
| mest2( ) | 母平均の 区間推定 (母分散未知) |
|
mest2(n, xbar, squv, g, &xl, &xu); |
| mdest1( ) | 母平均の差の 区間推定 (母分散既知) |
|
mdest1(n1, n2, xbar1, xbar2, pv1, pv2, g, &xl, &xu); |
| mdest2( ) | 母平均の差の 区間推定 (母分散未知 (等しい)) |
|
mdest2(n1, n2, xbar1, xbar2, v1, v2, g, &xl, &xu); |
| vest( ) | 母分散の 区間推定 |
|
vest(sw, n, s, g, &xl, &xu); |
| vpest( ) | 母分散の比の 区間推定 |
|
vpest(n1, n2, uv1, uv2, g, &xl, &xu); |
| bpest( ) | 母百分率 (不良率)の 区間推定 |
|
bpest(n, ps, g, &xl, &xu); |
| bpdest( ) | 2つの母百分率 (不良率)の差の 区間推定 |
|
bpdest(n1, n2, ps1, ps2, g, &xl, &xu); |
| rest( ) | 母相関係数の 区間推定 |
|
rest(n, r0, g, &xl, &xu); |
/* esti.c */
#include <stdio.h>
#include "sslib.h"
int mest1(int n, double xbar, double pv, double g, double *xl, double *xu)
{
double w;
if(n < 1 || g <= 0.0 || g >= 1.0) return 999;
w = pnorm((1.0 + g) * 0.5) * sqrt(pv / (double)n);
*xl = xbar - w;
*xu = xbar + w;
return 0;
}
int mest2(int n, double xbar, double squv, double g, double *xl, double *xu)
{
double w;
if(n < 1 || g <= 0.0 || g >= 1.0) return 999;
w = pt(1.0 - g, n - 1) * squv / sqrt((double)n);
*xl = xbar - w;
*xu = xbar + w;
return 0;
}
int mdest1(int n1, int n2, double xbar1, double xbar2, double pv1, double pv2,
double g, double *xl, double *xu)
{
double xb, w;
if(n1 < 1 || n2 < 1 || g <= 0.0 || g >= 1.0) return 999;
xb = fabs(xbar1 - xbar2);
w = pnorm((1.0 + g) * 0.5) * sqrt(pv1 / (double)n1 + pv2 / (double)n2);
*xl = xb - w;
*xu = xb + w;
return 0;
}
int mdest2(int n1, int n2, double xbar1, double xbar2, double v1, double v2,
double g, double *xl, double *xu)
{
double xb, w;
if(n1 < 1 || n2 < 1 || g <= 0.0 || g >= 1.0) return 999;
xb = fabs(xbar1 - xbar2);
w = pt(1.0 - g, n1 + n2 - 2)
* sqrt(1.0 / (double)n1 + 1.0 / (double)n2)
* sqrt(((double)n1 * v1 + (double)n2 * v2) / (double)(n1 + n2 - 2));
*xl = xb - w;
*xu = xb + w;
return 0;
}
int vest(int sw, int n, double s, double g, double *xl, double *xu)
{
double q1;
if(n < 2 || g <= 0.0 || g >= 1.0) return 999;
if(sw < 0) n--;
q1 = (1.0 + g) * 0.5;
*xl = s / pchi(1.0 - q1, n);
*xu = s / pchi(q1, n);
return 0;
}
int vpest(int n1, int n2, double uv1, double uv2, double g, double *xl, double *xu)
{
double f, w;
if(n1 < 2 || n2 < 2 || g <= 0.0 || g >= 1.0) return 999;
w = uv1 / uv2;
f = (1.0 - g) * 0.5;
*xl = w / pf(f, n1 - 1, n2 - 1);
*xu = w * pf(f, n2 - 1, n1 - 1);
return 0;
}
int bpest(int n, double ps, double g, double *xl, double *xu)
{
double w;
if(n < 1 || ps <= 0.0 || ps >= 1.0 || g <= 0.0 || g >= 1.0) return 999;
w = pnorm((1.0 + g) * 0.5) * sqrt(ps * (1.0 - ps) / (double)n);
*xl = ps - w;
*xu = ps + w;
return 0;
}
int bpdest(int n1, int n2, double ps1, double ps2, double g, double *xl, double *xu)
{
double p, w;
if(n1 < 1 || n2 < 1 || g <= 0.0 || g >= 1.0 || ps1 <= 0.0 || ps1 >= 1.0 ||
ps2 <= 0.0 || ps2 >= 1.0) return 999;
p = fabs(ps1 - ps2);
w = pnorm((1.0 + g) * 0.5)
* sqrt(ps1 * (1.0 - ps1) / (double)n1 + ps2 * (1.0 - ps2) / (double)n2);
*xl = p - w;
*xu = p + w;
return 0;
}
int rest(int n, double r0, double g, double *xl, double *xu)
{
double qn, w, w1, w2, w3;
if(n < 4 || fabs(r0) >= 1.0 || g <= 0.0 || g >= 1.0) return 999;
w = log((1.0 + r0) / (1.0 - r0)) * 0.5;
w1 = pnorm((1.0 + g) * 0.5) / sqrt((double)(n - 3));
w2 = exp(2.0 * (w - w1));
w3 = exp(2.0 * (w + w1));
*xl = (w2 - 1.0) / (w2 + 1.0);
*xu = (w3 - 1.0) / (w3 + 1.0);
return 0;
}
|