steves
steves

Reputation: 331

Fit Gamma distribution and plot by factor in R

I have data.frame object with a numeric column amount and categorical column fraud:

amount <- [60.00, 336.38, 119.00, 115.37, 220.01, 60.00, 611.88, 189.78 ...]

fraud <- [1,0,0,0,0,0,1,0, ...]

I want to fit a gamma distribution to amount but to plot it by factor(fraud). I want a graph that will show me 2 curves with 2 different colors that will distinguish between the 2 sets (fraud/non fraud groups).

Here is what I have done so far:

fit.gamma1 <- fitdist(df$amount[df$fraud == 1], distr = "gamma", method = "mle")
plot(fit.gamma1)

fit.gamma0 <- fitdist(df$amount[df$fraud == 0], distr = "gamma", method = "mle")
plot(fit.gamma0)

I have used this reference: How would you fit a gamma distribution to a data in R?

Upvotes: 1

Views: 936

Answers (1)

Julius Vainora
Julius Vainora

Reputation: 48191

Perhaps what you want is

curve(dgamma(x, shape = fit.gamma0$estimate[1], rate = fit.gamma0$estimate[2]), 
      from = min(amount), to = max(amount), ylab = "")
curve(dgamma(x, shape = fit.gamma1$estimate[1], rate = fit.gamma1$estimate[2]), 
      from = min(amount), to = max(amount), col = "red", add = TRUE)

enter image description here

or with ggplot2

ggplot(data.frame(x = range(amount)), aes(x)) + 
  stat_function(fun = dgamma, aes(color = "Non fraud"),
                args = list(shape = fit.gamma0$estimate[1], rate = fit.gamma0$estimate[2])) +
  stat_function(fun = dgamma, aes(color = "Fraud"),
                args = list(shape = fit.gamma1$estimate[1], rate = fit.gamma1$estimate[2])) +
  theme_bw() + scale_color_discrete(name = NULL)

enter image description here

Upvotes: 2

Related Questions