Afsnit 6.5: Two sample tests i python

I alle eksemplerne ovenfor omkring to normalfordelte observationssæt er de forskellige tests lavet ved at bruge python som en lommeregner. I python laves disse test med funktionen ttest_\text{\textunderscore}ind fra scipy.stats-modulet. Denne funktion laver imidlertid ikke det tilhørende konfidensinterval, og jeg har derfor selv kodet en funktion ttest2. Funktionen ligger i pytFunktioner.py omtalt i afsnit 1.6.

6.5.1 Two samples: Teste varianser ens

Python har ikke en indbygget funktion til at lave FF-testet for hypotesen om ens varianser i Statistisk Model 6.1.1 med to normalfordelte observationssæt. Jeg har derfor selv kodet en funktion med navnet vartest2. Funktionen ligger i pytFunktioner.py. Hvis data ligger i to vektorer x og y, og output placeres i fUD, bliver kaldet
fUD=vartest2(x,y) \text{fUD=vartest2(x,y)}
De forskellige dele af output er som følger:
VærdiPythonF-teststørrelsenfUD.fstatFrihedsgraderfUD.df1,fUD.df2P-værdifUD.pNedre grænsefUD.lowerØvre grænsefUD.upper \begin{array}{lr}\hline \text{Værdi} & \text{Python} \\ \hline F\text{-teststørrelsen} & \text{fUD.fstat} \\ \text{Frihedsgrader} & \text{fUD.df1,fUD.df2} \\ P\text{-værdi} & \text{fUD.p} \\ \text{Nedre grænse} & \text{fUD.lower} \\ \text{Øvre grænse} & \text{fUD.upper} \\ \hline \end{array}
Det 95%-konfidensinterval, der angives i output, er for forholdet mellem de to variansparametre, det vil sige for σ12/σ22\sigma_1^2/\sigma_2^2 (dette konfidensinterval har jeg ikke omtalt ovenfor). Gå nu tilbage til Eksempel 6.4.3, og find de beregnede værdier der i output fra et kald af vartest2.

6.5.1 Teste to varianser ens

Se opstartskoden (til/fra)

Vi aflæser i output at FF-tesstørrelsen er 0.375 og pp-værdien er 0.075. Hvilken FF-fordeling bruges til beregningen af pp-værdien?

Svar: Aflæsning

I output fra vartest2 aflæses, at der er 13 frihedsgrader i tæller og 19 frihedsgrader i nævner. Den anvendte fordeling er derfor en F(13,19)F(13,19)-fordeling.

6.5.2 Two samples: Teste middelværdier ens

For at teste at middelværdierne er ens i to normalfordelinger, skal man enten bruge tt-testet, hvis de to varianser er ens, eller også bruge Welchs test, hvis de to varianser ikke er ens. Begge de to tests udregnes med funktionen ttest2. Hvis data ligger i to vektorer x1 og x2, bliver kaldet i tilfældet, hvor varianserne antages ens:
tUD=ttest2(x1,x2,varequal=True) \text{tUD=ttest2(x1,x2,varequal=True)}
Hvis de to varianser antages forskellige skal man ændre True til False. De forskellige dele af output er som følger:
VærdiPythonT-teststørrelsentUD.tstatFrihedsgradertUD.dfP-værditUD.pSkøn over differenstUD.estNedre grænsetUD.lowerØvre grænsetUD.upper \begin{array}{lr}\hline \text{Værdi} & \text{Python} \\ \hline T\text{-teststørrelsen} & \text{tUD.tstat} \\ \text{Frihedsgrader} & \text{tUD.df} \\ P\text{-værdi} & \text{tUD.p} \\ \text{Skøn over differens} & \text{tUD.est} \\ \text{Nedre grænse} & \text{tUD.lower} \\ \text{Øvre grænse} & \text{tUD.upper} \\ \hline \end{array}
Nedre og øvre grænse er for et 95%-konfidensinterval for forskel i middelværdi mellem gruppe 1 og gruppe2, det vil sige for parameteren δ=μ1μ2.\delta=\mu_1-\mu_2. Gå nu tilbage til Eksempel 6.2.2 og Eksempel 6.3.2 og gentag beregningerne ved hjælp af ttest2.

6.5.2 Teste to middelværdier ens

Først laver vi beregningerne hørende til Eksempel 6.2.2.

Se opstartskoden (til/fra)

Vi aflæser her tt-teststørrelsen til 9.35,-9.35, pp-værdien fra en t(32)t(32)-fordeling er 1.110101.1\cdot 10^{-10}, og et 95%-konfidensinterval for forskel i middelværdi er [24.4,15.6].[-24.4,\,-15.6].
Vi betragter dernæst beregningerne hørende til Eksempel 6.3.2.
Vi aflæser her tt-teststørrelsen til 21.52,21.52, pp-værdien fra en t(7.2)t(7.2)-fordeling er 8.91088.9\cdot 10^{-8}, og et 95%-konfidensinterval for forskel i middelværdi er [0.0095,0.0118].[0.0095,\,0.0118].

