楼主: jcww918
938 1

[问答] 重覆一段R code 若干次 [推广有奖]

  • 2关注
  • 0粉丝

已卖:433份资源

本科生

5%

还不是VIP/贵宾

-

威望
0
论坛币
1910 个
通用积分
110.8057
学术水平
5 点
热心指数
5 点
信用等级
0 点
经验
19725 点
帖子
69
精华
0
在线时间
4 小时
注册时间
2021-3-4
最后登录
2024-7-1

楼主
jcww918 发表于 2021-4-24 23:41:12 来自手机 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
如题,如果我想重覆一段R code若干次(如100000次),要如何把我写的code放进同一个loop里面呢,让结果能够自动化的存进一个表内?

下面是code的内容:

## Fixed quantities
# One-step transition probability matrix P
#_______________________________________________________________________________
P=matrix(c(0.8,0.1,0.1,
          0.3,0.65,0.05,
          0.3,0.05,0.65), nrow=3, ncol=3, byrow=T)
P
# Boundaries
#_______________________________________________________________________________
B1_state1=qgamma(0.3, shape = 1, rate = 0.1, lower.tail = TRUE)
B2_state1=qgamma(0.7, shape = 1, rate = 0.1, lower.tail = TRUE)
B1_state2=qgamma(0.3, shape = 0.5, rate = 0.1, lower.tail = TRUE)
B2_state2=qgamma(0.7, shape = 0.5, rate = 0.1, lower.tail = TRUE)
B1_state3=qgamma(0.3, shape = 0.9, rate = 0.06, lower.tail = TRUE)
B2_state3=qgamma(0.7, shape = 0.9, rate = 0.06, lower.tail = TRUE)
# Premium loading c
#_______________________________________________________________________________
C=c(120,140,160,180,200)/100
## Vary quantities
# Aggregate claims distribution
#_______________________________________________________________________________
aggregate_claim_in_state_1=rgamma(50, shape = 1, rate = 0.1) #state 1
aggregate_claim_in_state_2=rgamma(50, shape = 0.5, rate = 0.1) #state 2
aggregate_claim_in_state_3=rgamma(50, shape = 0.9, rate = 0.06) #state3
# Economic states
#_______________________________________________________________________________
simMarkov = function(P, lens=50){
n=nrow(P)
result = numeric(lens)
result[1]=1
for (i in 2:lens){
   result[i]=sample(1:n, 1, prob=P[result[i-1],])
}
result
}
Econ_state = simMarkov(P)
# Lower bound & upper bound
#_______________________________________________________________________________
lower.bound=vector(length = 50)
for (i in 1:50) {
if(Econ_state[i]==1){
   lower.bound[i]=B1_state1}
else if(Econ_state[i]==2) {
   lower.bound[i]=B1_state2}
else if(Econ_state[i]==3) {
   lower.bound[i]=B1_state3}
}

upper.bound=vector(length = 50)
for (i in 1:50) {
if(Econ_state[i]==1){
   upper.bound[i]=B2_state1}
else if(Econ_state[i]==2) {
   upper.bound[i]=B2_state2}
else if(Econ_state[i]==3) {
   upper.bound[i]=B2_state3}
}
# Aggregate claims
#_______________________________________________________________________________
s=vector(length = 50)
for (k in 1:50) {
if(Econ_state[k] == 1){
   s[k]=aggregate_claim_in_state_1[k]
} else if(Econ_state[k] == 2){
   s[k]=aggregate_claim_in_state_2[k]
} else if(Econ_state[k] == 3){
   s[k]=aggregate_claim_in_state_3[k]
}
}
# Expected Aggregated claims
#_______________________________________________________________________________
mean_s=vector(length = 50)
for (i in 1:50) {
expected_aggregate_claim=
   c(aggregate_claim_in_state_1[i],aggregate_claim_in_state_2[i],
     aggregate_claim_in_state_3[i])
mean_s[i]=mean(expected_aggregate_claim)
}
# Premium loading
#_______________________________________________________________________________
c1=vector(length = 51)
for (i in 2:51) {
c1[1]=C[1]
if(s[i-1]<lower.bound[i-1]){
   c1[i]=c1[i-1]-0.2
}else if(lower.bound[i-1]<=s[i-1] && s[i-1]<upper.bound[i-1]){
   c1[i]=c1[i-1]
}else if(s[i-1]>=upper.bound[i-1] && c1[i-1]>=2){
   c1[i]=C[5]
}else if (s[i-1]<lower.bound[i-1] && c1[i-1]<=1.2) {
   c1[i]=C[1]
}else if (s[i-1]>=upper.bound[i-1]) {
   c1[i]=c1[i-1]+0.2
}
}
# Surplus level
#_______________________________________________________________________________
U=matrix(,nrow = 50, ncol = 201)
initial.u=0:200
for (n in 2:50) {
for (u in 1:201) {
   u0=initial.u[u]
   U[1,u]=u0+c1[2]*mean_s[1]-s[1]
   U[n,u]=U[n-1,u]+c1[n+1]*mean_s[n]-s[n]
}
}  
# Ruin Probability
#_______________________________________________________________________________
Ruin1=vector(length = 201)
for (j in 1:201) {
   Ruin1[j]=sum(U[,j]<0)/50
}
Ruin1
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:code COD ODE distribution Probability

沙发
dcs2213 发表于 2021-4-25 18:23:03
没仔细看你的程序,你可以把它打包成一个函数,然后用map_df来完成:
  1. # 自定义的函数
  2. test_function <- function(x){
  3.   a = runif(1)
  4.   b = runif(1)
  5.   return(list(Col1 = a, Col2 = b))
  6. }

  7. # 循环次数
  8. times <- 1:5

  9. # 循环
  10. data %>%
  11.   map_df(test_function)
复制代码
已有 1 人评分论坛币 收起 理由
cheetahfly + 10 热心帮助其他会员

总评分: 论坛币 + 10   查看全部评分

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-3 21:48