[R] A coding question involving variable assignments in ifelse()

Gabor Grothendieck ggrothendieck at gmail.com
Fri Apr 27 17:41:54 CEST 2007


I don't think there is any requirement to identify yourself in any
way nor should their be.  Many people on the list are in academia
and in those cases they probably want their name in lights but
others may wish to have a lower profile and its common to use
an alias on the net for privacy.

On 4/27/07, xpRt.wannabe <xprt.wannabe at gmail.com> wrote:
> Is this an ad hominem comment or a comment of brevity?  Unless my eyes
> are playing tricks on me, I can't seem to find any language in the
> Posting Guide on what is considered a reasonable vs. unreasonable
> request from an anonymous poster.  Kindly point me to it if it exists.
>
> In any case, thanks for your time and suggestion.
>
> On 4/26/07, Duncan Murdoch <murdoch at stats.uwo.ca> wrote:
> > On 4/26/2007 5:21 PM, xpRt.wannabe wrote:
> > > I made a few slight modifications to the original model in an effort
> > > to see the inner workings of the code:
> > >
> > > deductible <- 1
> > > coverage.limit <- 2
> > > insurance.threshold <- deductible + coverage.limit
> > >
> > > <snip>
> > >
> > > set.seed(123)
> > > loss <- abs(rnorm(rpois(1, 5), 1, 3))
> > > n <- length(loss)
> > > accept <- runif(n) < 0.8
> > > payout <- runif(n) < 0.999
> > > sum(ifelse(accept & payout, ifelse(loss > insurance.threshold,
> > > loss - coverage.limit, pmin(loss, deductible)), 0))
> > >
> > > [1] 6.188817
> > >
> > > <snip>
> > >
> > > To tease out the data as well as to see the effect of 'accept &
> > > payout', I did the following:
> > >
> > >> loss
> > > [1] 3.401663 4.570620 4.068667 4.718488
> > >> accept
> > > [1]  TRUE FALSE  TRUE  TRUE  # The second loss claim is NOT accepted
> > > by the insurance company.
> > >> payout
> > > [1] TRUE TRUE TRUE TRUE
> > >> accept & payout
> > > [1]  TRUE FALSE  TRUE  TRUE  # The second entry is FALSE because of
> > > the second entry in 'accept.'
> > >
> > > Based on the inner ifelse() expression, the original loss numbers
> > > become : 1.401663, 2.570620, 2.068667, 2.718488, respectively (which
> > > is fine and what I wanted).
> > >
> > > Because the second entry in 'accept & payout' is FALSE, the second
> > > altered loss number (2.570620) becomes 0, making sum(...) equal
> > > 6.188817.  Unfortunately this is _not_ what I want, and I apologize
> > > for not being clear in the first place.  What I want is: for any FALSE
> > > entry, the original loss number is unaltered, as opposed to become 0.
> > > So in the example above, the four numbers that should have been added
> > > are: 1.401663, 4.570620, 2.068667, 2.718488, yielding 10.759438
> > > instead of 6.188817.
> > >
> > > Any further suggestions would be greatly appreciated.
> >
> > I'm sorry, but from an anonymous poster that's not a reasonable request.
> >  Just work it out yourself.
> >
> > Duncan Murdoch
> >
> > >
> > > On 4/26/07, Duncan Murdoch <murdoch at stats.uwo.ca> wrote:
> > >> On 4/26/2007 2:31 PM, xpRt.wannabe wrote:
> > >>> Just to be sure, is what I have below the right intepretation of your
> > >>> suggestion:
> > >> Yes, that's what I suggested.
> > >>
> > >> Duncan Murdoch
> > >>
> > >>> deductible <- 15
> > >>> coverage.limit <- 75
> > >>> insurance.threshold <- deductible + coverage.limit
> > >>>
> > >>> tmpf <- function() {
> > >>> loss <- rlnorm(rpois(1, 3), 2, 5)
> > >>> n <- length(loss)
> > >>> accept <- runif(n) < 0.8
> > >>> payout <- runif(n) < 0.999
> > >>> sum(ifelse(accept & payout, ifelse(loss > insurance.threshold, loss -
> > >>> coverage.limit, pmin(loss, deductible)), 0))
> > >>> }
> > >>> net <- replicate(1000000, tmpf())
> > >>>
> > >>> On 4/26/07, Duncan Murdoch <murdoch at stats.uwo.ca> wrote:
> > >>>> On 4/26/2007 12:48 PM, xpRt.wannabe wrote:
> > >>>>> Dear List,
> > >>>>>
> > >>>>> Below is a simple, standard loss model that takes into account the
> > >>>>> terms of an insurance policy:
> > >>>>>
> > >>>>> deductible <- 15
> > >>>>> coverage.limit <- 75
> > >>>>> insurance.threshold <- deductible + coverage.limit
> > >>>>>
> > >>>>> tmpf <- function() {
> > >>>>> loss <- rlnorm(rpois(1, 3), 2, 5)
> > >>>>> sum(ifelse(loss > insurance.threshold, loss - coverage.limit,
> > >>>>> pmin(loss, deductible)))
> > >>>>> }
> > >>>>> net <- replicate(1000000, tmpf())
> > >>>>>
> > >>>>> Now, I would like to enhance the model by incorporating the following
> > >>>>> two probabilities:
> > >>>>>
> > >>>>> 1. Probability of claim being accepted by the insurance company, say, 0.8
> > >>>>> 2. Probability of payout by the insurance company, say, 0.999
> > >>>>>
> > >>>>> Could anyone suggest how one might do this?
> > >>>> A general way to generate events with probability p is runif(n) < p.  So
> > >>>> I'd add
> > >>>>
> > >>>> n <- length(loss)
> > >>>> accept <- runif(n) < 0.8
> > >>>> payout <- runif(n) < 0.999
> > >>>>
> > >>>> and then require "accept & payout"  before any payment at all, e.g.
> > >>>>
> > >>>> sum(ifelse(accept & payout, [ your old ifelse expression ], 0))
> > >>>>
> > >>>> There are a lot of implicit independence assumptions here; they may not
> > >>>> be very realistic.
> > >>>>
> > >>>> Duncan Murdoch
> > >>>>
> > >>> ______________________________________________
> > >>> R-help at stat.math.ethz.ch mailing list
> > >>> 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 stat.math.ethz.ch mailing list
> 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.
>



More information about the R-help mailing list