Использование ttest при увеличении размера выборки - PullRequest
1 голос
/ 23 марта 2020

У меня есть df с различными функциями. Я сосредоточусь здесь на одной функции, которая называется 'x':

count    2152.000000
mean       95.162587
std         0.758480
min        92.882304
25%        94.648659
50%        95.172078
75%        95.648485
max        97.407068

Я хочу выполнить тестирование на моем df, пока я пробую данные из df. Я хочу увидеть эффект sampleSize. Поскольку я ожидаю, что это насытит после ряда образцов. Поэтому il oop sampleSize для указанного c random_state:

for N in np.arange(1,2153,1):
    pull = helioPosition.sample(N,random_state= 140)
    ttest_pull.append(stats.ttest_ind(df['x'],pull['x'])[1])

распределение 'x' является нормальным распределением:

dist 'x'

Когда я строю p теста на моем размере образца, я получаю следующий график:

ttest

Есть ли ошибка в моем код или метод. Я ожидал бы получить лучшее значение p с более высоким sampleSize, но это не так для каждого sampleSize. Как размер образца ~ 1500 может быть хуже, чем размер образца ~ 450?

Ответы [ 2 ]

1 голос
/ 24 марта 2020

Просто добавьте к ответу выше, что вы имеете в виду, это сила. В основном, сколько ложных негативов вы дали определенному эффекту и образцу. В вашем случае эффект равен нулю, поскольку они получены из одного и того же распределения, и обратите внимание, что вы провели только один тест, что означает, что все ваши значения в основном отбираются из равномерного распределения.

Сначала вам нужно получить Разница между двумя распределениями, а во-вторых, выполнить этот тест несколько раз, чтобы увидеть количество отклонений. Смотрите пример ниже:

import numpy as np
import pandas as pd
from scipy.stats import ttest_ind
import seaborn as sns

df = pd.DataFrame({'x':np.random.normal(0,2,150),
                   'y':np.random.normal(1,2,150)})

Теперь у нас есть два столбца, которые имеют разные значения. Мы go через выборку с различными размерами

def subsampletest(da,N):
                  pull = da.sample(N)
                  return(ttest_ind(pull['x'],pull['y'])[1])

sampleSize = np.arange(5,150,step=5)

results = np.array([[subsampletest(df,x) for x in sampleSize] for B in range(100)])

Количество отклонений при альфа 0,05 (из 100) на размер выборки, просто:

rejections = np.mean(results<0.05,axis=0)
sns.lineplot(x=sampleSize,y=rejections)

enter image description here

1 голос
/ 24 марта 2020

pull взято из выборки из тех же данных, то есть вторая выборка является случайной выборкой из той же популяции, и эти две выборки имеют одинаковое среднее (ожидаемое значение).

p-значения равномерно распределены на интервале [0, 1], когда нулевая гипотеза верна, что здесь имеет место. Это не зависит от размера выборки, поэтому мы ожидаем увидеть флуктуации или случайность в p-значении тестов.

Однако в этом случае у вас нет двух независимых выборок, которые лежат в основе предположения Т-тест. Насколько я понимаю ваш код, в пределе, когда N становится большим, второй образец будет включать всю «совокупность» и будет идентичен первому примеру. В этом случае p-значение будет go к единице, потому что вы сравниваете две по существу идентичные выборки.

Если sample выборки с заменой, то вы по существу сравниваете выборку bootstrap с "популяцией" ", что будет две выборки с одинаковым ожидаемым значением и очень высокой корреляцией. Таким образом, значение p для стандартного t-критерия должно быть высоким, но все равно случайным числом.

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