Java apachemath:在t检验中计算置信区间,t检验有两个样本
我正在使用ApacheMath3为一个网站项目做一个学生的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}; 此数据是从中复制的 我希望计算置信区间,如上页所示。
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作为自由度,而统计本身是使用合并方差计算的