2017-08-22 3 views
0

Je programme avec R.Programmation R (index des fonctions et des séries chronologiques)

et je dois faire une fonction et une boucle.

Valeur: t = 0,001, n = 4 et fonctions attachées ci-dessous.

Click the function image file link

Je veux calculer y (0,001), y (0,001) et y (0,001) à l'aide de la boucle.

De plus, j'ai créé un code R, mais il y a une erreur que je ne connais pas.

Comment peut-on pris pour que la boucle de calculer y (0,001), y (0,001) et y (0,001)?

Et le code ci-dessous est mon code R. Je vous remercie.

########################### 
# value     # 
###########################  
n<-4 
t<-0.001 
sigma<-numeric(4) 
y<-numeric(4) 
sigma[1]<-0.1 
y[1]<-0 

########################### 
# Brownian-Motion  # 
########################### 
nor1<-rnorm(n,0,1) 
nor1<-cumsum(nor1) 

########################### 
# function    # 
########################### 
delta<-function(t){ 
    0.01 
} 
alpha<-function(t){ 
    2*t*(1-t) 
} 
beta<-function(t){ 
    2*t*(1-t) 
} 
epsilon<-function(t){ 
    (2^(200*t))*(nor1)*(1/sqrt(log10(2))) 
} 

########################### 
# for-loop    # 
########################### 
sigma[i]<-delta(t)+(alpha(t)*y[i-1]*y[i-1])+(beta(t)*sigma[i-1]sigma[i-1]); 
y[i]<-sigma[i]*epsilon(t); 
print(y[i]) 
} 
+2

Salut, bienvenue à SO! que sont-ils censés faire? Vous devez spécifier la question un peu plus, pour nous, il est impossible de comprendre le message d'erreur. Avez-vous des fonctions et voulez-vous les exécuter toutes? –

+0

@JanSila Oh, désolé! Je joins ma fonction de lien et mon code R! –

+0

Il n'y a pas de mot clé 'for' dans votre code. Vous devrez peut-être ajouter 'for (i in 2: n) {' au début de 'for' loop. Il manque également '*' dans la formule 'sigma [i]'. J'espère que cela devrait corriger votre erreur. – Prem

Répondre

0

Il y a deux choses que je polissait (commentaire si vous voulez plus de détails), mais votre remarque faite par d'ailleurs @Prem, vous aviez tort spécifié la boucle en tant que telle (peut-être exécuter à travers un tutoriel sur les boucles dans R) et la multiplication sigma.

Mais la plupart du temps, la fonction epsilon renvoyait un vecteur - une valeur pour chaque observation - au lieu d'une seule valeur. Donc je l'ai fixé pour être dépendant de i comme c'est dans 2).

epsilon<-function(t,i){ 
    (2^(200*t))*(nor1[i])*(1/sqrt(log10(2))) 
} 

Ensuite, la boucle fonctionne pour en tant que tel:

for (i in 2:n){ 
sigma[i]<-delta(t)+(alpha(t)*y[i-1]*y[i-1])+(beta(t)*sigma[i-1]*sigma[i-1]); 
y[i]<-sigma[i]*epsilon(t,i); 
print(y[i]) 
} 
+1

Très merci! La partie difficile est résolue :) –