6.5.3 Eksempel: log-data

I eksempel 6.2.2 så vi, at mængden af ekstraheret cell free DNA var næsten dobbelt så stor ved Triton-metoden som ved Qiagen-metoden. Den empiriske spredning ved Triton-metoden er også noget højere end den empiriske spredning ved Qiagen-metoden, selvom et formelt test for hypotesen om ens varianser vil give en pp-værdi over 0.05. At middelværdi og spredning "følges ad" er ikke helt atypisk, når data vedrører en positiv størrelse (her mængde). I sådanne situationer vil der ofte ske det, at hvis data logaritmetransformeres, vil der efterfølgende være større lighed mellem varianserne.
Lad os betegne logaritmen til mængden af ekstraheret CFDNA med henholdsvis logQiai\text{logQia}_{i} og logTrii\text{logTri}_{i} for den ii'te prøve i de to grupper. Vi betragter Statistisk Model 6.1.1, her skrevet som
LogQiaiN(ν1,τ12),i=1,,14,LogTriiN(ν2,τ22),i=1,,20,(ν1,ν2,τ1,τ2)R2×R+2,\begin{aligned} \text{LogQia}_i & \sim N(\nu_1,\tau_1^2),\enspace i=1,\ldots,14, \\ \text{LogTri}_i & \sim N(\nu_2,\tau_2^2),\enspace i=1,\ldots,20,\\ & (\nu_{1},\nu_{2},\tau_{1},\tau_{2})\in \mathbf{R}^2\times\mathbf{R}_+^2, \end{aligned}
hvor νj\nu_j er middelværdien af logaritmen til mængden. Man kan matematisk vise sammenhængen μj=exp(νj+12τj2),\mu_j=\exp(\nu_j+\frac{1}{2}\tau_j^2), hvor μj\mu_j er middelværdien af mængden. I kodevinduet nedenfor laves der qqplots for de logaritmetransformerede data, og disse giver ikke anledning til at forkaste modellen.
Først undersøges hypotesen om samme varians i de to grupper for de logaritmetransformerde værdier. Beregningen er vist i kodevinduet nedenfor: FF-teststørrelsen er 1.3427, og pp-værdien (to gange sandsynlighed for værdi større end 1.3427) fra en F(13,19)F(13,19)-fordeling er 0.54. Da pp-værdien er langt over 0.05, siger vi, at data ikke strider mod samme varians på logaritmeskalaen.
I kodevinduet laves der også et 95%-konfidensinterval for forskel i middelværdi mellem gruppe 1 og gruppe2, δ=ν1ν2,\delta=\nu_1-\nu_2, under antagelsen om samme varians. Konfidensintervallet er baseret på t(32)t(32)-fordelingen, og bliver [0.897,0.586].[-0.897,\, -0.586]. Vi kan oversætte dette konfidensinterval til et konfidensinterval for forholdet mellem middelværdierne på den oprindelige skala.
Resultat 6.5.3. (Fra log til ikke-log)
Da vi har samme varians τ12=τ22=τ2\tau_1^2=\tau_2^2=\tau^2 på logaritmeskalaen, giver sammenhængen μj=exp(νj+12τ2),\mu_j=\exp(\nu_j+\frac{1}{2}\tau^2), at
μ1μ2=exp(ν1+12τ2)exp(ν2+12τ2)=exp(ν1ν2). \frac{\mu_1}{\mu_2}= \frac{\exp(\nu_1+\frac{1}{2}\tau^2)} {\exp(\nu_2+\frac{1}{2}\tau^2)} =\exp(\nu_1-\nu_2).
Her står, at forholdet mellem middelværdierne på den oprindelige skala er exponentialfunktionen taget på differensen mellem middelværdierne på logaritmeskalaen. Et konfidensintervsal for forholdet μ1μ2\frac{\mu_1}{\mu_2} fås derfor ved at tage eksponentialfunktionen på intervalendepunkterne for konfidensintervallet for δ=ν1ν2.\delta=\nu_1-\nu_2.
For data omkring mængden af CFDNA giver dette resultat 95%-konfidensintervallet [e0.897,e0.586]=[0.41,0.56].[e^{-0.897},\,e^{-0.586}]=[0.41,\, 0.56]. Her står, at med 95% sikkerhed er middelværdien af mængden af CFDNA ved Qiagen-metoden mellem 41% og 56% af middelværdien ved brug af Triton-metoden.

Beregninger i python

Se opstartskoden (til/fra)

ForegåendeNæste