Я не хочу, чтобы a, b были случайными, я хочу, чтобы они были конкретными, поэтому пользователь будет вводить 2 сэмпла, чтобы он мог рассчитывать в соответствии с ним (дисперсия, среднее, размер). Я пробовал это следующим образом:
size = input('Size of sample: ')
N = size
source2 = input('Mean: ')
source3 = input('Distribution: ')
a = source2
print("a:",a)
Gauss-eloszlású adat, átlag = 0 и variancia = 1
b = source3
print("b:",b)
Импорт пакетов
import numpy as np
from scipy import stats
Определение 2 случайных распределений Размер выборки
N = 10
Распределенные по Гауссу данные со средним = 2 и var = 1
a = np.random.randn(N) + 2
Распределенные по Гауссу данные со средним = 0 и var = 1
b = np.random.randn(N)
Рассчитать стандартное отклонениеВычислить дисперсию, чтобы получить стандартное отклонение
. Для несмещенной оценки максимального правдоподобия мы должны разделить переменную на N-1, и, следовательно, параметр ddof = 1
var_a = a.var(ddof=1)
var_b = b.var(ddof=1)
стандартное отклонение
s = np.sqrt((var_a + var_b)/2)
s
Рассчитать t-статистику
t = (a.mean() - b.mean())/(s*np.sqrt(2/N))
Сравнить с критическим значением t Степени свободы
df = 2*N - 2
p-значение после сравнения с t
p = 1 - stats.t.cdf(t,df=df)
print("t = " + str(t))
print("p = " + str(2*p))
Обратите внимание, что мы умножаем значение p на 2, потому что это twpt-критерий хвоста Вы можете видеть, что после сравнения статистики t с критическим значением t (вычисленным внутри) мы получаем хорошее значение p, равное 0,0005, и, таким образом, мы отвергаем нулевую гипотезу и, таким образом, доказываем, что среднее из двух распределений различнои статистически значимо.
Перекрестная проверка с внутренней функцией scipy
t2, p2 = stats.ttest_ind(a,b)
print("t = " + str(t2))
print("p = " + str(2*p2))