[R] Fwd: Newbie to R: would like to solve a problem

percy tiglao prtiglao at gmail.com
Sat May 13 23:44:10 CEST 2006

I forgot to forward the message to the group :-/

And I have one more question, but it pertains somewhat to this last
post (which is why I attached the last message)

What is the name of the distribution that takes skewness and kurtosis
as a factor? I figure, if I can find a distribution that better models
the damage done in this game, it would be better off period. A normal
curve estimates the data pretty darn well already, maybe adding in
skewness and kurtosis will make the model close to exact.

I tried searching for skewness and kertosis on google, and found some
information on a "Weibull" distribution, but it only seems to model
skewness and not as much kurtosis. Is there a specific distribution
that can model data based on both skewness and kurtosis?

---------- Forwarded message ----------
From: percy tiglao <prtiglao at gmail.com>
Date: May 12, 2006 5:16 PM
Subject: Re: [R] Newbie to R: would like to solve a problem
To: "McGehee, Robert" <Robert.McGehee at geodecapital.com>

On 5/12/06, McGehee, Robert <Robert.McGehee at geodecapital.com> wrote:
> Not sure I completely followed (especially what a Knockback is), but
> I'll give this a try.

Lol :-) Video game stuff. Unimportant. You got the main gist of what I
want though.

> If you want to precisely define the convolution of multiple attacks, you
> would want to use a language that utilizes symbolic integration, which R
> currently does not support (e.g. see Mathematica). That said, it sounds
> like you don't actually want a precise answer, but you want to have a
> "polynomial function estimate" the true distribution. If this is the
> case, then it seems like doing a simulation may be precisely what you
> want. That is, model a polynomial approximation of the total damage from
> multiple attacks as a function of the number of attacks.

Ah. So to get the "precise" formula, I need Mathematica? Gosh... I'll
just do it by hand then, Lol. I'm so cheap :-/

Well, a simulation was the 2nd thing I was going to ask for if there
was no way for this to work out.

> For instance the function below will plot what the distribution of N
> multiple attacks would look like:
> distributionFun <- function(N, min, max, skill, num_attacks) {
>         hist(replicate(1000, sum(replicate(N, total_damage(min, max,
> skill, num_attacks)))))
> }
> and
> sum(replicate(N, total_damage(min, max, skill, num_attacks)))
> will give you a sample from this distribution.
> Thus, distributionFun(1, 10, 20, 1, 1) will show the piecewise constant
> distribution that you would expect from a single attack, and setting N
> to a large number produces a Gaussian distribution (CLT). [NB: Here the
> N and num_attacks arguments may be redundant, but it's not clear to me
> how these multiple attacks work (i.e. are there multiple attacks
> multiple times, etc.)]

If I'm reading this code correctly, You got 100% what I was looking
for, in terms of simulation anyway :)

> Once you have the simulated distribution, you can either create a
> polynomial model as a function of N and use these values as inputs into
> your web simulation, or you can use the code above to grab a single
> sample from the distribution. Also, I imagine you would get better
> results modeling the moments of the distribution (mean, variance, skew,
> kurtosis, etc.) rather than using a polynomial function, but up to you.

Wow... there is so much more math I need to learn before I attempt
this problem again... Kurtosis? Thank god for Wikipedia + googleing
tutorials. And since when was skewness represented as a number? o.O

> Also, if you're only doing this for the first 8 attacks, then
> integrating a piecewise constant function by hand (if Mathematica is
> unavailable) is not too difficult, and running simulations may be going
> overboard.

Not with high-school level Math knowledge it is. Lol. *note to self,
start buying math books*

> Lastly, just as an FYI, your functions can be rewritten a bit more
> concisely as such:
> sdmg <- function(min, max, skill) {
>      runif(1, min, max) * ifelse(runif(1) > 0.4, skill, skill + 1)
> }
> total_damage <- function(min, max, skill, num_attacks) {
>         sum(replicate(num_attacks, sdmg(min, max, skill))
> }
> Good luck,
> Robert

Thanks so much for all your help. I'll be looking into other languages
(like Yacas) to see if they can do this precisely (Idealy, I need it
as a function of min, max, and skill. That way, It will be easy enough
for Javascript to calculate.)

More information about the R-help mailing list