[英]Simulation and apply functions in matrix, R
我有幾個關於下面顯示的代碼段的問題,名為“Func1”的函數將返回一個矩陣作為結果,矩陣的大小將為 50 行和 15 列,我將其稱為“M”,並且“M2”只是它的轉置。 W0 是代碼下一部分的初始值,如果我運行名為“Rowresult”的函數,那么它也會給我一個 50*15 的矩陣。
我的第一個問題是:如果我想為不同的 W0 值運行“Rowresult”函數,例如 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)
這提供了所需的(所有)“正行”數:
> sapply(1:3, function(m) sum( rowSums( wealth_result2[ , (1:5)+(m-1)*5 ] >0 )) )
[1] 250 230 2
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.