Commons Math 3.0 Multiple Regression

jothemac

Mitglied
Hallo,

ich möchte mit commons matt 3.0 eine multiple lineare regression durchführen, dazu habe ich mir dieses beispiel angeschaut: The Commons Math User Guide - Statistics

Leider komme ich immer folgenden Fehler:
Java:
Exception in thread "AWT-EventQueue-0" org.apache.commons.math3.exception.DimensionMismatchException: 98 != 2
	at org.apache.commons.math3.stat.regression.AbstractMultipleLinearRegression.validateSampleData(AbstractMultipleLinearRegression.java:230)
	at org.apache.commons.math3.stat.regression.OLSMultipleLinearRegression.newSampleData(OLSMultipleLinearRegression.java:69)

Mein code sieht so aus:
Java:
String query = "SELECT "+yData+" FROM APP."+stock.stockName;
                    System.out.println("QUERY:"+query);

        PreparedStatement ps = DBHelperClass.conn.prepareStatement(query,
                ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
        ResultSet rs = DBHelperClass.getSingelton().getDataFromDB(ps);
        
        rs.last();
        int sizeY = rs.getRow();
        rs.beforeFirst();
        
        double[] yDataMatrix = new double[sizeY];
        for(int i=0;i<sizeY;i++)
        {
            rs.next();
            yDataMatrix[i] = Double.parseDouble(rs.getString(1));
        }
        
        double[][] xDataMatrix = new double[xData.size()][];
     
        ps = null;
        rs = null; 
        for(int i=0;i<xData.size();i++)
        {
            query = "SELECT "+xData.get(i)+" FROM APP."+stock.stockName;
            System.out.println("QUERY:"+query);
            ps =DBHelperClass.conn.prepareStatement(query,
                ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
            rs = DBHelperClass.getSingelton().getDataFromDB(ps);
            rs.last();
            int sizeX = rs.getRow();
            rs.beforeFirst();
            
            double[] xValue = new double[sizeX];
            for(int x=0;x<sizeX;x++)
            {
                rs.next();
                xValue[x] = Double.parseDouble(rs.getString(1));
                System.out.println("X:"+x);
            }
            xDataMatrix[i] = xValue;
        }
        
        System.out.println("Y DATA SIZE:"+yDataMatrix.length);
        System.out.println("X DATA SIZE:"+xDataMatrix.length);
        
        OLSMultipleLinearRegression regression = new OLSMultipleLinearRegression();
        regression.newSampleData(yDataMatrix, xDataMatrix);
        
    }

Wenn ich den beispiel code Ausführe funktioniert alles, der fehler liegt wohl wenn ich in der region wo ich die xValue zu der xDataMatrix hinzufüge, zumindest laut log aussage.
 

Marco13

Top Contributor
Wenn du die DB-Abfragen mal aus dem Code rausziehen würdest (so dass man es im Stil von
Java:
StuffFromDB stuff = readStuffFromDB();
doThisRegressionThing(stuff);
verwenden kann, könntest du auch ein KSKB posten, mit dem man den Fehler ggf. nachvollziehen könnte.
 

jothemac

Mitglied
Was heisst KSKB??

Also diese programm hier funktioniert:
Java:
OLSMultipleLinearRegression regression = new OLSMultipleLinearRegression();
double[] y = new double[]{11.0, 12.0, 13.0, 14.0, 15.0, 16.0};
double[][] x = new double[6][];
x[0] = new double[]{0, 0, 0, 0, 0};
x[1] = new double[]{2.0, 0, 0, 0, 0};
x[2] = new double[]{0, 3.0, 0, 0, 0};
x[3] = new double[]{0, 0, 4.0, 0, 0};
x[4] = new double[]{0, 0, 0, 5.0, 0};
x[5] = new double[]{0, 0, 0, 0, 6.0};          
regression.newSampleData(y, x);

Nur meine initialisierung des xDataMartrix arrays ist verkehrt, iwie funktioniert das nicht wenn ich das mit einer schleife machen.
 

pro2

Bekanntes Mitglied
Was heisst KSKB??

Untitled56bd.png


:bae:
 

jothemac

Mitglied
OK danke,

also hier habe ich mal ein kleines programm ohne DB Abfrage:
Java:
OLSMultipleLinearRegression regression = new OLSMultipleLinearRegression();
        double[] dataSet = new double[]{11.0,2.0,4.0,12.0,3.5,2.1,6.3,6.9,0.0};
        regression.newSampleData(dataSet, 3, 2);
        
        System.out.println("R Squared:"+regression.calculateTotalSumOfSquares());

Funktioniert alles wunderbar. Ich mache es etwas anders als vorher, so muss ich keine matrix erzeugen. Ich schreibe einfach alle daten in ein Array wo bei immer 3 einträge ein paar ergeben.
Z.b 11.0,2.0,40 = y ,x1, x2 und so weiter.
Wenn ich das nun übertrage auf mein Programm:
Java:
String query = "SELECT "+yData;
        for(int i=0;i<(xData.size());i++)
        {   
            query = query+","+xData.get(i);
        }
        
        query = query + " FROM APP."+stock.stockName;
        System.out.println("QUERY:"+query);

        PreparedStatement ps = DBHelperClass.conn.prepareStatement(query,
                ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
        ResultSet rsData = DBHelperClass.getSingelton().getDataFromDB(ps);
        
        rsData.last();
        int numOfVars = 1+(xData.size());
        int dataSize = (rsData.getRow()*numOfVars);
        rsData.beforeFirst();
        
        double[] dataSet = new double[dataSize] ;
        

        
        
        int i = 0;
        while(rsData.next())
        {
            for(int s=1;s<(numOfVars+1);s++)
            {
                dataSet[i] = Double.parseDouble(rsData.getString(s));
                i++;
            } 
        }
       
       OLSMultipleLinearRegression regression = new OLSMultipleLinearRegression();
       int nvars = numOfVars-1;
       regression.newSampleData(dataSet, numOfVars, nvars);
       System.out.println("REGRESSION CALCS:"+regression.calculateAdjustedRSquared());
Java:
Exception in thread "AWT-EventQueue-0" org.apache.commons.math3.exception.DimensionMismatchException: 294 != 9
Dazu muss ich sagen, dass alle 3 abfragen je 98 einträge zurückliefern, also gibt es insgesamt 294 Einträge.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S OOP Apache Commons Math - Verwendung von Genetics - Wie werden Daten in Chromosomen gespeichert? Allgemeine Java-Themen 4
F Fehlermeldung: java.lang.NoClassDefFoundError: org/apache/commons/net/ntp/NTPUDPClient Allgemeine Java-Themen 6
E HILFE !! Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/io/FileUtils Allgemeine Java-Themen 4
T xls-Datei per Apache Commons CsvParser einlesen UTF-8 Zeichen russische Zeichen Allgemeine Java-Themen 2
F Frage bezueglich Commons Configuration Allgemeine Java-Themen 5
J Umlaute bei Commons-Fileupload Allgemeine Java-Themen 3
Landei Erfahrungen mit JavaConfig oder Apache Commons Config? Allgemeine Java-Themen 3
S Bzip2 apache commons-compress Allgemeine Java-Themen 3
M Verbieten Applets die Nutzung von Commons Logging? Allgemeine Java-Themen 7
DEvent log4j, commons logging, log4j.properties and co Allgemeine Java-Themen 12
E Apache Commons - PropertyConfiguration - Autosave Allgemeine Java-Themen 2
alexpetri DirectoryWalker apache.commons Allgemeine Java-Themen 3
S Apache Commons Net geht nicht Allgemeine Java-Themen 5
J Log4j / commons-logging Allgemeine Java-Themen 3
C Jakarta commons package downloaden und installieren Allgemeine Java-Themen 7
S Potenzieren mit rationalen Potenzen ohne Math.pow Allgemeine Java-Themen 16
Arif Math.cos liefert komische Werte Allgemeine Java-Themen 8
T Math.random Allgemeine Java-Themen 9
Javafan01 Deklarieren einer Math.random() Zufallszahl Allgemeine Java-Themen 16
O Best Practice Laufzeitvergleich Math.sqrt() aus Java und sqrt() aus C++ Allgemeine Java-Themen 1
J Methoden Math.abs Allgemeine Java-Themen 3
so_ein_Komischer Erste Schritte java Math Klasse finden? Allgemeine Java-Themen 2
U Math.Random anders verteilen Allgemeine Java-Themen 4
V Math.log auf meine Art zu ungenau Allgemeine Java-Themen 15
H Math.acos(10) => NaN Allgemeine Java-Themen 11
E Warum kann Math nicht instanziert werden? Allgemeine Java-Themen 17
h0b0 WTF? - Problem mit Math.pow() Allgemeine Java-Themen 6
A Wird Math.sin bzw. sinus auf Maschinencode abgebildet Allgemeine Java-Themen 6
isowiz Unerklärliches Problem mit Math.pow :( Allgemeine Java-Themen 4
M Math-String-Formel berechnen lassen Allgemeine Java-Themen 4
C Math.random() vs Random Allgemeine Java-Themen 5
S Random() vs Math.random Allgemeine Java-Themen 4
H Math.random() Allgemeine Java-Themen 3
D java.lang.Math fehlerhaft? Allgemeine Java-Themen 18
B JAX - RS.... Multiple parameter application/x-www-form-urlencoded.... Allgemeine Java-Themen 6
1 Multiple Choice Knapsack- Problem Allgemeine Java-Themen 2
H2SO3- multiple Hashmap Allgemeine Java-Themen 5
D Multiple Datenstrukturen erstellen Allgemeine Java-Themen 4
K multiple inheritance - irgendwann? Allgemeine Java-Themen 80

Ähnliche Java Themen

Neue Themen


Oben