2015-08-20 2 views
0

Я имитирую другой набор данных здесь, и снова застрял!Имитированный набор данных в R

Вот что я хочу сделать:

200 наблюдений, с 90 независимыми переменными (в среднем 0, сд 1)

уравнение для создания у есть: у = 2x_1 + ... + 2x_30 - x_31 - ... - x_60 + 0 * x_61 + ... + 0 * x_90 + mu (Другими словами, первые 30 x значений будут иметь коэффициент 2, следующие 30 значений имеют коэффициент -1 и последние 30 значения имеют коэффициент 0). му также является случайной генерироваться обычной переменной со средним значением 0, с.о. 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, поэтому я довольно уверен, код имеет много ошибок, даже с точки зрения синтаксиса. Ваша помощь будет действительно оценена!

Спасибо!

ответ

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, прежде чем что-то делать с этим.

+0

не могли бы вы объяснить это немного дальше в своем ответе? Я не совсем уверен, как вы добрались до некоторых из этих кодов. Или есть более простой способ сделать это без пакета, и только для циклов? – Elle

+1

Поскольку все они независимы, вместо использования 'rmvnorm' вы можете просто выполнить' x <- replicate (n = 90, expr = rnorm (200)) '. – Gregor

+0

@ExperimenteR, спасибо за помощь с петлями for. Это имеет для меня гораздо больше смысла. Я думаю, я пытался заставить R сделать слишком много для создания моих циклов, и, конечно же, синтаксис был выключен. Еще раз спасибо. – Elle

Смежные вопросы