Dans R
, il est possible de réaliser un test t unilatéral à deux échantillons en utilisant simplement
> 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
Dans le monde Python, scipy
fournit une fonction similaire ttest_ind , mais ne peut effectuer que des tests t bilatéraux. Les informations les plus proches sur le sujet que j'ai trouvé sont this link, mais il semble plutôt s'agir d'une discussion sur la politique de mise en œuvre unilatérale ou bilatérale dans scipy
.
Par conséquent, ma question est la suivante: est-ce que quelqu'un connaît des exemples ou des instructions sur la manière d'effectuer une version unilatérale du test en utilisant numpy/scipy
?
De votre lien de liste de diffusion:
parce que les tests unilatéraux peuvent être annulés à partir des tests bilatéraux tests. (Avec les distributions symétriques, la valeur p unilatérale ne représente que la moitié De la valeur p bilatérale)
Scipy indique toujours que la statistique de test est signée. Cela signifie que, étant donné les valeurs p et t d'un test bilatéral, vous rejetteriez l'hypothèse nulle d'un test supérieur à lorsque p/2 < alpha and t > 0
et d'un test inférieur à lorsque p/2 < alpha and t < 0
.
Après avoir essayé d'ajouter des informations sous forme de commentaires à la réponse acceptée mais n'ayant pas pu les écrire correctement en raison de restrictions générales imposées aux commentaires, j'ai décidé de mettre mes deux sous comme réponse complète.
D'abord, formulons correctement notre question d'enquête. Les données que nous étudions sont
A = np.array([0.19826790, 1.36836629, 1.37950911, 1.46951540, 1.48197798, 0.07532846])
B = np.array([0.6383447, 0.5271385, 1.7721380, 1.7817880])
avec l'échantillon moyen
A.mean() = 0.99549419
B.mean() = 1.1798523
Je suppose que puisque la moyenne de B est évidemment supérieure à la moyenne de A, vous souhaitez vérifier si ce résultat est statistiquement significatif.
Nous avons donc l'hypothèse nulle
H0: A >= B
que nous voudrions rejeter en faveur de l'hypothèse alternative
H1: B > A
Désormais, lorsque vous appelez scipy.stats.ttest_ind(x, y)
, un test d’hypothèse est effectué sur la valeur de x.mean()-y.mean()
, ce qui signifie que pour obtenir des valeurs positives tout au long du calcul (ce qui simplifie toutes les considérations), nous devons appeler
stats.ttest_ind(B,A)
au lieu de stats.ttest_ind(B,A)
. Nous obtenons comme réponse
t-value = 0.42210654140239207
p-value = 0.68406235191764142
et puisque, d'après la documentation c'est la sortie d'un test t bilatéral, nous devons diviser la p
par 2 pour notre test unilatéral. Donc, en fonction du niveau d'importance alpha
que vous avez choisi, vous avez besoin
p/2 < alpha
afin de rejeter l'hypothèse nulle H0
. Pour alpha=0.05
, ce n'est clairement pas le cas, donc vous ne pouvez pas rejeterH0
.
Une autre façon de décider si vous refusez H0
sans avoir à faire d'algèbre sur t
ou p
consiste à examiner la valeur t et à la comparer à la valeur critique t t_crit
au niveau de confiance souhaité (par exemple 95%). nombre de degrés de liberté df
qui s'applique à votre problème. Depuis que nous avons
df = sample_size_1 + sample_size_2 - 2 = 8
nous obtenons d'un tableau statistique comme celui-ci que
t_crit(df=8, confidence_level=95%) = 1.860
Nous avons clairement
t < t_crit
nous obtenons donc à nouveau le même résultat, à savoir que nous ne pouvons pas rejeterH0
.
Lorsque l'hypothèse nulle est Ho: P1>=P2
et que l'hypothèse alternative est Ha: P1<P2
. Afin de le tester en Python, vous écrivez ttest_ind(P2,P1)
. (Notez que la position est P2 en premier).
first = np.random.normal(3,2,400)
second = np.random.normal(6,2,400)
stats.ttest_ind(first, second, axis=0, equal_var=True)
Vous obtiendrez le résultat comme ci-dessous Ttest_indResult(statistic=-20.442436213923845,pvalue=5.0999336686332285e-75)
En Python, lorsque statstic <0
votre valeur p réelle est réellement real_pvalue = 1-output_pvalue/2= 1-5.0999336686332285e-75/2
, ce qui correspond à environ 0,99. Comme votre valeur p est supérieure à 0,05, vous ne pouvez pas rejeter l'hypothèse nulle que 6> = 3. lorsque statstic >0
, le score z réel est en fait égal à -statstic
, la valeur p réelle est égale à pvalue/2.
La réponse d'Ivc devrait être quand (1-p/2) < alpha and t < 0
, vous pouvez rejeter l'hypothèse inférieure à.
Avez-vous regardé ceci: Comment calculer les statistiques "t-test" avec numpy
Je pense que c'est exactement ce que cette question se pose.
Fondamentalement:
import scipy.stats
x = [1,2,3,4]
scipy.stats.ttest_1samp(x, 0)
Ttest_1sampResult(statistic=3.872983346207417, pvalue=0.030466291662170977)
est le même résultat que cet exemple dans R. https://stats.stackexchange.com/questions/51242/statistical-difference-from-zero