我正在尝试模拟我稍后会继续使用的数据集。我需要创建一个具有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
对此代码的任何建议或帮助表示赞赏! 谢谢!
答案 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
## ...