Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java apachemath:在t检验中计算置信区间,t检验有两个样本_Java_Statistics_Apache Commons Math - Fatal编程技术网

Java apachemath:在t检验中计算置信区间,t检验有两个样本

Java apachemath:在t检验中计算置信区间,t检验有两个样本,java,statistics,apache-commons-math,Java,Statistics,Apache Commons Math,我正在使用ApacheMath3为一个网站项目做一个学生的t测试。假设我有两个样本: double[] sampleOne = new double[] {134 ,146 ,104 ,119 ,124 ,161 ,107 ,83 ,113 ,129 ,97 ,123}; double[] sampleTwo = new double[] { 70, 118, 101, 85, 107, 132, 94}; 此数据是从中复制的 我希望计算置信区间,如上页所示。

我正在使用ApacheMath3为一个网站项目做一个学生的t测试。假设我有两个样本:

double[] sampleOne = new double[] {134 ,146 ,104 ,119 ,124 ,161 ,107 ,83    ,113 ,129 ,97   ,123};
double[] sampleTwo = new double[] { 70, 118,    101,    85, 107,    132,    94};
此数据是从中复制的

我希望计算置信区间,如上页所示。例如:

Assuming equal variances 
95% confidence interval for difference between means = -2.193679 to 40.193679
我发现这样的链接:

,其中显示了此方法:

private double getConfidenceIntervalWidth(StatisticalSummary statistics, double significance) {
    TDistribution tDist = new TDistribution(statistics.getN() - 1);
    double a = tDist.inverseCumulativeProbability(1.0 - significance / 2);
    return a * statistics.getStandardDeviation() / Math.sqrt(statistics.getN());
}

这似乎不适用于t检验中的两个样本。我做了相当多的研究,但无法找到如何使用ApacheMath3实现它

我知道这可能是一个非常晚的答复,但我将尝试回答您的问题。假设您有两个未配对的样本
sampleOne
sampleTwo
(它们是未配对的,因为它们的大小不同),您可以使用以下方法来计算t统计量:

DescriptiveStatistics one = new DescriptiveStatistics();
for (double d : sampleOne)
    one.addValue(d);
DescriptiveStatistics two = new DescriptiveStatistics();
for (double d : sampleTwo)
    two.addValue(d);
double tStat = TestUtils.t(one, two);
请注意,也可以使用
SummaryStatistics
而不是
DescriptiveStatistics
。相反,如果需要p值,可以执行以下操作:

double pVal = TestUtils.tTest(sampleOne, sampleTwo);
最后,如果您希望以给定的置信水平(我们称之为
double conf=0.95
)运行完整测试,则执行:

TestUtils.tTest(sampleOne, sampleTwo, 1.0 - conf)

谈到获取上下页边距,Apache Commons Math无法直接支持这一点。该公式似乎适用于非配对t检验,但请记住,样本的方差必须相等(如您提供的网站所示)

我知道这可能是一个非常晚的答复,但我将尝试回答您的问题。假设您有两个未配对的样本
sampleOne
sampleTwo
(它们是未配对的,因为它们的大小不同),您可以使用以下方法来计算t统计量:

DescriptiveStatistics one = new DescriptiveStatistics();
for (double d : sampleOne)
    one.addValue(d);
DescriptiveStatistics two = new DescriptiveStatistics();
for (double d : sampleTwo)
    two.addValue(d);
double tStat = TestUtils.t(one, two);
请注意,也可以使用
SummaryStatistics
而不是
DescriptiveStatistics
。相反,如果需要p值,可以执行以下操作:

double pVal = TestUtils.tTest(sampleOne, sampleTwo);
最后,如果您希望以给定的置信水平(我们称之为
double conf=0.95
)运行完整测试,则执行:

TestUtils.tTest(sampleOne, sampleTwo, 1.0 - conf)

谈到获取上下页边距,Apache Commons Math无法直接支持这一点。该公式似乎适用于非配对t检验,但请记住,样本的方差必须相等(如您提供的网站所示)

你的想法是正确的,但是你需要得到正确的t统计量,正确的标准误差乘以
a
和正确的自由度。如果假设方差相等,则使用

double t=tTest.homosecdastict(样本一,样本二)

得到t统计量。然后,您可以通过将其划分为均值之间的差值来恢复其相关的标准误差

double meanDiff = StatUtils.mean(sampleOne) - StatUtils.mean(sampleTwo);
double tSigma = meanDiff / t;
然后获得一个自由度等于两个样本大小之和减去2=17的T分布实例,然后执行您尝试的操作,只需乘以标准误差即可得到间隔半宽度:

TDistribution tDist = new TDistribution(df);
double a = tDist.inverseCumulativeProbability(1.0 - significance / 2);
double halfWidth = a * tSigma;

对于不等方差的情况,需要计算近似自由度。有关这种情况,请参阅Commons Math TTest sources中的受保护方法
df
。上面的代码给出的结果与您的链接中针对相等方差情况的结果相同。对于不等方差,我认为参考值有一个错误,因为它们似乎在t分布中使用17作为自由度,而统计本身是使用合并方差计算的。

你的想法是正确的,但你需要得到正确的t统计,将
a
乘以的正确标准误差和正确的自由度。如果假设方差相等,则使用

double t=tTest.homosecdastict(样本一,样本二)

得到t统计量。然后,您可以通过将其划分为均值之间的差值来恢复其相关的标准误差

double meanDiff = StatUtils.mean(sampleOne) - StatUtils.mean(sampleTwo);
double tSigma = meanDiff / t;
然后获得一个自由度等于两个样本大小之和减去2=17的T分布实例,然后执行您尝试的操作,只需乘以标准误差即可得到间隔半宽度:

TDistribution tDist = new TDistribution(df);
double a = tDist.inverseCumulativeProbability(1.0 - significance / 2);
double halfWidth = a * tSigma;
对于不等方差的情况,需要计算近似自由度。有关这种情况,请参阅Commons Math TTest sources中的受保护方法
df
。上面的代码给出的结果与您的链接中针对相等方差情况的结果相同。对于不等方差,我认为参考值有一个错误,因为它们似乎在t分布中使用17作为自由度,而统计本身是使用合并方差计算的