[R] stats::power.t.test error
m@ech|er @end|ng |rom @t@t@m@th@ethz@ch
Tue Oct 15 17:59:15 CEST 2019
>>>>> Bert Gunter
>>>>> on Tue, 15 Oct 2019 07:41:35 -0700 writes:
> "...plausible sample sizes i.e. integers."
> f(...) = function that returns a real.
> ceiling(f(...)) = function that returns an integer.
> The problem is the "plausible" part.
Actually, power.t.test() does not return an integer for 'n'
typically in any case.
I found that it's actually quite easy to power.t.test() do the
diddling for us and return a number between 1 and 2.
What you do with that number is your decision, but formally it
solves the root finding problem :
> (ptt1 <- power.t.test(delta = 0.6, sd=0.00001, power=0.9 , sig.level=0.05))
Two-sample t test power calculation
n = 1.004283
delta = 0.6
sd = 1e-05
sig.level = 0.05
power = 0.9
alternative = two.sided
NOTE: n is number in *each* group
As the change is small, and I see that Witold has good reasons
to prefer this to wrapping everything in try(.) or (better) tryCatch(.),
I propose to commit the change after a bit more testing.
> Bert Gunter
> "The trouble with having an open mind is that people keep coming along and
> sticking things into it."
> -- Opus (aka Berkeley Breathed in his "Bloom County" comic strip )
> On Tue, Oct 15, 2019 at 3:11 AM Witold E Wolski <wewolski using gmail.com> wrote:
>> Dear Peter,
>> Yes, It is a technical issue and a matter of diddling around. And I
>> agree with your comment regarding the 2 observations.
>> I have several thousands variance estimates for which I need to
>> compute the sample sizes automatically. Using try statements is
>> typically the last thing I would like to resort too.
>> Is there an alternative implementation of power.t.test on CRAN which
>> could the diddling for me and return plausible sample sizes i.e.
>> best regards
>> On Fri, 4 Oct 2019 at 16:28, peter dalgaard <pdalgd using gmail.com> wrote:
>> > This is mainly a technical issue with uniroot trying to go outside of
>> its interval: (2, 1e7)
>> > It is fairly easy to find an approximate solution by diddling a little
>> by hand:
>> > > power.t.test(delta = 0.5849625, sd=0.01, n=1.04, sig.level=0.05)$power
>> >  0.8023375
>> > Notice, however, that 1.04 observations in each group makes no sense at
>> all. In order to actually do a t-test you need at least 2 observations per
>> group (since we assume equal group sizes) or you have no variance estimate.
>> Already at sd=0.1, you are crossing the n=2 border, so for any smaller sd,
>> you will just get higher power with n=2. (Also, anything with single-digit
>> degrees of freedom for variance is probably expecting rather much regarding
>> to Gaussian distribution of your data.)
>> > -pd
>> > > On 4 Oct 2019, at 14:30 , Witold E Wolski <wewolski using gmail.com> wrote:
>> > >
>> > > Hi,
>> > >
>> > > power.t.test works for some range of input parameters but fails
>> > >
>> > >> power.t.test(delta = 0.5849625, sd=0.1, power=0.8, sig.level=0.05)$n
>> > >  1.971668
>> > >> power.t.test(delta = 0.5849625, sd=0.05, power=0.8, sig.level=0.05)$n
>> > >  1.620328
>> > >> power.t.test(delta = 0.5849625, sd=0.01, power=0.8, sig.level=0.05)$n
>> > > Error in uniroot(function(n) eval(p.body) - power, c(2, 1e+07), tol =
>> tol, :
>> > > did not succeed extending the interval endpoints for f(lower) *
>> f(upper) <= 0
>> > > In addition: Warning message:
>> > > In qt(sig.level/tside, nu, lower.tail = FALSE) : NaNs produced
>> > >
>> > > I guessing that sd is very small compared with delta, hence the
>> > > problem. But what are allowed values (ratios) of delta and sd?
>> > >
>> > > Best
>> > > Witek
>> > >
>> > > --
>> > > Witold Eryk Wolski
>> > >
>> > --
>> > Peter Dalgaard, Professor,
>> > Center for Statistics, Copenhagen Business School
>> > Solbjerg Plads 3, 2000 Frederiksberg, Denmark
>> > Phone: (+45)38153501
>> > Office: A 4.23
>> > Email: pd.mes using cbs.dk Priv: PDalgd using gmail.com
>> Witold Eryk Wolski
More information about the R-help