Search code examples
rmatrixhistogramprobability-densitystatistics-bootstrap

Make table/matrix of probability densities and associated breaks


The following code takes vector V1, and bootstraps 10000 times a randomized rnomal sample made out of V1, creating with the results a matrix with 10000 columns. It then creates a histogram for that matrix.

V1 <- c(0.18, 0.2, 0.24, 0.35, -0.22, -0.17, 0.28, -0.28, -0.14, 0.03, 0.87, -0.2, 0.06, -0.1, -0.72, 0.18, 0.01, 0.31, -0.36, 0.61, -0.16, -0.07, -0.13, 0.01, -0.09, 0.26, -0.14, 0.08, -0.62, -0.2, 0.3, -0.21, -0.11, 0.05, 0.06, -0.28, -0.27, 0.17, 0.42, -0.05, -0.15, 0.05, -0.07, -0.22, -0.34, 0.16, 0.34, 0.1, -0.12, 0.24, 0.45, 0.37, 0.61, 0.9, -0.25, 0.02)

xxx <- round(sapply(1:10000, function(i) rnorm(length(V1), mean=sample
                                      (V1, length(V1), replace=TRUE), sd(V1))),2)

h <- hist(xxx, plot=T)

I would like to create a printout of its probability density function in matrix or table format, i.e. get a matrix with 1.0, 0.9, 0.8, 0.7, 0.6, 0.5, 0.4, 0.3, 0.2, 0.1, 0, -0,1 -0.2, -0.3, -0.4, -0.5, -0.6, -0.7, -0.8, -0.9, -1.0 as breaks, and the associated probability densities on the next column.

My problems are two. First, specifying the breaks I want fails. Secondly, making a matrix with h$breaks and h$density also fails. Any insights would be much appreciated. Thank you.

#This works, but I want to specify the breaks
h <- hist(xxx, plot=T, breaks=20)

#This gives error "some 'x' not counted; maybe 'breaks' do not span range of 'x'"
h <- hist(xxx, plot=T, breaks=c(1.0, 0.9, 0.8, 0.7, 0.6, 0.5, 0.4, 0.3, 0.2, 0.1, 0, -0,1 -0.2, -0.3, -0.4, -0.5, -0.6, -0.7, -0.8, -0.9, -1.0))

#This gives error number of rows of result is not a multiple of vector length
ddd<- cbind(h$breaks, h$density)

Solution

  • At first you have a type error, you confused “.” and “,”.

    At second the breaks must span the whole range of observations like this:

    h <- hist(xxx, plot=F, breaks=c(max(xxx),1.0, 0.9, 0.8, 0.7, 0.6, 0.5, 0.4, 0.3, 0.2, 0.1, 0, -0.1, -0.2, -0.3, -0.4, -0.5, -0.6, -0.7, -0.8, -0.9, -1.0,min(xxx)))
    

    And at last, you want to pick “mids” instead of breaks:

    ddd<- cbind(h$mids, h$density)