In R
, it is possible to perform two-sample one-tailed t-test simply by using
> A = c(0.19826790, 1.36836629, 1.37950911, 1.46951540, 1.48197798, 0.07532846)
> B = c(0.6383447, 0.5271385, 1.7721380, 1.7817880)
> t.test(A, B, alternative="greater")
Welch Two Sample t-test
data: A and B
t = -0.4189, df = 6.409, p-value = 0.6555
alternative hypothesis: true difference in means is greater than 0
95 percent confidence interval:
-1.029916 Inf
sample estimates:
mean of x mean of y
0.9954942 1.1798523
In Python world, scipy
provides similar function ttest_ind, but which can only do two-tailed t-tests. Closest information on the topic I found is this link, but it seems to be rather a discussion of the policy of implementing one-tailed vs two-tailed in scipy
.
Therefore, my question is that does anyone know any examples or instructions on how to perform one-tailed version of the test using numpy/scipy
?
After trying to add some insights as comments to the accepted answer but not being able to properly write them down due to general restrictions upon comments, I decided to put my two cents in as a full answer.
First let's formulate our investigative question properly. The data we are investigating is
with the sample means
I assume that since the mean of B is obviously greater than the mean of A, you would like to check if this result is statistically significant.
So we have the Null Hypothesis
that we would like to reject in favor of the Alternative Hypothesis
Now when you call
scipy.stats.ttest_ind(x, y)
, this makes a Hypothesis Test on the value ofx.mean()-y.mean()
, which means that in order to get positive values throughout the calculation (which simplifies all considerations) we have to callinstead of
stats.ttest_ind(B,A)
. We get as an answert-value = 0.42210654140239207
p-value = 0.68406235191764142
and since according to the documentation this is the output for a two-tailed t-test we must divide the
p
by 2 for our one-tailed test. So depending on the Significance Levelalpha
you have chosen you needin order to reject the Null Hypothesis
H0
. Foralpha=0.05
this is clearly not the case so you cannot rejectH0
.An alternative way to decide if you reject
H0
without having to do any algebra ont
orp
is by looking at the t-value and comparing it with the critical t-valuet_crit
at the desired level of confidence (e.g. 95%) for the number of degrees of freedomdf
that applies to your problem. Since we havewe get from a statistical table like this one that
We clearly have
so we obtain again the same result, namely that we cannot reject
H0
.Did you look at this: How to calculate the statistics "t-test" with numpy
I think that is exactly what this questions is looking at.
Basically:
is the same result as this example in R. https://stats.stackexchange.com/questions/51242/statistical-difference-from-zero
From your mailing list link:
It goes on to say that scipy always gives the test statistic as signed. This means that given p and t values from a two-tailed test, you would reject the null hypothesis of a greater-than test when
p/2 < alpha and t > 0
, and of a less-than test whenp/2 < alpha and t < 0
.When null hypothesis is
Ho: P1>=P2
and alternative hypothesis isHa: P1<P2
. In order to test it in Python, you writettest_ind(P2,P1)
. (Notice the position is P2 first).You will get the result like below
Ttest_indResult(statistic=-20.442436213923845,pvalue=5.0999336686332285e-75)
In Python, when
statstic <0
your real p-value is actuallyreal_pvalue = 1-output_pvalue/2= 1-5.0999336686332285e-75/2
, which is approximately 0.99. As your p-value is larger than 0.05, you cannot reject the null hypothesis that 6>=3. whenstatstic >0
, the real z score is actually equal to-statstic
, the real p-value is equal to pvalue/2.Ivc's answer should be when
(1-p/2) < alpha and t < 0
, you can reject the less than hypothesis.