在矩阵中模拟和应用函数,R

时间:2016-05-09 23:59:47

标签: r matrix simulation

关于下面显示的代码,我有几个问题,这个函数名为" Func1"结果将返回一个矩阵,矩阵的大小将是50行和15列,我称之为" M"和" M2"只是它的转置。 W0是代码的下一部分的初始值,如果我运行名为" Rowresult"的函数,那么它也给我一个50 * 15的矩阵。

我的第一个问题是:如果我想运行" Rowresult"函数用于不同的W0值,例如W0 = 10,20,30。我希望有3个矩阵,大小为50 * 15,不同的W0值作为结果,我怎么能实现呢?

我的第二个问题是:如果你在R中尝试了我的代码,你会看到一个名为" wealth_result 2"结果是。一旦我得到这个大矩阵,我想将它(50 * 15矩阵)分成三个相同大小的矩阵,每个矩阵的大小为50 * 5(因此它们共享相同的行但不同的列,第一个矩阵采用前5列,第二列需要6-10列,第三列需要11-15列),然后我想弄清楚每个50 * 5矩阵中有多少个正行(所有数字为正的行)?我怎么能做到这一点?

N=15
func1<-function(N){
  alpha1 = 8.439e-02
  beta1 = 8.352e-01
  mu = 7.483e-03 
  omega = 1.343e-04
  X_0 = -3.092031e-02
  sigma_0 = 0.03573968
  eps = rt (N,7.433e+00)
  # loops
  Xn= numeric (N)
  sigma= numeric (N)
  sigma[1] = sigma_0
  Xn[1] = X_0
  for (t in 2:N){
    sigma[t] = sqrt (omega + alpha1 * (Xn[t-1])^2 + beta1* (sigma[t-1])^2)
    Xn[t] = sigma[t] * eps[t]
  }
  Y = mu + Xn
}

# return matrix 
M<-replicate(50,func1(N))

# returns matrix
M2<-t(M)
View(M2)

# wealth with initial wealth 10

W0=10
# 10,20,30,40
r= c(0.101309031, -0.035665516, -0.037377270, -0.005928941,  0.036612849,
0.062404039,  0.124240950, -0.034843633,  0.004770613,  0.005018101,
0.097685945, -0.090660099,  0.004863099,  0.029215984,  0.020835366)


Rowresult<- function(r){
  const = exp(cumsum(r))
  exp.cum = cumsum(1/const)
  wealth=const*(W0 - exp.cum)
  wealth 
  }

# wealth matrix
wealth_result <-apply(M2,1,Rowresult)
wealth_result2 <-t(wealth_result )
View(wealth_result2)

1 个答案:

答案 0 :(得分:0)

这提供了(所有)&#34;正行&#34;

所需的等级
> sapply(1:3, function(m) sum( rowSums( wealth_result2[ , (1:5)+(m-1)*5 ] >0 )) )
[1] 250 230   2