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

AJ Rossini blindglobe at gmail.com
Sat Apr 28 12:20:18 CEST 2007



I agree entirely with Gabor.  My advice would be to just ignore the people who 
think differently -- however, if you want those particular folks to respond, 
you'll have to play by their rules.  (and if you don't play by their rules, 
you'll just have to ignore the consequences -- this _IS_ the internet, after 
all).

On Friday 27 April 2007, Gabor Grothendieck wrote:
> 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.



-- 
best,
-tony

blindglobe at gmail.com
Muttenz, Switzerland.
"Commit early,commit often, and commit in a repository from which we can 
easily
roll-back your mistakes" (AJR, 4Jan05).
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: not available
Url : https://stat.ethz.ch/pipermail/r-help/attachments/20070428/fb6094b4/attachment.bin 


More information about the R-help mailing list