【问题标题】:How to remove NaNs in a simulated data series?如何删除模拟数据系列中的 NaN?
【发布时间】:2022-01-03 15:13:43
【问题描述】:

我在下面生成了一大段 R 代码,用于使用指定的数据生成过程模拟两个变量的数据序列。每个变量的每个模拟中有 1006 个观察值 - 每个变量有 1000 个观察值,每个变量有 3 个滞后。该代码确实为两个变量生成了一个数据系列,但每个系列在第 14 次左右观察后都有 NaN,并且随着观察次数的增加,变量的值增加得非常快。我想使用生成的数据系列进行进一步分析,因此不希望模拟数据中出现 NaN。任何有助于改进此代码以避免 NaN 的帮助将不胜感激。

N <- 100
A1_sequence <- seq(from=0.5,to=1.5,length.out = N)
A1 <- array(data = A1_sequence, dim=c(2,2,100))
A2 <- matrix(c(0.2,1.1,-0.6,0.2), nrow=2, ncol=2)
A2
#>      [,1] [,2]
#> [1,]  0.2 -0.6
#> [2,]  1.1  0.2
A3 <- matrix(c(-0.8,1.2,-0.4,0.4), nrow=2, ncol=2)
A4 <- matrix(c(-0.01, 0.02,-0.03,0.05), nrow=2, ncol=2)
p <- 3 # Number of lags
N1 <- 1000+2*p # Number of observations in each simulation
k <- 2 #Number of endogenous variables
x <- matrix(0, k, N1)
myeps1 <- 0.25*rnorm(k)
for( i in (p+1):N1){
  for (j in 1:N){
  x[,i] <- A1[,,j]%*%x[,i-1] - A2%*%x[,i-2] - A3%*%x[,i-3] - A4%*%((x[,i-1])^3) + myeps1  
}
}

【问题讨论】:

    标签: r for-loop nan simulate


    【解决方案1】:

    如果要删除整行:

    A2_2 <- A2[!rowsums(!is.finite(A2)),]
    

    如果您只想删除这些点并将其替换为零:

    A2[!is.finite(m),] <- 0
    

    您也可以使用mice 包来估算值,基于列中的其他值。但它不适用于Inf 或无限值。

    library(mice)
    A2_2 <- mice(A2)
    complete(A2_2)
    

    【讨论】:

    • 我不想删除带有 NaN 的行,也不想用零替换 NaN。编写此循环的整个目标是为两个变量生成数据系列以供进一步分析。如果我删除 NaN 值或将它们替换为 0,我将失去许多观察结果。我在我的系列 x 上尝试了鼠标功能,但它没有像 2 个变量的 1006 次观察那样给出预期的结果
    • 鼠标输出中的哪些不是所需的输出?
    猜你喜欢
    • 1970-01-01
    • 2017-05-18
    • 2013-12-12
    • 1970-01-01
    • 2021-03-09
    • 1970-01-01
    • 2012-06-07
    • 2021-12-31
    • 2017-09-04
    相关资源
    最近更新 更多