From m@ech|er @end|ng |rom @t@t@m@th@ethz@ch  Fri Feb 22 12:11:25 2019
From: m@ech|er @end|ng |rom @t@t@m@th@ethz@ch (Martin Maechler)
Date: Fri, 22 Feb 2019 12:11:25 +0100
Subject: [Rd] Return/print standard error in t.test()
In-Reply-To: <CAOC91MS9RxfZ-3TWWFYikaBDO5vsRo1bFAdyACAcf0vaW0XcUA@mail.gmail.com>
References: <5880_1550782663_x1LKvgt1024492_CAOC91MRbfkM3Z-27xGjpq00yV0RrfVCnZT=s3f6YH374x_wpEw@mail.gmail.com>
 <FBFE4A3F-ACD3-4373-87E1-0B6D50EA14A5@mcmaster.ca>
 <CAOC91MS9RxfZ-3TWWFYikaBDO5vsRo1bFAdyACAcf0vaW0XcUA@mail.gmail.com>
Message-ID: <23663.55517.897575.504738@stat.math.ethz.ch>

>>>>> Thomas J Leeper 
>>>>>     on Thu, 21 Feb 2019 22:21:21 +0000 writes:

    > Hi John,
    > Thanks for your reply. Of course I could write a package and of course I
    > would find that trivial to do. The point is this is a main entry point to R
    > for probably (at this point) hundreds of thousands of students. I?d like
    > them to be able to get a basic quantity of interest from a t-test without
    > four subsequent function calls.

    > I also don?t really see the point about the object class, given we?re
    > talking S3. print() doesn?t have to print everything in the object (see
    > e.g., print.lm() ), so there should be little harm in returning additional
    > information when relevant. Leaving the print() method unchanged and simply
    > returning the SE as an additional element should affect almost nothing.

    > I?m all for continuity and conservative development, but we also should aim
    > to make R as useful and usable as possible. This seems like a nice simple
    > way to do that.

I agree with both John Fox and Thomas Leeper
(well, with a subset of their union ;-)

John made the point [and Rui nicely showed how to implement it]
that *printing* such a standard error in addition to the other
stats needs potentially more changes via a specialized print() method.

Also, R in general has refused for good reasons to behave like
old batch stats software and printing all possibly interesting
output.
.. and I'd really like us to stay in that tradition and hence
*not* print such extra numbers.

Also, if your students learn slightly more about stats, they are
hopefully taught that the t.test is a simple special case of
linear (gaussian) regression, and you can teach them the
corresponding

   summary(lm( .. ))

which gives identical t-stat and p-value and does print SEs.

OTOH, I agree with Thomas (and IIRC earlier correspondents on
this issue) that it does seem natural to return the SE here, as
it is crucially used in the formula for the t-stat anyway, and
people can use it to easily compute confidence intervals (or
p-values if really desired) for other levels than 95% / 5% ..

So adding another component to the list returned by t.test()
seems fine to me, and hopefully saves us future e-mails on the topic
  [... well almost surely there will be those asking us to
   change the print() method too, but we'll survive that.]

Martin


    > On Thu, 21 Feb 2019 at 21:51 Fox, John <jfox at mcmaster.ca> wrote:

    >> Dear Thomas,
    >> 
    >> it is, unfortunately, not that simple. t.test() returns an object of class
    >> "htest" and not all such objects have standard errors. I'm not entirely
    >> sure what the point is since it's easy to compute the standard error of the
    >> difference from the information in the object (adapting an example from
    >> ?t.test):
    >> 
    >> > (res <- t.test(1:10, y = c(7:20)))
    >> 
    >> Welch Two Sample t-test
    >> 
    >> data:  1:10 and c(7:20)
    >> t = -5.4349, df = 21.982, p-value = 1.855e-05
    >> alternative hypothesis: true difference in means is not equal to 0
    >> 95 percent confidence interval:
    >> -11.052802  -4.947198
    >> sample estimates:
    >> mean of x mean of y
    >> 5.5      13.5
    >> 
    >> > as.vector(abs(diff(res$estimate)/res$statistic)) # SE
    >> [1] 1.47196
    >> > class(res)
    >> [1] "htest"
    >> 
    >> and if you really want to print the SE as a matter of course, you could
    >> always write your own wrapper for t.test() that returns an object of class,
    >> say, "t.test" for which you can provide a print() method. Much of the
    >> advantage of working in a statistical computing environment like R (or
    >> Stata, for that matter) is that you can make things work the way you like.
    >> 
    >> Best,
    >> John
    >> 
    >> -------------------------------------------------
    >> John Fox, Professor Emeritus
    >> McMaster University
    >> Hamilton, Ontario, Canada
    >> Web: http::/socserv.mcmaster.ca/jfox
    >> 
    >> > On Feb 21, 2019, at 3:57 PM, Thomas J. Leeper <thosjleeper at gmail.com>
    >> wrote:
    >> >
    >> > A recent thread on Twitter [1] by a Stata user highlighted that t.test()
    >> > does not return or print the standard error of the mean difference,
    >> despite
    >> > it being calculated by the function.
    >> >
    >> > I know this isn?t the kind of change that?s likely to be made but could
    >> we
    >> > at least return the SE even if the print() method isn?t updated? Or,
    >> > better, update the print() method to display this as well?
    >> >
    >> > Best,
    >> > Thomas
    >> >
    >> > [1]
    >> > https://twitter.com/amandayagan/status/1098314654470819840?s=21
    >> > --
    >> >
    >> > Thomas J. Leeper
    >> > http://www.thomasleeper.com
    >> >
    >> >       [[alternative HTML version deleted]]
    >> >
    >> > ______________________________________________
    >> > R-devel at r-project.org mailing list
    >> > https://stat.ethz.ch/mailman/listinfo/r-devel
    >> 
    >> --

    > Thomas J. Leeper
    > http://www.thomasleeper.com

    > [[alternative HTML version deleted]]

    > ______________________________________________
    > R-devel at r-project.org mailing list
    > https://stat.ethz.ch/mailman/listinfo/r-devel



[Rd] Return/print standard error in t.test()
Martin Maechler