Имитация не общей коррелированной функции - PullRequest
0 голосов
/ 01 марта 2019

Мне нужно смоделировать случайную переменную, которая не имеет общего распределения и которая коррелирует с другой.Я сделал код для этой переменной.эта переменная имеет тип распределения enter image description here

Вот код:

#variable simulation
rm(list=ls())
v1=rep(NA,380)
n=length(v1)
muv1=55 
sv1=2
d=rbinom(n,1,0.90)
trend=seq(0.9, 1, length.out=n/6)       #dividing the in period in 6
ntrend=rep(trend,6)                                 
plot(ntrend,main="Non Stoc Trend")
v1=round(rnorm(n=380,muv1,sv1))*d*ntrend        
x11()
plot(v1,type="lines",main="first try Simulated Var Non Stocastic Trend ")   


#Add a Stochastic Trend 
#rm(list=ls())
#sf#stochastic factor
n=length(v1)
d=rbinom(n,1,0.92)
cicle=6             #dividing period in 6 parts
i=1
ntrend1=rep(0,n)
store_sf=NULL
store_trend=NULL
store_lt=NULL
trend1=NULL
            #START OF THE SIMULATION OF THE RANDOM VARIABLE
lt=1            #first lt for initializing the process
for(i in i:cicle)   {                       
    i=i

    repeat{                     #DO WHILE cos i need sf!=0 be positive
         sf=abs(rnorm(1,2,4))                   #non metto round() perché limita troppo il sf
        if(sf!=0) {break
        }
    }


    store_sf=c(store_sf,sf)     
    lt.out=round((n+sf)/(cicle*sf))

    #creating indexes for substituting in ntrend1
    La=which(ntrend1==0)    
    La=La[1]                        #find idx for the first 0 element
    Lb=La+lt.out                    #find idx of the last filled element
    Last=n 
    empty=Last-Lb           #last empty value-last filled value


    if(i==cicle | empty<0)      {       
                Lb=n
                }

    trend1=seq(0.9, 1, length.out=lt.out)
    lt=length(trend1)


    if(i==cicle & lt!=empty)        {rm(trend1)
                    trend1=seq(0.9, 1, length.out=empty)
                    lt=length(trend1)
                    store_lt=c(store_lt,lt)
                    }       


    else
    {
    store_trend=c(store_trend,trend1)
    lt=length(trend1)                   #trend length
    store_lt=c(store_lt,lt)
    }


    ntrend1[La:Lb]=replace(ntrend1,La:Lb,trend1)

    #Sys.sleep(4)
    print(ntrend1)
    print(i)
    print("lt")
    print(lt)
    print("empty")
    print(empty)
    flush.console()

end}



store_sf
store_lt                    

x11()
plot(ntrend1,main="Stochastic Trend") 
length(ntrend1)
v1.1=round(rnorm(n=n,muv1,sv1))*d*ntrend1
x11()
plot(v1.1,type="lines",main="Simulated Series 2 Stochastic Trend")

Мой вопрос: Как я могу моделировать случайную переменную, которая следует за этимконкретное распределение, учитывающее также корреляцию с другой или более случайными переменными?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...