rstatisticsdistributionnormal-distributionfitdistrplus

Fitting a normal distribution in R


I'm using the following code to fit the normal distribution. The link for the dataset for "b" (too large to post directly) is :

link for b

setwd("xxxxxx")
library(fitdistrplus)

require(MASS)
tazur <-read.csv("b", header= TRUE, sep=",")
claims<-tazur$b
a<-log(claims)
plot(hist(a))

enter image description here

After plotting the histogram, it seems a normal distribution should fit well.

f1n <- fitdistr(claims,"normal")
summary(f1n)

#Length Class  Mode   
#estimate 2      -none- numeric
#sd       2      -none- numeric
#vcov     4      -none- numeric
#n        1      -none- numeric
#loglik   1      -none- numeric

plot(f1n)

But when I try to plot the fitted distribution, I get

Error in xy.coords(x, y, xlabel, ylabel, log) : 

  'x' is a list, but does not have components 'x' and 'y'

and even the summary statistics are off for f1n.

Any ideas?


Solution

  • Looks like you are making confusion between MASS::fitdistr and fitdistrplus::fitdist.

    I will show you how to work with both packages.

    ## reproducible example
    set.seed(0); x <- rnorm(500)
    

    Using MASS::fitdistr

    No plot method is available, so do it ourselves.

    library(MASS)
    fit <- fitdistr(x, "normal")
    class(fit)
    # [1] "fitdistr"
    
    para <- fit$estimate
    #         mean            sd 
    #-0.0002000485  0.9886248515 
    
    hist(x, prob = TRUE)
    curve(dnorm(x, para[1], para[2]), col = 2, add = TRUE)
    

    enter image description here


    Using fitdistrplus::fitdist

    library(fitdistrplus)
    FIT <- fitdist(x, "norm")    ## note: it is "norm" not "normal"
    class(FIT)
    # [1] "fitdist"
    
    plot(FIT)    ## use method `plot.fitdist`
    

    enter image description here