r - Applying a function to elements of each row and then summarising -


i have question on manipulating data in data.frame.

essentially have large data set - abbreviated version below:

structure(list(nm_mean = c(194213914.326, 194213914.326, 194213914.326,  194213914.326, 194213914.326, 217947112.739), nm_se = c(9984735.05918367,  9984735.05918367, 9984735.05918367, 9984735.05918367, 9984735.05918367,  11010386.0760204), alpha = c(193.197697846336, 214.592588477741,  240.246557258741, 258.116959355425, 282.560024775668, 306.610038660465 ), beta = c(61526.2664158025, 57950.9563448233, 56085.1512614369,  52919.4794239927, 51483.4591654126, 50405.8186695088)), .names = c("nm_mean",  "nm_se", "alpha", "beta"), row.names = c(na, 6l), class = "data.frame") 

i want use rbeta generate probabilities using beta distribution , alpha , beta parameters

similarly want use rnorm generate random numbers using normal distribution nm_mean , nm_se mean , sd.

i want multiply rbeta values generated rnorm values , extract 50th, 25th , 75th quantile dataframe

so example row 1

x <- rbeta(1000,193.1977,61526.27) y <- rnorm(1000,194213914,9984735) z <- x*y  dat$ce <- quantile(z,0.5) dat$ll <- quantile(z,0.25) dat$ul <- quantile(z,0.975) 

in essence ce, ll , ul product of rbeta , rnorm appended database.

this vectorized solution based on conversation @thelatemail:

n   <- 1000 grp <- nrow(dat) z   <- with(dat, rnorm(grp*n, nm_mean, nm_se) * rbeta(grp*n, alpha, beta) ) m   <- 1  for(i in 1:nrow(dat)){   dat$ce[i] <- quantile(z[m:(i*1000)],0.5)   dat$ll[i] <- quantile(z[m:(i*1000)],0.25)   dat$ul[i] <- quantile(z[m:(i*1000)],0.975)   m <- m + 1000 } 

a less vectorized solution is:

for(i in 1:nrow(dat)){   x <- rbeta(1000, shape1 = dat$alpha[i], shape2 = dat$beta[i])   y <- rnorm(n=1000,dat$nm_mean[i],dat$nm_se[i])   z <- x*y    dat$ce[i] <- quantile(z,0.5)   dat$ll[i] <- quantile(z,0.25)   dat$ul[i] <- quantile(z,0.975) }  dat 
    nm_mean    nm_se    alpha     beta        ce        ll        ul 1 194213914  9984735 193.1977 61526.27  607563.9  573229.9  713057.2 2 194213914  9984735 214.5926 57950.96  712268.5  674826.3  836950.8 3 194213914  9984735 240.2466 56085.15  823322.9  777482.8  981156.7 4 194213914  9984735 258.1170 52919.48  937331.2  884945.0 1095876.3 5 194213914  9984735 282.5600 51483.46 1059980.4 1003596.4 1225615.6 6 217947113 11010386 306.6100 50405.82 1316733.1 1250190.1 1515185.0 

Comments

Popular posts from this blog

mysql - Dreamhost PyCharm Django Python 3 Launching a Site -

java - Sending SMS with SMSLib and Web Services -

php - What are the best practices for creatiang a "settings" model in Laravel 5? -