Introduction

Power analysis for a paired-sample t-test is the same as for the one-sample t-test. This is due to the fact that in the paired-sample t-test we compute the difference in the two scores for each subject and then compute the mean and standard deviation of the differences. This turns the paired-sample t-test into a one-sample t-test.

Parameters

  set.seed(312)      
  n <- 10           # sample size
  sdd <- 0.3088401  # sd of differences
  sd <- sdd/sqrt(2) # sd
  delta <- 0.5      # effect of interest

Paired study, use sd of difference and a one sample test, but we will use the sd here as this is a two sample t-test code

    n1 <- n
    n2 <- n                                  # EoB manipulated for same size in both grps
    mu1 <- 0
    mu2 <- delta
    #sd1 <- sd2 <- sdd
    sd1 <- sd2 <- sdd/sqrt(2)                # EOB added this for paired!
    alpha   <- 0.05
    #dfGP    <- n1+n2 - 2                    # degrees of freedom  
    dfGP    <- (n - 1) * 1                   # EOB added this for paired!
    cvGP    <- qt(1-alpha/2, dfGP)           # crit. value 2-sided test (under the null)
    muDiff  <- mu2-mu1                       # true difference in means
    sigDiff <- sqrt((sd1^2/n1) + (sd2^2/n2)) # true SD for difference in empirical means
    ncp     <- muDiff / sigDiff              # noncentrality parameter (under alternative)
    1-pt(cvGP, dfGP, ncp)                    # power
[1] 0.9947832

Show equivalence in paired and one sample test, enusure you used standard deviation of the differences. One sample using SD of differences

    power.t.test(delta=delta , sd=sdd, n=n, type="one.sample") 

     One-sample t test power calculation 

              n = 10
          delta = 0.5
             sd = 0.3088401
      sig.level = 0.05
          power = 0.9947832
    alternative = two.sided

Paired using sd of differences

    power.t.test(delta=delta , sd=sdd, n=n, type="paired") 

     Paired t test power calculation 

              n = 10
          delta = 0.5
             sd = 0.3088401
      sig.level = 0.05
          power = 0.9947832
    alternative = two.sided

NOTE: n is number of *pairs*, sd is std.dev. of *differences* within pairs

Let’s power using simulation

    mean(replicate(1000, t.test(x=rnorm(n, delta ,sdd))$p.value)<0.05)
[1] 0.995

The pwr package using effect size as input, one sample

    pwr::pwr.t.test(d=(delta)/sdd, n=n , type="one.sample" )

     One-sample t test power calculation 

              n = 10
              d = 1.618961
      sig.level = 0.05
          power = 0.9947832
    alternative = two.sided

The pwr package using effect size as input, paired

    pwr::pwr.t.test(d=(delta)/sdd, n=n , type="paired" )

     Paired t test power calculation 

              n = 10
              d = 1.618961
      sig.level = 0.05
          power = 0.9947832
    alternative = two.sided

NOTE: n is number of *pairs*

Further demonstrating how to use sd of diff and repeatability sd. Simulate power using standard deviation of the differences and use one sample t-test!

    (pow <- mean(replicate(10000, t.test(rnorm(n, delta, sdd))$p.value <= 0.05)) )
[1] 0.9959

Check the power from above using a paired t-test to recover n!

    power.t.test(delta=delta, sd=sdd , power=pow, type="paired") 

     Paired t test power calculation 

              n = 10.28521
          delta = 0.5
             sd = 0.3088401
      sig.level = 0.05
          power = 0.9959
    alternative = two.sided

NOTE: n is number of *pairs*, sd is std.dev. of *differences* within pairs

Standard one sample t-test this time using sd should recover n!

    power.t.test(delta=delta, sd=sdd , power=pow, type="one.sample") 

     One-sample t test power calculation 

              n = 10.28521
          delta = 0.5
             sd = 0.3088401
      sig.level = 0.05
          power = 0.9959
    alternative = two.sided

Now let us change tack, power for two sample t-test

    n1 <- n
    n2 <- n                                  # EoB manipulated for same size in both grps
    mu1 <- 0
    mu2 <- delta
    sd1 <- sd2 <- sd
    #sd1 <- sd2 <- sdd/sqrt(2)               # EOB added this for paired!
    alpha   <- 0.05
    dfGP    <- n1+n2 - 2                     # degrees of freedom 
    #dfGP    <- (n - 1) * 1                  # EOB added this for paired!
    cvGP    <- qt(1-alpha/2, dfGP)           # crit. value 2-sided test (under the null)
    muDiff  <- mu2-mu1                       # true difference in means
    sigDiff <- sqrt((sd1^2/n1) + (sd2^2/n2)) # true SD for difference in empirical means
    ncp     <- muDiff / sigDiff              # noncentrality parameter (under alternative)
    1-pt(cvGP, dfGP, ncp)                    # power
[1] 0.9979561

Showing equivalence in package functions

    power.t.test(delta=delta , sd=sd , n=n, type="two.sample") 

     Two-sample t test power calculation 

              n = 10
          delta = 0.5
             sd = 0.2183829
      sig.level = 0.05
          power = 0.9979561
    alternative = two.sided

NOTE: n is number in *each* group
    pwr::pwr.t.test(d=(delta)/sd,     n=n , type="two.sample" )

     Two-sample t test power calculation 

              n = 10
              d = 2.289556
      sig.level = 0.05
          power = 0.9979561
    alternative = two.sided

NOTE: n is number in *each* group

Computing Environment

R version 3.2.2 (2015-08-14)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 8 x64 (build 9200)

locale:
[1] LC_COLLATE=English_United Kingdom.1252  LC_CTYPE=English_United Kingdom.1252   
[3] LC_MONETARY=English_United Kingdom.1252 LC_NUMERIC=C                           
[5] LC_TIME=English_United Kingdom.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] reshape_0.8.5 plyr_1.8.3    arm_1.8-6     lme4_1.1-12   Matrix_1.2-2  MASS_7.3-45   ggplot2_2.1.0 knitr_1.12.3 

loaded via a namespace (and not attached):
 [1] Rcpp_0.12.4      magrittr_1.5     splines_3.2.2    munsell_0.4.3    colorspace_1.2-6 lattice_0.20-33 
 [7] minqa_1.2.4      pwr_1.1-3        stringr_1.0.0    tools_3.2.2      grid_3.2.2       gtable_0.2.0    
[13] nlme_3.1-127     coda_0.18-1      htmltools_0.3.5  abind_1.4-3      yaml_2.1.13      digest_0.6.9    
[19] nloptr_1.0.4     formatR_1.3      evaluate_0.9     rmarkdown_0.9.6  stringi_1.0-1    scales_0.4.0    
[1] "~/X/CUSTOMER"

This took 6.24 seconds to execute.