使用循环

时间:2015-08-03 23:33:01

标签: r dataset simulate

我正在尝试模拟我稍后会继续使用的数据集。我需要创建一个具有1000个观测值(n = 1000)的变量,其中每个观测值是先前观测值的函数,其具有以下等式:yt是80%yt-1 + 20%随机噪声,均值为0且sd 1.此外, y1的值= 1.

这是我到目前为止的代码(它运行,但只提供了1000个1而没有其他值。因此,它没有正确生成数据,我无法弄清楚为什么......):

n <- 1000
i <- rnorm(n=1000, mean=0, sd=1)
data <- rep(1,1000);
for(i in 2:1000){
  y[i]=0.80*y[i-1] + 0.20*rnorm(1)
    }
data

对此代码的任何建议或帮助表示赞赏! 谢谢!

2 个答案:

答案 0 :(得分:3)

您尚未实例化y向量,只需将data更改为y,您就可以了。这就是一起:

y <- rep(1,1000);
for(i in 2:1000){
  y[i]=0.80*y[i-1] + 0.20*rnorm(1)
    }
y

答案 1 :(得分:2)

只是提供替代方案,您可以使用Rcpp来执行此操作。当你需要计算这些类型的序列时,Rcpp通常是一个不错的选择,因为它更有利于在编译代码中循环,而不是在R代码中循环。

cppFunction('
    DoubleVector gensim(int n=1000, double mean=0, double sd=1 ) {
        DoubleVector res(n);
        double* resp = REAL(res);
        resp[0] = 1;
        for (int i = 1; i < n; ++i)
            resp[i] = 0.80*resp[i-1] + 0.20*Rf_rnorm(mean,sd);
        return res;
    }
');
gensim();
## [1]  1.0000000000  0.8083990372  0.6281932260  0.8158159737  0.4193451426
## [6]  0.2963336105  0.1500730564 -0.0251075339 -0.0990122044 -0.0497148910
## ...