简体   繁体   中英

Replicate each time with different standard deviation

I have a vector of standard deviations:

sd_vec<-runif(10,0,20) with 10 values between 0 and 20.

[1] 11.658106  9.693493 12.695608  4.091922  5.761061 18.410951 14.710990 12.095944 18.023123
[10] 13.294963

I would like to replicate the following process:

a<-rnorm(10,0,30)
[1] -21.265083  85.557147  23.958170 -32.843328   6.629831 -23.745339  46.094324  51.020059
[9]   1.041724  13.757235

n_columns=50
replicate(n_columns, a+rnorm(length(a), mean=0,sd=sd_vec))

The result should be 10 columns each of which are:

column 1: a + rnorm(length(a),0,11.658106)
column 2: a + rnorm(length(a),0,9.693493)
column 3: a + rnorm(length(a),0,12.695608)
.
.
.
column 10:a + rnorm(length(a),0,13.294963)

Will this use different values of sd_vec for each replication or will it use it for each random number generation?

According to your edit, then you may want to try

 a+sapply(sd_vec, rnorm, n=100, mean=0)

# example
> set.seed(1)
> sd_vec <-runif(10,0,20)
> set.seed(1)  
> a<-rnorm(100,0,30)
> n_columns=10 
> head(a+sapply(sd_vec, rnorm, n=100, mean=0))
           [,1]       [,2]      [,3]        [,4]       [,5]       [,6]      [,7]       [,8]       [,9]
[1,] -22.087869 -15.746650 -8.554735   0.7226986 -18.481801 -24.921835 -32.16206 -33.158153 -38.187974
[2,]   5.732942  18.078702 -6.489666  39.9422684   4.311839  32.504554  42.75921 -18.624133   7.954302
[3,] -29.906010 -13.260709 -2.483113 -36.0217953 -29.841630 -15.576334 -26.76925 -11.915258 -21.741820
[4,]  48.697584  45.395650 43.463125  40.7586401  47.903975  57.600406  47.59359  47.701659  33.782184
[5,]   6.409275  -7.122582 28.836887   2.3249113  13.884993   7.429514 -11.34081   1.960571  18.075706
[6,] -15.229450  -6.025260 -7.288529 -31.4375515 -18.184563 -45.038651 -50.00938 -26.965804 -37.610292
          [,10]
[1,] -17.391109
[2,]   6.883342
[3,] -26.144900
[4,]  48.118830
[5,]   9.970987
[6,] -26.668629

Your current solution will replicate sd_vec for each replication, not using each sd for each replication.

If you want to have columns for each sd then you may work on matrices. Create matrix of rnorm with desire sd by:

X <- rnorm(length(a)*n_columns, mean=0, sd=sd_vec)
X <- matrix(X, nrow=length(a), ncol=n_columns, byrow=TRUE)

Then add it to a converted to matrix:

matrix(a, nrow=length(a), ncol=n_columns) + X

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM