[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