P-waarde handmatig berekenen uit t-waarde in t-test

Ik heb een voorbeeldgegevensset met 31 waarden. Ik heb een tweezijdige t-test uitgevoerd met R om te testen of het ware gemiddelde gelijk is aan 10:

t.test(x=data, mu=10, conf.level=0.95) 

Uitvoer:

t = 11.244, df = 30, p-value = 2.786e-12 alternative hypothesis: true mean is not equal to 10 95 percent confidence interval: 19.18980 23.26907 sample estimates: mean of x 21.22944 

Nu probeer ik “hetzelfde handmatig te doen:

t.value = (mean(data) - 10) / (sd(data) / sqrt(length(data))) p.value = dt(t.value, df=length(lengths-1)) 

De t-waarde berekend met deze methode is hetzelfde als uitvoer door de functie t-test R. De p-waarde komt echter uit op 3.025803e-12.

Enig idee wat ik verkeerd doe?

Bedankt!

EDIT

Hier is de volledige R-code , inclusief mijn dataset:

# Raw dataset -- 32 observations data = c(21.75, 18.0875, 18.75, 23.5, 14.125, 16.75, 11.125, 11.125, 14.875, 15.5, 20.875, 17.125, 19.075, 25.125, 27.75, 29.825, 17.825, 28.375, 22.625, 28.75, 27, 12.825, 26, 32.825, 25.375, 24.825, 25.825, 15.625, 26.825, 24.625, 26.625, 19.625) # Student t-Test t.test(x=data, mu=10, conf.level=0.95) # Manually calculate p-value t.value = (mean(data) - 10) / (sd(data) / sqrt(length(data))) p.value = dt(t.value, df=length(data) - 1) 

Antwoord

Gebruik pt en maak het tweezijdig.

> 2*pt(11.244, 30, lower=FALSE) [1] 2.785806e-12 

Reacties

  • I denk dat er een detail ontbreekt: wanneer gebruik je lower = F? – Zie mijn vraag hier: stats.stackexchange.com/questions/133091/…
  • De waarde moet positief zijn, dus als u deze gebruikt met een variabele die negatief kan zijn, plaatst u abs.
  • Voor een tweezijdige test ' zoeken naar de kans dat de waarde kleiner is dan -11,244 of groter dan +11,244. lower = F vertelt R om de kans te berekenen dat de waarde groter is dan de eerste parameter. Anders geeft het u de kans dat de waarde kleiner is dan de eerste parameter. Als zodanig zou je ook 2 * pt (-11.244, 30) kunnen doen. Persoonlijk doe ik meestal 2 * pt (-abs (q), df = n-1) omdat R standaard lager = T is.

Antwoord

Ik heb dit gepost als een opmerking, maar toen ik wat meer wilde toevoegen tijdens het bewerken, werd het te lang, dus heb ik het hierheen verplaatst.

Bewerken : uw teststatistiek en df zijn correct. Het andere antwoord wijst op het probleem met de berekening van het staartgebied in de oproep naar pt(), en de verdubbeling voor twee-staarten, die uw verschil oplost. Desalniettemin verlaat ik mijn eerdere discussie / opmerking omdat het relevante punten meer in het algemeen maakt over p-waarden in extreme staarten:

Het is mogelijk dat je niets verkeerd doet en toch een verschil krijgt, maar als je een reproduceerbaar voorbeeld post, is het misschien mogelijk om verder te onderzoeken of je een fout hebt (zeg in de df).

Deze dingen worden berekend op basis van benaderingen die misschien niet bijzonder nauwkeurig zijn in de zeer extreme staart

Als de twee dingen geen identieke benaderingen gebruiken, zijn ze het misschien niet helemaal met elkaar eens, maar dat gebrek aan overeenstemming zou er niet toe moeten doen (aangezien het exacte achtergebied zo ver een zinvol getal is, zouden de vereiste veronderstellingen moeten vasthouden aan een verbazingwekkende mate van nauwkeurigheid). Heb je echt exacte normaliteit, exacte onafhankelijkheid, precies constante variantie?

Je moet niet per se grote nauwkeurigheid verwachten als de cijfers toch niets betekenen. In hoeverre maakt het uit of de berekende geschatte p-waarde $ 2 \ maal 10 ^ {- 12} $ of $ 3 \ maal 10 ^ {- 12} $ is? Geen van beide cijfers meet de werkelijke p-waarde van uw werkelijke situatie. Zelfs als een van de cijfers de echte p-waarde van uw werkelijke situatie vertegenwoordigde, als deze eenmaal onder de $ 0,0001 $ ligt, waarom zou het u dan schelen wat die waarde eigenlijk was?

Answer

De beste manier om het handmatig te berekenen is:

t.value = (mean(data) - 10) / (sd(data) / sqrt(length(data))) p.value = 2*pt(-abs(t.value), df=length(data)-1) 

Je hebt de abs () functie omdat je anders het risico loopt p-waarden groter te krijgen dan $ 1 $ (als het gemiddelde van de gegevens groter is dan het gegeven gemiddelde)!

Antwoord

Ik vind het antwoord dat @Aaron geeft erg leuk, samen met de abs opmerkingen. Ik vind een handige bevestiging om

pt(1.96, 1000000, lower.tail = F) * 2

uit te voeren, wat 0.04999607 oplevert.

Hier gebruiken we de bekende eigenschap dat 95% van het oppervlak onder de normale verdeling voorkomt bij ~ 1,96 standaarddeviaties, dus de output van ~ 0,05 geeft onze p-waarde. Ik gebruikte 1000000 sinds wanneer N enorm is, is de t-distributie bijna hetzelfde als de normale distributie. Dit gaf me troost in de oplossing van @Aaron.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *