[R] Interquartile Range
Michael Artz
michaeleartz at gmail.com
Wed Apr 20 06:39:53 CEST 2016
I already found a solution, you suggested I try to find a non hacky
solution, which was not really my priority. I should have declined
politely, which I will do now. Or, ifyou just want me to post reproducible
code because you are bored or because you like solving problems then let me
know and I will accommodate. You have been helpful and I wouldnt mind in
that case. Also, IQR was not a help from the beginning. If it supplies one
value, then its not even a candidate to be helpful for my problem. I
already talked about the format i was looking for. I dont think I violated
any posting guideline, I asked for help, and people pointed me in a
direction and it helped me. Thanks again, I appreciate it.
On Apr 19, 2016 10:53 PM, "Bert Gunter" <bgunter.4567 at gmail.com> wrote:
> ???
>
> IQR returns a single number.
>
> > IQR(rnorm(10))
> [1] 1.090168
>
> To your 2nd response:
> "I could have used average, min, max, they all would have returned the
> same thing., "
>
> I can only respond: huh?? Are all your values identical?
>
> You really need to provide a small reproducible example as requested
> by the posting guide -- I certainly don't get it, and I'm done
> guessing. Maybe others will see what I am missing and say something
> useful. I clearly can't.
>
> Cheers,
> Bert
>
>
>
>
>
> 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, Apr 19, 2016 at 5:29 PM, Michael Artz <michaeleartz at gmail.com>
> wrote:
> > Again, IQR returns two both a .25 and a .75 value and it failed, which is
> > why I didn't use it before. Also, the first function just returns tha
> same
> > value repeating. Since they are the same, before the second call, using
> the
> > mode function is just a way to grab one value. I could have used average,
> > min, max, they all would have returned the same thing.
> >
> > Mike
> >
> > On Tue, Apr 19, 2016 at 7:24 PM, Marc Schwartz <marc_schwartz at me.com>
> wrote:
> >>
> >> Hi,
> >>
> >> Jumping into this thread mainly on the point of the mode of the
> >> distribution, while also supporting Bert's comments below on theory.
> >>
> >> If the vector 'x' that is being passed to this function is an integer
> >> vector, then a tabulation of the integers can yield a 'mode', presuming
> of
> >> course that there is only one unique mode. You may have to decide how
> you
> >> want to handle a multi-modal discrete distribution.
> >>
> >> If the vector 'x' is continuous (e.g. contains floating point values),
> >> then a tabulation is going to be problematic for a variety of reasons.
> >>
> >> In that case, prior discussions on this point, have yielded the
> following
> >> estimation of the mode of a continuous distribution by using:
> >>
> >> Mode <- function(x) {
> >> D <- density(x)
> >> D$x[which.max(D$y)]
> >> }
> >>
> >> where the second line of the function gets you the value of 'x' at the
> >> maximum of the density estimate. Of course, there is still the
> possibility
> >> of a multi-modal distribution and the nuances of which kernel is used,
> etc.,
> >> etc.
> >>
> >> Food for thought.
> >>
> >> Regards,
> >>
> >> Marc Schwartz
> >>
> >>
> >> > On Apr 19, 2016, at 7:07 PM, Bert Gunter <bgunter.4567 at gmail.com>
> wrote:
> >> >
> >> > Well, instead of your functions try:
> >> >
> >> > Mode <- function(x) {
> >> > tabx <- table(x)
> >> > tabx[which.max(tabx)]
> >> > }
> >> >
> >> > and use R's IQR function instead of yours.
> >> >
> >> > ... so I still don't get why you want to return a character string
> >> > instead of a value for the IQR;
> >> > and the mode of a sample defined as above is generally a bad estimator
> >> > of the mode of the distribution. To say more than that would take me
> >> > too far afield. Post on stats.stackexchange.com if you want to know
> >> > why (if it's even relevant).
> >> >
> >> > Cheers,
> >> > Bert
> >> > 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, Apr 19, 2016 at 4:25 PM, Michael Artz <michaeleartz at gmail.com
> >
> >> > wrote:
> >> >> Hi,
> >> >> Here is what I am doing
> >> >>
> >> >> notGroupedAll <- ddply(data
> >> >> ,~groupColumn
> >> >> ,summarise
> >> >> ,col1_mean=mean(col1)
> >> >> ,col2_mode=Mode(col2) #Function I wrote for getting
> the
> >> >> mode shown below
> >> >> ,col3_Range=myIqr(col3)
> >> >> )
> >> >>
> >> >> groupedAll <- ddply(data
> >> >> ,~groupColumn
> >> >> ,summarise
> >> >> ,col1_mean=mean(col1)
> >> >> ,col2_mode=Mode(col2) #Function I wrote for getting
> the
> >> >> mode shown below
> >> >> ,col3_Range=Mode(col3)
> >> >> )
> >> >>
> >> >> #custom Mode function
> >> >> Mode <- function(x) {
> >> >> ux <- unique(x)
> >> >> ux[which.max(tabulate(match(x, ux)))]
> >> >>
> >> >> #the range function
> >> >> myIqr <- function(x) {
> >> >> paste(round(quantile(x,0.375),0),round(quantile(x,0.625),0),sep="-")
> >> >> }
> >> >>
> >> >>
> >> >> }
> >> >>
> >> >>
> >> >> Here is what I am doing!! :)
> >> >>
> >> >>
> >> >>
> >> >> On Tue, Apr 19, 2016 at 2:57 PM, William Dunlap <wdunlap at tibco.com>
> >> >> wrote:
> >> >>>
> >> >>> If you show us, not just tell us about, a self-contained example
> >> >>> someone might show you a non-hacky way of getting the job done.
> >> >>> (I don't see an argument to plyr::ddply called 'transform'.)
> >> >>>
> >> >>> Bill Dunlap
> >> >>> TIBCO Software
> >> >>> wdunlap tibco.com
> >> >>>
> >> >>> On Tue, Apr 19, 2016 at 12:18 PM, Michael Artz
> >> >>> <michaeleartz at gmail.com>
> >> >>> wrote:
> >> >>>>
> >> >>>> Oh thanks for that clarification Bert! Hope you enjoyed your
> coffee!
> >> >>>> I
> >> >>>> ended up just using the transform argument in the ddply function.
> It
> >> >>>> worked
> >> >>>> and it repeated, then I called a mode function in another call to
> >> >>>> ddply that
> >> >>>> summarised. Kinda hacky but oh well!
> >> >>>>
> >> >>>> On Tue, Apr 19, 2016 at 12:31 PM, Bert Gunter
> >> >>>> <bgunter.4567 at gmail.com>
> >> >>>> wrote:
> >> >>>>>
> >> >>>>> ... and I'm getting another cup of coffee...
> >> >>>>>
> >> >>>>> -- Bert
> >> >>>>> 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, Apr 19, 2016 at 10:30 AM, Bert Gunter
> >> >>>>> <bgunter.4567 at gmail.com>
> >> >>>>> wrote:
> >> >>>>>> NO NO -- I am wrong! The paste() expression is of course
> >> >>>>>> evaluated.
> >> >>>>>> It's just that a character string is returned of the form
> >> >>>>>> "something -
> >> >>>>>> something".
> >> >>>>>>
> >> >>>>>> I apologize for the confusion.
> >> >>>>>>
> >> >>>>>> -- Bert
> >> >>>>>>
> >> >>>>>>
> >> >>>>>>
> >> >>>>>>
> >> >>>>>> 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, Apr 19, 2016 at 10:25 AM, Bert Gunter
> >> >>>>>> <bgunter.4567 at gmail.com>
> >> >>>>>> wrote:
> >> >>>>>>> To be precise:
> >> >>>>>>>
> >> >>>>>>>
> paste(round(quantile(x,0.25),0),round(quantile(x,0.75),0),sep="-")
> >> >>>>>>>
> >> >>>>>>> is an expression that evaluates to a character string:
> >> >>>>>>> "round(quantile(x,.25),0) - round(quantile(x,0.75),0)"
> >> >>>>>>>
> >> >>>>>>> no matter what the argument of your function, x. Hence
> >> >>>>>>>
> >> >>>>>>> return(paste(...)) will return this exact character string and
> >> >>>>>>> never
> >> >>>>>>> evaluates x.
> >> >>>>>>>
> >> >>>>>>>
> >> >>>>>>> Cheers,
> >> >>>>>>> Bert
> >> >>>>>>>
> >> >>>>>>>
> >> >>>>>>>
> >> >>>>>>>
> >> >>>>>>>
> >> >>>>>>>
> >> >>>>>>>
> >> >>>>>>>
> >> >>>>>>> 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, Apr 19, 2016 at 8:34 AM, William Dunlap via R-help
> >> >>>>>>> <r-help at r-project.org> wrote:
> >> >>>>>>>>> That didn't work Jim!
> >> >>>>>>>>
> >> >>>>>>>> It always helps to say how the suggestion did not work. Jim's
> >> >>>>>>>> function had a typo in it - was that the problem? Or did you
> not
> >> >>>>>>>> change the call to ddply to use that function. Here is
> something
> >> >>>>>>>> that might "work" for you:
> >> >>>>>>>>
> >> >>>>>>>> library(plyr)
> >> >>>>>>>>
> >> >>>>>>>> data <- data.frame(groupColumn=rep(1:5,1:5), col1=2^(0:14))
> >> >>>>>>>> myIqr <- function(x) {
> >> >>>>>>>>
> >> >>>>>>>>
> >> >>>>>>>>
> paste(round(quantile(x,0.25),0),round(quantile(x,0.75),0),sep="-")
> >> >>>>>>>> }
> >> >>>>>>>> ddply(data, ~groupColumn, summarise, col1_myIqr=myIqr(col1),
> >> >>>>>>>> col1_IQR=stats::IQR(col1))
> >> >>>>>>>> # groupColumn col1_myIqr col1_IQR
> >> >>>>>>>> #1 1 1-1 0
> >> >>>>>>>> #2 2 2-4 1
> >> >>>>>>>> #3 3 12-24 12
> >> >>>>>>>> #4 4 112-320 208
> >> >>>>>>>> #5 5 2048-8192 6144
> >> >>>>>>>>
> >> >>>>>>>> The important point is that
> >> >>>>>>>>
> >> >>>>>>>>
> >> >>>>>>>>
> paste(round(quantile(x,0.25),0),round(quantile(x,0.75),0),sep="-")
> >> >>>>>>>> is not a function, it is an expression. ddplyr wants
> functions.
> >> >>>>>>>>
> >> >>>>>>>>
> >> >>>>>>>> Bill Dunlap
> >> >>>>>>>> TIBCO Software
> >> >>>>>>>> wdunlap tibco.com
> >> >>>>>>>>
> >> >>>>>>>> On Tue, Apr 19, 2016 at 7:56 AM, Michael Artz
> >> >>>>>>>> <michaeleartz at gmail.com>
> >> >>>>>>>> wrote:
> >> >>>>>>>>
> >> >>>>>>>>> That didn't work Jim!
> >> >>>>>>>>>
> >> >>>>>>>>> Thanks anyway
> >> >>>>>>>>>
> >> >>>>>>>>> On Mon, Apr 18, 2016 at 9:02 PM, Jim Lemon
> >> >>>>>>>>> <drjimlemon at gmail.com>
> >> >>>>>>>>> wrote:
> >> >>>>>>>>>
> >> >>>>>>>>>> Hi Michael,
> >> >>>>>>>>>> At a guess, try this:
> >> >>>>>>>>>>
> >> >>>>>>>>>> iqr<-function(x) {
> >> >>>>>>>>>>
> >> >>>>>>>>>
> >> >>>>>>>>>
> >> >>>>>>>>>
> return(paste(round(quantile(x,0.25),0),round(quantile(x,0.75),0),sep="-")
> >> >>>>>>>>>> }
> >> >>>>>>>>>>
> >> >>>>>>>>>> .col3_Range=iqr(datat$tenure)
> >> >>>>>>>>>>
> >> >>>>>>>>>> Jim
> >> >>>>>>>>>>
> >> >>>>>>>>>>
> >> >>>>>>>>>>
> >> >>>>>>>>>> On Tue, Apr 19, 2016 at 11:15 AM, Michael Artz
> >> >>>>>>>>>> <michaeleartz at gmail.com>
> >> >>>>>>>>>> wrote:
> >> >>>>>>>>>>> Hi,
> >> >>>>>>>>>>> I am trying to show an interquartile range while grouping
> >> >>>>>>>>>>> values
> >> >>>>>>>>> using
> >> >>>>>>>>>>> the function ddply(). So my function call now is like
> >> >>>>>>>>>>>
> >> >>>>>>>>>>> groupedAll <- ddply(data
> >> >>>>>>>>>>> ,~groupColumn
> >> >>>>>>>>>>> ,summarise
> >> >>>>>>>>>>> ,col1_mean=mean(col1)
> >> >>>>>>>>>>> ,col2_mode=Mode(col2) #Function I wrote for
> >> >>>>>>>>>>> getting
> >> >>>>>>>>> the
> >> >>>>>>>>>>> mode shown below
> >> >>>>>>>>>>>
> >> >>>>>>>>>>>
> >> >>>>>>>>>>>
> >> >>>>>>>>>>>
> ,col3_Range=paste(as.character(round(quantile(datat$tenure,c(.25)))),
> >> >>>>>>>>>>> as.character(round(quantile(data$tenure,c(.75)))), sep =
> "-")
> >> >>>>>>>>>>> )
> >> >>>>>>>>>>>
> >> >>>>>>>>>>> #custom Mode function
> >> >>>>>>>>>>> Mode <- function(x) {
> >> >>>>>>>>>>> ux <- unique(x)
> >> >>>>>>>>>>> ux[which.max(tabulate(match(x, ux)))]
> >> >>>>>>>>>>> }
> >> >>>>>>>>>>>
> >> >>>>>>>>>>> I am not sre what is going wrong on my interquartile range
> >> >>>>>>>>>>> function, it
> >> >>>>>>>>>>> works on its own outside of ddply()
> >> >>>>>>>>>>>
> >> >>>>>>>>>>> [[alternative HTML version deleted]]
> >> >>>>>>>>>>>
> >> >>>>>>>>>>> ______________________________________________
> >> >>>>>>>>>>> R-help at r-project.org mailing list -- To UNSUBSCRIBE and
> more,
> >> >>>>>>>>>>> see
> >> >>>>>>>>>>> https://stat.ethz.ch/mailman/listinfo/r-help
> >> >>>>>>>>>>> PLEASE do read the posting guide
> >> >>>>>>>>>> http://www.R-project.org/posting-guide.html
> >> >>>>>>>>>>> and provide commented, minimal, self-contained, reproducible
> >> >>>>>>>>>>> code.
> >> >>>>>>>>>>
> >> >>>>>>>>>
> >> >>>>>>>>> [[alternative HTML version deleted]]
> >> >>>>>>>>>
> >> >>>>>>>>> ______________________________________________
> >> >>>>>>>>> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more,
> >> >>>>>>>>> see
> >> >>>>>>>>> https://stat.ethz.ch/mailman/listinfo/r-help
> >> >>>>>>>>> PLEASE do read the posting guide
> >> >>>>>>>>> http://www.R-project.org/posting-guide.html
> >> >>>>>>>>> and provide commented, minimal, self-contained, reproducible
> >> >>>>>>>>> code.
> >> >>>>>>>>>
> >> >>>>>>>>
> >> >>>>>>>> [[alternative HTML version deleted]]
> >> >>>>>>>>
> >> >>>>>>>> ______________________________________________
> >> >>>>>>>> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more,
> see
> >> >>>>>>>> https://stat.ethz.ch/mailman/listinfo/r-help
> >> >>>>>>>> PLEASE do read the posting guide
> >> >>>>>>>> http://www.R-project.org/posting-guide.html
> >> >>>>>>>> and provide commented, minimal, self-contained, reproducible
> >> >>>>>>>> code.
> >> >>>>
> >> >>>>
> >> >>>
> >> >>
> >> >
> >> > ______________________________________________
> >> > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
> >> > https://stat.ethz.ch/mailman/listinfo/r-help
> >> > PLEASE do read the posting guide
> >> > http://www.R-project.org/posting-guide.html
> >> > and provide commented, minimal, self-contained, reproducible code.
> >>
> >
>
[[alternative HTML version deleted]]
More information about the R-help
mailing list