Załóżmy, że mam zestaw liczb, które, jak podejrzewam, pochodzą z tego samego rozkładu.Generowanie losowej liczby z obiektu gęstości (lub szerzej z zestawu liczb)
set.seed(20130613)
x <- rcauchy(10)
Chciałbym funkcji, która losowo generuje liczbę z tego samego nieznanego rozkładu. Jedna z metod, o której myślałem, to stworzenie obiektu o nazwie density
, a następnie pobranie z niego CDF i przyjęcie odwrotnego CDF losowej zmiennej jednolitej (see Wikipedia).
den <- density(x)
#' Generate n random numbers from density() object
#'
#' @param n The total random numbers to generate
#' @param den The density object from which to generate random numbers
rden <- function(n, den)
{
diffs <- diff(den$x)
# Making sure we have equal increments
stopifnot(all(abs(diff(den$x) - mean(diff(den$x))) < 1e-9))
total <- sum(den$y)
den$y <- den$y/total
ydistr <- cumsum(den$y)
yunif <- runif(n)
indices <- sapply(yunif, function(y) min(which(ydistr > y)))
x <- den$x[indices]
return(x)
}
rden(1, den)
## [1] -0.1854121
Moje pytania są następujące:
- Czy istnieje lepsza (lub wbudowane R) sposób, aby wygenerować liczbę losową z obiektu gęstości?
- Czy są jakieś inne pomysły na generowanie losowej liczby z zestawu liczb (oprócz
sample
)?
Teoria tego jest znacznie bardziej subtelna. Jak szacuje się gęstość? Które jądro jest używane? Czy wokół tego oszacowania są przedziały ufności? Czy to może być model mieszany? itp. –