# Source code for simplestatistics.statistics.t_test

"""
Implements t_test() function.
"""

# I need sane division that returns a float not int
from __future__ import division

from .decimalize import decimalize
from .mean import mean
from .standard_deviation import standard_deviation

[docs]def t_test(sample, x):
"""
A one-sample t-test_ is a test that compares the mean of a sample to a known value, x.

In this case, we're trying to determine whether the sample mean is equal to the value
that we know, which is x. Usually the results are used to look up a p-value_, which,
for a certain level of significance, will let you determine whether the null hypothesis
(that there is no real difference between the mean of the sample and provided x) can
be rejected or not.

.. _t-test: http://en.wikipedia.org/wiki/Student's_t-test
.. _p-value: http://en.wikipedia.org/wiki/P-value

Equation:
.. math::
t = \\frac{\\bar{X} - \\mu}{sd_X}

:math:\\bar{X} is the sample mean

:math:\\mu is the provided value

:math:sd_X is the sample standard deviation

Args:
sample: A list of numerical objects (the sample)
x: The provided value to compare the mean of the sample to.

Returns:
A numerical object.

Example:

>>> t_test([1, 2, 3, 4, 5, 6], 3.385)
0.150570344262835
"""

sample = decimalize(sample)
x = decimalize(x)
mean_sample = decimalize(mean(sample))

# Square root the length of the sample
rootN = pow(len(sample), 0.5)
rootN = decimalize(rootN)

# get standard deviation of sample
sample_sd = decimalize(standard_deviation(sample))

# Compute the known value against the sample,
# returning the t value
t_statistic = ((mean_sample - x) / sample_sd) * rootN
return(float(t_statistic))