Pregunta

Estoy tratando de hacer un multivarible (9 variables) de regresión lineal en los datos en mi base de datos MySQL 5.0 (el campo valor de resultado sólo tiene 2 valores posibles, 1 y 0).

He hecho un poco de búsqueda y encontré que puedo usar:

mysql> SELECT
    -> @n := COUNT(score) AS N,
    -> @meanX := AVG(age) AS "X mean",
    -> @sumX := SUM(age) AS "X sum",
    -> @sumXX := SUM(age*age) "X sum of squares",
    -> @meanY := AVG(score) AS "Y mean",
    -> @sumY := SUM(score) AS "Y sum",
    -> @sumYY := SUM(score*score) "Y sum of square",
    -> @sumXY := SUM(age*score) AS "X*Y sum"

Para llegar a muchas de las variables básicas de regresión, pero realmente no quiero escribir fuera haciendo esto para cada combinación de las 9 variables. Todas las fuentes que puedo encontrar información sobre cómo hacer la regresión de variables múltiples requiere operaciones Matrix . ¿Puedo hacer operaciones con matrices con MySQL, o hay otras maneras de hacer una regresión lineal variable de 9?

¿Debo exportar los datos de MySQL en primer lugar? Sus ~ 80.000 filas, por lo que estaría bien para moverlo, simplemente no está seguro qué más debo utilizar.

Gracias, Dan

¿Fue útil?

Solución

Es bueno para almacenar estos datos en MySQL, pero se podía procesar los datos de un lenguaje que tiene acceso a la base de datos. Pseudocódigo:

variables = [ 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I' ];

for X in $variables do
    for Y in $variables do
        query = 'SELECT
            @'+$X+$Y+' := COUNT(score) AS '+$X+$Y+',
            @mean'+$X+' := AVG(age) AS "X mean",
            @sum'+$X+' := SUM(age) AS "X sum",
            @sum'+$X+$X+' := SUM(age*age) "X sum of squares",
            @mean'+$Y+' := AVG(score) AS "Y mean",
            @sum'+$Y+' := SUM(score) AS "Y sum",
            @sum'+$Y+$Y+' := SUM(score*score) "Y sum of square",
            @sum'+$X+$Y+' := SUM(age*score) AS "X*Y sum"';
        db_execute(query);
    done
done

¡Por qué no almacenar los resultados en una tabla? Más apropiado para una base de datos.

for X in $variables do
    for Y in $variables do
        query = 'INSERT INTO regression SELECT FROM measurements
            "'+$X+'" AS X
            "'+$Y+'" AS Y
            score AS valX
            age AS valY
            COUNT(score) AS N,
            AVG(age) AS meanX,
            SUM(age) AS sumX,
            SUM(age*age) squareX,
            AVG(score) AS meanY,
            SUM(score) AS sumY,
            SUM(score*score) squareY,
            SUM(age*score) AS sumXY';
        db_execute(query);
    done
done

put índice separado en ambos X y las columnas y.

Otros consejos

Yo recomendaría mover los datos fuera de MySQL y en R. Con los datos de respuesta 1/0 una regresión logística es mucho más apropiado y no es la simple suma de los cuadrados que están llevando a cabo.

http://en.wikipedia.org/wiki/Logistic_regression

Esto parece hacer un buen trabajo de mostrar cómo resolver la logística

http://www.omidrouhani.com/research/logisticregression /html/logisticregression.htm#_Toc147483467

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top