Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Displaying only the p-value of multiple t.tests

Tags:

r

sample

I have

replicate(1000, t.test(rnorm(10)))

What it does that it draws a sample of size ten from a normal distribution, performs a t.test on it, and does this a 1000 times. But for my assignment I'm only interested in the p-value (the question is: how many times is the null hypothesis rejected). How do I get only the p-values, or can I add something that already says how many times the null hypothesis is rejected(how many times the p-value is smaller than 0.05)

like image 200
Heleen Feijen Avatar asked Nov 28 '12 23:11

Heleen Feijen


People also ask

Why are P values corrected for multiple testing?

Classicists believe that if multiple measures are tested in a given study, the p-value should be adjusted upward to reduce the chance of incorrectly declaring a statistical significance [4–7].

How do you interpret the p-value for a two sample t-test?

The smaller the p-value, the more surprised we would be by the observed difference in sample means if there really was no difference between the population means. Therefore, the smaller the p-value, the stronger the evidence is that the two populations have different means.

How is the p-value associated with the t-test?

Every t-value has a p-value to go with it. A p-value from a t test is the probability that the results from your sample data occurred by chance. P-values are from 0% to 100% and are usually written as a decimal (for example, a p value of 5% is 0.05). Low p-values indicate your data did not occur by chance.


2 Answers

t.test returns a object of class htest which is a list containing a number of components including p.value (which is what you want).

You have a couple of options.

You can save the t.test results in a list and then extract the p.value component

# simplify = FALSE to avoid coercion to array
ttestlist <- replicate(1000, t.test(rnorm(10)), simplify = FALSE)
ttest.pval <- sapply(ttestlist, '[[', 'p.value')

Or you could simply only save that component of the t.test object

pvals <- replicate(1000, t.test(rnorm(10))$p.value)
like image 110
mnel Avatar answered Sep 21 '22 13:09

mnel


Here are the steps I'd use to solve your problem. Pay attention to how I broke it down into the smallest component parts and built it up step by step:

#Let's look at the structure of one t.test to see where the p-value is stored
str(t.test(rnorm(10)))
#It is named "p.value, so let's see if we can extract it
t.test(rnorm(10))[["p.value"]]
#Now let's test if its less than your 0.05 value
ifelse(t.test(rnorm(10))[["p.value"]]< 0.05,1,0)
#That worked. Now let's replace the code above in your replicate function:
replicate(1000, ifelse(t.test(rnorm(10))[["p.value"]]< 0.05,1,0))
#That worked too, now we can just take the sum of that:
#Make it reproducible this time
set.seed(42)
sum(replicate(1000, ifelse(t.test(rnorm(10))[["p.value"]]< 0.05,1,0)))

Should yield this:

[1] 54
like image 44
Chase Avatar answered Sep 18 '22 13:09

Chase