Trovare una copula dai dati

carlogallo0702

Nuovo Utente
Registrato
18/4/13
Messaggi
278
Punti reazioni
7
Ciao a tutti, sto cercando di trovare una funzione copula C che mi spieghi la dipendenza tra due strumenti finanziari.
Chiaramente ho i dati e i rendimenti giornalieri dei due titoli, ma non riesco (o meglio, non sono sicuro di esserci riuscito), a "produrre" la copula che ne spieghi la dipendenza.

Vi allego qui il mio codice R della parte in questione:

# x è il vettore colonna dei rendimenti giornalieri dell'azione x
# y è il vettore colonna dei rendimenti giornalieri dell'azione y
data = matrix(c(x,y), ncol=2)
gumbel.cop = gumbelCopula()
fit = fitCopula(gumbel.cop, data, method = "itau")

Da qua poi ho creato una mvdc di tipo "Gumbel" con il parametro di "fit" e con le marginali normali dei due rendimenti.

E' corretto?
Se qualcuno se ne intende di R sarebbe bello confrontare il codice.

Grazie,
Carlo.
 
Ho visto che mi hai scritto sul profilo, dicendo che hai trovato i miei codici sulle copule.

Non devi normalizzare i dati in una scala da 0 a 1 prima di procedere con il fit della copula?
 
Ho visto che mi hai scritto sul profilo, dicendo che hai trovato i miei codici sulle copule.

Non devi normalizzare i dati in una scala da 0 a 1 prima di procedere con il fit della copula?

Ciao, si è vero mi sono dimenticato, l'ho corretto.
Oltre a questo dovrebbe essere tutto ok, se ti mandassi il codice via email potresti darci un'occhiata?

Grazie,
Carlo.
 
Era solo un test per vedere come fittava con la Gumbel...in realtà ho poi usato la copula gaussiana che andava meglio.

Se vuoi posso inviarti il codice R via email.

No, mi hai già detto quello che mi premeva trasmettertiOK!
(R è ostico per me..oramai mi sono abituato a stata)
 
Qualcuno saprebbe dirmi come mai alcuni angoli non sono retti?

Ecco il codice R:

Codice:
library(fCopulae)
contour(pfrechetCopula(u=grid2d(), output="list", type = "m"))

Grazie.
 

Allegati

  • copula.jpeg
    copula.jpeg
    20,6 KB · Visite: 160
Qualcuno saprebbe dirmi come mai alcuni angoli non sono retti?

Ecco il codice R:

Codice:
library(fCopulae)
contour(pfrechetCopula(u=grid2d(), output="list", type = "m"))

Grazie.
Senza avere i dati, suppongo che non vi sia completa indipendenza tra i due vettori.
 
Pilotta insieme al diagramma lo scatterplot e vediamo (sovrapposti insomma):)
 
Ecco il persp...non so dire nulla sui dati perchè a quanto pare è tutto all'interno della libreria. Inserendo su R il codice che ho scritto nell'altro messaggio otterrete questi grafici...

Ma, in realtà io stavo cercando quelche figura delle copule di Fréchet-Hoeffding (massimo, minimo e indipendenza), da mettere nella tesi...:D per questo sono incappato nel problema...
 

Allegati

  • persp.jpeg
    persp.jpeg
    31,6 KB · Visite: 140
Codice:
plot(rank(X[,1])/length(X[,1]),rank(X[,2])/length(X[,1]),xlab="Enel",ylab="Fiat")
dati.mod.x = rank(X[,1])/length(X[,1])
dati.mod.y = rank(X[,2])/length(X[,1])
Quindi i dati li normalizzavi già.

Mi sembra ok.
 
Quindi i dati li normalizzavi già.

Mi sembra ok.

Grazie mille. OK!

Solo una cosa: è corretto utilizzare il sample come ho fatto io per costruire le 10000 osservazioni? Perchè nella parte di dipendenza non sapevo come costruire il portafoglio, cioè:
Codice:
portafoglio = beta1*x_hat + beta2*y_hat
in quanto non penso sia corretto creare una copula per x_hat e un'altra per y_hat, giusto?

Grazie,
Carlo.


edit: se invece utilizzassi una cosa del genere per definire il portafoglio della copula?

Codice:
portafogliocop = beta1*sample[,1] + beta2*sample[,2]

VaR_1.copula = quantile(portafogliocop, probs = alpha1)
VaR_5.copula = quantile(portafogliocop, probs = alpha5)
 
Ultima modifica:
Grazie mille. OK!

Solo una cosa: è corretto utilizzare il sample come ho fatto io per costruire le 10000 osservazioni? Perchè nella parte di dipendenza non sapevo come costruire il portafoglio, cioè:
Codice:
portafoglio = beta1*x_hat + beta2*y_hat
in quanto non penso sia corretto creare una copula per x_hat e un'altra per y_hat, giusto?
edit: se invece utilizzassi una cosa del genere per definire il portafoglio della copula?

Codice:
portafogliocop = beta1*sample[,1] + beta2*sample[,2]

VaR_1.copula = quantile(portafogliocop, probs = alpha1)
VaR_5.copula = quantile(portafogliocop, probs = alpha5)
Non devi fare una media pesata per arrivare al VaR: la copula ti dà la probabilità che x avvenga insieme con y in corrispondenza dei quantili.

Va bene chiedere il quantile come hai fatto, cioé leggerlo dall'estrazione rMvdc(n = 10000, mvdc = mv.NE.tau), ma nel primo caso per cui mi chiedi, cioè quando giochi con le Normali prima di usare la copula, hai la convoluzione di due Normali e non mi pare tu possa fare quel giochino lì che fai con la media pesata.
 
Non devi fare una media pesata per arrivare al VaR: la copula ti dà la probabilità che x avvenga insieme con y in corrispondenza dei quantili.

Va bene chiedere il quantile come hai fatto, cioé leggerlo dall'estrazione rMvdc(n = 10000, mvdc = mv.NE.tau), ma nel primo caso per cui mi chiedi, cioè quando giochi con le Normali prima di usare la copula, hai la convoluzione di due Normali e non mi pare tu possa fare quel giochino lì che fai con la media pesata.

Perfetto, allora lascio il codice come l'avevo scritto OK!

Grazie mille ;)

edit: ho dimenticato di scrivere che i dati che il programma legge (datitesto.txt), sono semplicemente i rendimenti giornalieri, cioè (valore di oggi)/(valore di ieri). E' corretto giusto?

Ciao.
 
Ultima modifica:
χρυσός;44933536 ha scritto:
Ma stai usando i returns o sbaglio?
Che bisogno hai di normalizzare....

Ciao, sto utilizzando i rendimenti giornalieri, cioè:

R(i)=P(t)/P(t-1)
 
edit: ho dimenticato di scrivere che i dati che il programma legge (datitesto.txt), sono semplicemente i rendimenti giornalieri, cioè (valore di oggi)/(valore di ieri). E' corretto giusto?
(valore di oggi) / (valore di ieri) - 1
 
Indietro