我在这里模拟另一个数据集,再次卡住了!
这是我想做的事情:
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的许多方面,所以我很确定代码有很多错误,即使在语法方面也是如此。非常感谢你的帮助!
谢谢!
答案 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
的基础知识。