使用循环在 R 中生成模拟数据

generating simulated data in R with loop

我正在尝试模拟稍后将继续使用的数据集。我需要创建一个包含 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

感谢任何有关此代码的建议或帮助! 谢谢!

您还没有实例化 y 向量,只需将 data 更改为 y 就可以了。这就是全部:

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

只是为了提供一个替代方案,您可以使用 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
## ...