R

时间:2015-08-20 04:55:06

标签: r dataset simulation

我在这里模拟另一个数据集,再次卡住了!

这是我想做的事情:

200次观察,有90个独立变量(平均值为0,sd 1)

创建y的等式是:y = 2x_1 + ... + 2x_30 - x_31 - ... - x_60 + 0 * x_61 + ... + 0 * x_90 + mu (换句话说,前30个值的系数为2,接下来的30个值的系数为-1,最后30个值的系数为0)。 mu也是随机生成的正常变量,均值为0,sd 10。

这是我到目前为止所拥有的:

set.seed(11)
n <- 200
mu <- rnorm(200,0,10)
p1 <- for(i in 1:200){
   rnorm(200,0,1)
       }
p2 <- cbind(p1)
p3 <- for(i in 1:90){
   if i<=30, y=2x
      if i>30 & i<=60, y=-x
         if i>60 & i<=90, y=0x
             }

我还在学习R的许多方面,所以我很确定代码有很多错误,即使在语法方面也是如此。非常感谢你的帮助!

谢谢!

1 个答案:

答案 0 :(得分:2)

尝试

library(mvtnorm)
coefs <- rep(c(2, -1, 0), each=30)
mu <- rnorm(200, 0, 10)
m <- rep(0, 90) # mean of independent variables
sig <- diag(90) # cov of indep variables
x <- rmvnorm(200, mean=m, sigma=sig) # generates 200 observations from multivariate normal 
y <- x%*%coefs + mu

万一,如果你对线性代数感到不舒服

n <- 200
coefs <- rep(c(2, -1, 0), each=30)
mu <- rnorm(n, 0, 10)
x <- matrix(nrow=n, ncol=90) # initializes the indep.vars
for(i in 1:90){
  x[, i] <- rnorm(200, 0, 1)
}
y <- rep(NA, n) # initializes the dependent vars
for(i in 1:n){
  y[i] = sum(x[i,]*coefs) + m[i]
}

x[i,]*coefs完全给出(2*x_1,..., 2*x_30, -x_31,...,- x_60,0*x_61,...,0*x_90),因为*是元素操作。

在实际使用它之前,你最好先学习R的基础知识。