Расчет значения с использованием NumPy - PullRequest
0 голосов
/ 10 мая 2018

В рамках упражнения мне нужно было проверить, является ли истинное среднее значение для данного сэмпла 1,75 или нет, сгенерировав tvalue с использованием numpy, и сравнить с выводом scipy.

Код:

import numpy as np
import scipy.stats as stats
import matplotlib.pyplot as plt
np.random.seed(seed=42) # make example reproducible
n = 100
x = np.random.normal(loc=1.78, scale=.1, size=n) # the sample is here
tval, pval = stats.ttest_1samp(x, 1.75)

var_x = x.var(ddof=1)
std_x = np.sqrt(var_x)
tval1 = (x.mean() - 1.75)/(std_x*np.sqrt(n))
print("Scipy: ",tval,"\nNumpy: ",tval1)

Выход Scipy - 2,1598800019529265, в то время как вывод от NumPy составляет 0,021598800019529265

Я предполагаю, что логика, которую я использовал, неверна. Пожалуйста, предложите.

1 Ответ

0 голосов
/ 10 мая 2018

Вы ошиблись в знаменателе. Должно быть

tval1 = (x.mean() - 1.75)/(std_x / np.sqrt(n))  # (std_x divided by root n)

Вот почему вы обнаружите, что существует разность в 100 ((1/10) / 10 = 1/100) между вашим Scipy и numpy выходом.

Вот t-тест Wiki of Student


Пример использования другого размера выборки:

np.random.seed(seed=42)
n = 369
x = np.random.normal(loc=1.78, scale=.1, size=n) # the sample is here
tval, pval = stats.ttest_1samp(x, 1.75)

var_x = x.var(ddof=1)
std_x = np.sqrt(var_x)
tval1 = (x.mean() - 1.75)/(std_x / np.sqrt(n))
print("Scipy: ",tval,"\nNumpy: ",tval1)

# Output:
# Scipy:  6.306500305262841
# Numpy:  6.306500305262841
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...