我是R的初學者,我正在做一個模擬研究,我設法生成一個樣本,我想要做什麼。 但是,我不知道我應該如何複製我所做的。如何複製我的模擬研究
這裏是我寫到目前爲止程序:
I <- 500 # number of observations
J <- 18 # total number of items
K <- 6 # number of testlets
JK <-3 # number of items within a testlet
response <- matrix(0, I, J) # null binary (0, 1) response matrix
unit <- matrix(1, JK, 1) # unit vector
set.seed(1234)
# Multidimensional 3-pl model
pij <- function(a,b,c,theta,gamma) {c+(1-c)*(1/(1+exp(-1.7*a*(theta-b-gamma))))}
# Assigning a and b parameter values
a <- c(.8,.9,.7,.8,.9,.7,.8,.9,.7,.8,.9,.7,.8,.9,.7,.8,.9,.7)
b <-c(1,0,-1.5,1,0,-1.5,1,0,-1.5,1,0,-1.5,1,0,-1.5,1,0,-1.5)
# Assigning c-parameter, each 3 items (c-parameter & testlet effect)
#(small&small, small&large, large&small, large&large, mixed&small, mixed&large)
c <- c(.2,.2,.2,.2,.2,.2,.5,.5,.5,.5,.5,.5,.2,.33,.5,.2,.33,.5)
theta <- rnorm(I, 0, 1) # random sampling theta-values from normal dist. M=0, SD=1
gamma1 <- rnorm(I, 0, .2) # small testlet effect: random sampling gamma from normal dist. M=0, SD=.2
gamma2 <- rnorm(I, 0, 1) # large testlet effect: random sampling gamma from normal dist. M=0, SD=1
gamma3 <- rnorm(I, 0, .2) # small testlet effect: random sampling gamma from normal dist. M=0, SD=.2
gamma4 <- rnorm(I, 0, 1) # large testlet effect: random sampling gamma from normal dist. M=0, SD=1
gamma5 <- rnorm(I, 0, .2) # small testlet effect: random sampling gamma from normal dist. M=0, SD=.2
gamma6 <- rnorm(I, 0, 1) # large testlet effect: random sampling gamma from normal dist. M=0, SD=1
# implementing that the testlet effect is same for the items within a testlet
gamma1T <- gamma1 %*% t(unit)
gamma2T <- gamma2 %*% t(unit)
gamma3T <- gamma3 %*% t(unit)
gamma4T <- gamma4 %*% t(unit)
gamma5T <- gamma5 %*% t(unit)
gamma6T <- gamma6 %*% t(unit)
gammaT <- matrix(c(gamma1T, gamma2T, gamma3T, gamma4T, gamma5T, gamma6T), I, J) # getting all the gammas together in a large matrix
# Generating data using the information above
for(i in 1:I) {
for(j in 1:J) {
response[i, j] <- ifelse(pij(a=a[j], b=b[j], c=c[j], theta=theta[i], gamma=gammaT[i,j]) < runif(1), 0, 1)
}
}
因此,我得到一個數據集的「響應」。 我想要做的就是複製這個並得到說1000個「響應」數據集。 我認爲這可以通過複製「theta」和「gamma」的隨機採樣來完成,但是我沒有想法實際做到這一點。
很多很多預先感謝,
Hanjoe。
嗨Stedy,謝謝你的建議。當你說把局部變量放到一個函數中時,你能更清楚些嗎? – user1224802 2012-02-22 18:24:52