Spørgsmål:
Hvordan udføres to-prøve t-test i R ved at indsætte stikprøvestatistikker snarere end rådataene?
Alby
2012-06-13 21:15:52 UTC
view on stackexchange narkive permalink

Lad os sige, at vi har statistikkerne nedenfor

  køn betyder sd nf 1.666667 0.5773503 3m 4.500000 0.5773503 4  

Hvordan udfører du en to-prøve t-test (for at se om der er en signifikant forskel mellem mænds og kvinders middel i en eller anden variabel) ved hjælp af statistik som denne snarere end faktiske data?

Jeg kunne ikke finde nogen steder på internettet, hvordan man gør dette. De fleste af selvstudierne og endda manualen beskæftiger sig kun med det aktuelle datasæt.

[Denne Wikipedia-artikel] (http://da.wikipedia.org/wiki/Student%27s_t-test) plus hjælpesiden til R's t-distributionsfunktioner (fået ved `? Pt`) - se især` pt () `- har alle de oplysninger, du har brug for for at gøre dette selv. Og du lærer meget * om statistik og R, hvis du gør det.
Der er allerede gode svar her, og det er faktisk meget let (og god praksis) at skrive en funktion til dette selv; dog vil jeg bare tilføje, at du måske ser på funktionen 'tsum.test' i pakke [BSDA] (http://cran.r-project.org/web/packages/BSDA/index.html), som implementerer en t-test (to prøver; Welch eller lige varians og også en prøve) fra de sammenfattende data, du leverer. Det fungerer stort set som t-testen i vanilje R, men på resumeoplysningerne.
For at være ærlig sagde min lærer altid, når jeg lærte at programmere, "genopfind ikke hjulet".Derfor er den mest logiske funktion `tsum.test ()` fra `BSDA-biblioteket` som anført af @Nick Cox.Det gør nøjagtigt det samme som hvad @macro skrev i kodelinjer.Hvis det stillede spørgsmål, hvad er forståelsen af baggrundsberegningen til beregning af t-teststatistikken i R, ville Marco være mere passende et svar.Bemærk venligst, jeg prøver ikke at fornærme nogen, bare med min personlige mening i forbindelse med min professionelle baggrund.Og @marco det er en pæn kodning :)
Fem svar:
Macro
2012-06-14 18:44:14 UTC
view on stackexchange narkive permalink

Du kan skrive din egen funktion baseret på det, vi ved om mekanikken i to-prøve $ t $ -test. For eksempel vil dette gøre jobbet:

  # m1, m2: prøven betyder # s1, s2: prøve standardafvigelser # n1, n2: de samme størrelser # m0: nullværdien for forskellen i midler, der skal testes for. Standard er 0. # equal.variance: om man skal antage lige varians eller ej. Standard er FALSE. t.test2 <- funktion (m1, m2, s1, s2, n1, n2, m0 = 0, equal.variance = FALSE) {if (equal.variance == FALSE) {se <- sqrt ((s1 ^ 2 / n1) + (s2 ^ 2 / n2)) # welch-satterthwaite df df <- ((s1 ^ 2 / n1 + s2 ^ 2 / n2) ^ 2) / ((s1 ^ 2 / n1) ^ 2 / (n1 -1) + (s2 ^ 2 / n2) ^ 2 / (n2-1))} ellers {# samlet standardafvigelse, skaleret efter prøvestørrelserne se <- sqrt ((1 / n1 + 1 / n2) * (( n1-1) * s1 ^ 2 + (n2-1) * s2 ^ 2) / (n1 + n2-2)) df <- n1 + n2-2} t <- (m1-m2-m0) / se dat <- c (m1-m2, se, t, 2 * pt (-abs (t), df)) navne (dat) <- c ("Forskel mellem midler", "Std-fejl", "t", "p -værdi ") return (dat)}  

Eksempel på brug:

  set.seed (0) x1 <- rnorm (100) x2 <- rnorm (200) # du finder dette output stemmer overens med det for t.test når du indtaster x1, x2 (tt2 <- t.test2 (middel (x1), middel (x2), sd (x1), sd (x2) , længde (x1), længde (x2))) Forskel på middelværdi Std-fejl t p-værdi -0.05692268 0.12192273 -0.46687500 0.64113442 

Dette matcher resultatet af t.test:

  (tt < - t.test (x1, x2)) # Welch to eksempler t-test # # data: x1 og x2 # t = 0.10427, df = 223.18, p-værdi = 0.917 # alternativ hypotese: sand forskel i middel er ikke lig med 0 # 95 procent konfidensinterval: # -0.2118062 0.2354734 # prøveestimater: # gennemsnit af x gennemsnit af y # 0.02266845 0.01083487 tt $ statistik == tt2 [["t"]] # t
# SAND tt $ p.value == tt2 [["p-værdi"]] # [1] SAND  
Min [rediger] (https://stats.stackexchange.com/review/suggested-edits/165986) sammenlignet med `t.test` blev afvist, så her er en kode for at bekræfte:` (tt2 <- t.test2 (middel(x1), middelværdi (x2), sd (x1), sd (x2), længde (x1), længde (x2)));(tt <- t.test (x1, x2));tt $ statistik == tt2 [["t"]];tt $ p.value == tt2 [["p-værdi"]] `
@MaxGhenis Jeg tilføjede din redigering igen.Virkede godt for mig.
Austin
2012-06-13 22:13:32 UTC
view on stackexchange narkive permalink

Du beregner det bare manuelt: $$ t = \ frac {(\ text {middel} _f - \ tekst {middel} _m) - \ tekst {forventet forskel}} {SE} \\ ~ \\ ~ \ \ SE = \ sqrt {\ frac {sd_f ^ 2} {n_f} + \ frac {sd_m ^ 2} {n_m}} \\ ~ \\ ~ \\\ tekst {hvor,} ~~~ df = n_m + n_f - 2 $$

Den forventede forskel er sandsynligvis nul.

Hvis du vil have p-værdien, skal du blot bruge pt () -funktionen:

  pt (t, df)  

Således sætter koden sammen:

  > p = pt (((((1.666667) - 4.500000) - 0) / sqrt (0.5773503 / 3 + 0.5773503 / 4)), (3 + 4 - 2)) > p [1] 0.002272053  

Dette forudsætter lige afvigelser, som er indlysende, fordi de har den samme standardafvigelse.

Et par ting: Hvordan er dette "i" R "? Hvad er fordelingen af ​​teststatistikken (dvs. hvordan går du fra dette til $ p $ -værdier)?
Graden frihed i dette tilfælde er forkert!Du bruger ikke-poolet varians, som antager ulige afvigelser.Graden af frihed er således mere præcis ved hjælp af Scatterwaite-tilnærmelse.
Greg Snow
2012-06-13 22:34:37 UTC
view on stackexchange narkive permalink

Du kan udføre beregningerne ud fra formlen i bogen (på websiden), eller du kan generere tilfældige data, der har de angivne egenskaber (se funktionen mvrnorm i MASS -pakke) og brug den almindelige t.test -funktion på de simulerede data.

Når du siger "du kan generere tilfældige data, der har de angivne egenskaber", mener du at simulere data med populationsgennemsnit og standardafvigelse lig med prøveværdierne eller simulere under den begrænsning, at stikprøvens gennemsnit og standardafvigelse er lig med en præ- specificeret værdi?
Du ønsker, at de simulerede data skal have nøjagtigt samme gennemsnit (er) og var (er) som angivet i problemet. En måde at gøre dette på (der er mange andre) er at bruge funktionen 'mvrnorm' i pakken 'MASS' (du skal indstille det empiriske argument til SAND).
Nick Cox
2013-07-28 20:05:04 UTC
view on stackexchange narkive permalink

Spørgsmålet stilles om R, men problemet kan opstå med enhver anden statistisk software. Stata har for eksempel forskellige såkaldte øjeblikkelige kommandoer, som tillader beregninger udelukkende fra oversigtsstatistikker. Se http://www.stata.com/manuals13/rttest.pdf for den særlige sag med kommandoen ttesti , der gælder her.

DvD
2020-02-07 21:01:29 UTC
view on stackexchange narkive permalink

En anden mulig løsning er at simulere datasættene og derefter bruge standard t-testfunktionen. Det kan være mindre effektivt, beregningsmæssigt set, men det er meget simpelt.

t.test.fra.summary.data <- funktion (middel1, sd1, n1, middel2, sd2, n2, ...) { data1 <-skala (1: n1) * sd1 + middel1 data2 <- skala (1: n2) * sd2 + middel2 t.test (data1, data2, ...) }

I betragtning af at t-testen kun afhænger af statistikprøveoversigten, men ser bort fra de faktiske prøvefordelinger, giver denne funktion nøjagtigt de samme resultater (bortset fra variabelnavne) som t-testfunktionen:

x <- c (1.0, 1.2, 2.3, 4.2, 2.1, 3.0, 1.9, 2.0, 3.2, 1.6) y <- c (3.5, 4.2, 3.3, 2.0, 1.7, 4.5, 2.7, 2.8, 3.3) m_x <- betyder (x) m_y <- betyder (y) s_x <- sd (x) s_y <- sd (y) t.test.from.summary.data (m_x, s_x, 10, m_y, s_y, 9) Welch to-prøve t-test data: data1 og data2 t = -1,9755, df = 16,944, p-værdi = 0,06474 alternativ hypotese: sand forskel i middel er ikke lig med 0 95 procent konfidensinterval: -1,78101782 0,05879559 prøveoverslag: gennemsnit af x middelværdi af y 2,250000 3,111111 t.test (x, y) Welch to-prøve t-test data: x og y t = -1,9755, df = 16,944, p-værdi = 0,06474 alternativ hypotese: sand forskel i middel er ikke lig med 0 95 procent konfidensinterval: -1,78101782 0,05879559 prøveoverslag: gennemsnit af x middelværdi af y 2,250000 3,111111


Denne spørgsmål og svar blev automatisk oversat fra det engelske sprog.Det originale indhold er tilgængeligt på stackexchange, som vi takker for den cc by-sa 3.0-licens, den distribueres under.
Loading...