[R] Generating Replicate Datasets (using loops or other means)

VTLT1999 jonathan-beard at uiowa.edu
Tue Sep 11 15:11:28 CEST 2007


Hello Moshe,

Replication in this sense means that I want to use the parameters specified
in a1 b1, and c1 to produce a set of simulated responses, coded as a 0 or a
1, and do this many times.  So a1, b1, and c1 do not change, and I would
like to produce 30 different sets of simulated responses, all placed in
their own separate file.  I'm almost to the point of copying and pasting the
code 30 times and then running it, but I would like to believe that there is
a more elegant way to tackle this problem.

Thanks,

Jon



Hi Jonathan,

What exactly do you mean by replication? 
Do you want to keep a1,b1,c1,... unchanged but have 30
different sets of random numbers?

Regards,

Moshe.

--- VTLT1999 <jonathan-beard at uiowa.edu> wrote:

> 
> Hello All,
> 
> I have searched many help forums, message boards,
> etc. and I just can't
> apply the comments to what I need my program to do. 
> I am running R 2.5.1 on
> an XP system, and my desire is to produce replicate
> datasets for a
> simulation study I am running.  Essentially, I have
> sets of parameters (a's,
> b's, and c's) that define a function which produces
> a decimal value.  This
> value is compared to a random uniform value, and is
> coded a 1 if the
> function is greater than the uniform value, 0 if it
> is <= to the uniform
> value.  My code thus far works great, but I just
> need it to run several
> times.    Here we go:
> 
> library(mvtnorm)
> library(sm)
> library(ltm)
> library(irtoys)
> 
> k<- 5000
> set.seed(271828)
> t <-
>
rmvnorm(n=k,mean=c(-1,0,1),sigma=matrix(c(1,.8,.5,.8,1,.8,.5,.8,1),3,3))
> 
>   #Using mv here because of the likely association
> of ability (theta = t)
> across time.
> 
> t1<-as.matrix(t[,1])
> t2<-as.matrix(t[,2])
> t3<-as.matrix(t[,3])
> 
> set.seed(271828)
> 
> #  Population item parameters (n=54)  from which we
> will select relevant
> items
> #  These are the parameters that are used in the
> function
> 
> a <- c(1.18120, 0.92613, 0.96886, 0.80503, 1.12384, 
>        0.84073, 0.85544, 0.86801, 1.01054, 0.82278,
>        1.10353, 0.78865, 0.98421, 1.76071, 0.89603, 
>        0.84671, 0.89737, 0.74775, 0.32190, 0.69730, 
>        0.72059, 1.16762, 1.29257, 1.32902, 0.59540, 
>        0.51022, 0.59259, 0.93951, 0.68568, 0.55649, 
>        0.88084, 0.52940, 0.45735, 0.57560, 1.11779,
>        0.96984, 1.19692, 0.99102, 1.25847, 1.62555, 
>        0.63049, 1.07807, 1.04897, 1.23138, 1.14014, 
>        1.25230, 1.14844, 0.59287, 0.83143, 0.81723,
>        0.52141, 0.61980, 0.49945, 1.02749)
> 
> b <- c(-2.51737, -1.95897, -1.72667, -0.82988,
> -0.36093,
>         0.72554,  0.91442,  0.78061,  0.06088, 
> 0.75733,
>        -0.76371,  0.24552, -0.42050,  0.88232,
> -0.81761,
>         0.06466, -0.43866, -0.46042,  0.21636,
> -0.73147,
>        -1.44086, -1.03718,  0.07275, -0.17197, 
> 1.53796,
>        -0.45631, -1.69826, -0.66506,  0.98921, 
> 0.30714,
>        -0.62245,  0.97253,  1.95894,  0.21277, 
> 1.96346,
>         1.18825,  1.59917, -0.28401, -1.23530,
> -0.09671,
>        -0.31581, -0.66149, -0.81284, -0.35399,
> -0.07623, 
>         1.06442, -0.68559,  1.07591,  0.97458, 
> 0.06436,
>         1.25622,  1.73954,  1.75052,  2.34088)
> 
> c <- c(0.00000, 0.00000, 0.00000, 0.00000, 0.19648,
>        0.31302, 0.26454, 0.19714, 0.06813, 0.21344,
>        0.00000, 0.03371, 0.00000, 0.16581, 0.11054, 
>        0.08756, 0.07115, 0.26892, 0.00000, 0.06883, 
>        0.00000, 0.14815, 0.32389, 0.19616, 0.17597,
>        0.00000, 0.00000, 0.04337, 0.19949, 0.20377, 
>        0.00000, 0.06243, 0.13639, 0.00000, 0.18166,
>        0.15996, 0.20184, 0.08331, 0.24453, 0.26114, 
>        0.16434, 0.20750, 0.32658, 0.31870, 0.45227,
>        0.35039, 0.31178, 0.17999, 0.22774, 0.21675,
>        0.10153, 0.17764, 0.15205, 0.19858)
> 
> #  Item parameters for generating 3PL data for all
> five testing occasions:
> #  This selects the relevant parameters for a
> particular data generation run
> #  Only parameters for the first testing occasion
> are shown to save space
> 
> a1 <- as.matrix(a[c(1:5,15:20,22:24,38:44)])
> b1 <- as.matrix(b[c(1:5,15:20,22:24,38:44)])
> c1 <- as.matrix(c[c(1:5,15:20,22:24,38:44)])
> 
> #  Here is where I would like to begin my
> replications, but don't know how
> to make R do it.
> #  The code below produces a matrix of 0's and 1's
> (which will be used by
> another program)
> #  I would like to nest this in a "do loop" such
> that, say, 30 replicate
> datasets are produced using the 
> #    same parameters. 
>    
>    N <- nrow(t1)     # number of examinees
>    n <- nrow(a1)     # number of items
>    d <- 1.7
>    theta <- t1  
>    response <- matrix (0,N,n)  
>    uni <- matrix (runif(N*n),nrow = N)
> 
>    for (i in 1:N)
>    {
>      for (j in 1:n) 
>      {
>       if (
> c1[j]+(1-c1[j])/(1+exp(-d*a1[j]*(theta[i]-b1[j]))) >
> uni[i,j] )
>          response[i,j] = 1
>        else 
>          response[i,j] = 0
>      }
>    }
> write.table(response, file="C:/responses.dat", sep="
> ",row.names=FALSE,
> col.names=FALSE)  
> 
> I tried earlier nesting this in another for loop,
> but that indexes elements
> of matrices and vectors, and doesn't seem to apply
> to a "global" loop
> methodology.  I am attempting to use replicate as we
> speak, but
> documentation is sparse (help("replicate") is nested
> in lapply information). 
> Any guidance is greatly appreciated.  
> 
> Thanks in advance,
> 
> Jonathan Beard
-- 
View this message in context: http://www.nabble.com/Generating-Replicate-Datasets-%28using-loops-or-other-means%29-tf4418768.html#a12613901
Sent from the R help mailing list archive at Nabble.com.



More information about the R-help mailing list