Domanda

Sono sicuro che sia un errore evidente nella mia logica, ma non riesco a capire cosa sto facendo di sbagliato. Semplicemente ho un elenco di array di codici di sicurezza, voglio calcolare la correlazione tra ogni combinazione di codici di sicurezza. Il mio codice è il seguente:

private void crossCorr(ArrayList<String> codes, HashMap<String, Stock> stockMap){

    // iterate through the codes list and get all the cross correlations:

    Iterator<String> itr1 = codes.iterator();
    while(itr1.hasNext()){
        String code1 = itr1.next();
System.out.println("  -----  " +code1);
        Iterator<String> itr2 = codes.iterator();
        ArrayList<Double> corrs = new ArrayList<Double>();
        HashMap<String, Double> codeCorr = new HashMap<String, Double>();
        String code2="";
        double corr=-2;
        while(itr2.hasNext()){
            code2 = itr2.next();
            Maths calcs = new Maths();      
            corr = calcs.getCorrelation(stockMap.get(code1).getRorHistory(), stockMap.get(code2).getRorHistory());
            corrs.add(corr);    // we order this list and then use this ordered list
                                // to find the codes for the stocks with the highest
                                // correlation for any given stock
            codeCorr.put(code2, corr);
            System.out.println(code1+" - "+code2+" - Correlation is "+corr);
        }
        orderCorrs(6, codeCorr, corrs, code1);
    }

}

L'output che ottengo è -

----- GOOG
GOOG - GOOG - La correlazione è 1.0000000000000002
GOOG - YHOO - La correlazione è 0.6986623807707519
GOOG - MSFT - La correlazione è 0,7275411317567286
GOOG - CSCO - La correlazione è 0.8122979333663799
GOOG - AAPL - La correlazione è 0,8217785260604609
GOOG - ADBE - La correlazione è 0.6102679356472099
GOOG - DISH - La correlazione è 0.644852624453125
GOOG - NSOL - La correlazione è 0.11600387177879072
GOOG - SBUX - La correlazione è 0.6694306410719489
GOOG - PSFT - La correlazione è -0.09921822861087544
GOOG - XOM - La correlazione è 0.6728272039489009
GOOG - WMT - La correlazione è 0.4004364090315347
GOOG - IBM - La correlazione è 0.7559988282095168
GOOG - JPM - La correlazione è 0.7085525367336528
GOOG - DNA - La correlazione è 0.13628949379947575
GOOG - HPQ - La correlazione è 0.7819350018750656
GOOG - KO - La correlazione è 0,5700932682157461
GOOG - VZ - La correlazione è 0.737881573641585
GOOG - INTC - La correlazione è 0.7654127298771953
GOOG - SPY - La correlazione è 0.8042488406758052
GOOG - PEP - La correlazione è 0.6297924741882344
GOOG - WFC - La correlazione è 0,5064491351161948
GOOG - ABT - La correlazione è 0,238752389446595
GOOG - QCOM - La correlazione è 0.726356709262025
GOOG - COP - La correlazione è 0,570604981251932
GOOG - MCD - La correlazione è 0,5434872575410538

Ma non capisco mai

YHOO - GOOG - La correlazione è .... ecc. ecc.

Sono sicuro che si tratta di un errore semplice e per qualche motivo non lo rilevo.

So che sto facendo i calcoli di correlazione due volte, lo risolverò una volta che questa parte funzionerà come previsto.

Per favore fatemi sapere se devo fornire maggiori informazioni.

È stato utile?

Soluzione

Un'applicazione di prova rapida che ha rimosso riferimenti a codice che non conosciamo funziona bene per me.

È possibile che qualcosa stia generando un'eccezione non selezionata che non stai gestendo? Se potessi pubblicare un programma breve ma completo che dimostra il problema, ciò aiuterebbe immensamente. Prendi una copia del tuo progetto completo e rimuovi i bit (ad es. Dati codificati e restituisci valori) fino a quando non puoi portare via altro senza che il problema scompaia. A quel punto potresti aver trovato il problema per te, ovviamente.

A proposito, se stai usando Java 1.5 o versioni successive, è più semplice usare un ciclo esteso per che usare esplicitamente un iteratore. Dovresti fare:

for (String code1 : codes) {
    // ...
    for (String code2 : codes) {
        // ...
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top