0

mysql 5.0データベースのデータに対して多変数(9変数)線形回帰を実行しようとしています(結果値フィールドには、1と0の2つの可能な値しかありません)。

私はいくつかの検索を行い、使用できることがわかりました:

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"

基本的な回帰変数の多くを取得するためですが、9つの変数のすべての組み合わせに対してこれを実行することを実際に入力したくありません。多変数で回帰を行う方法について私が見つけることができるすべてのソースには、行列演算が必要です。mysqlを使用して行列演算を実行できますか、または9変数線形回帰を実行する他の方法はありますか?

最初にmysqlからデータをエクスポートする必要がありますか?約80,000行なので、移動しても問題ありませんが、他に何を使用すればよいかわかりません。

ありがとう、ダン

4

2 に答える 2

1

MySQL から R にデータを移動することをお勧めします。1/0 応答データでは、ロジスティック回帰がより適切であり、実装している単純な二乗和ではありません。

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

これは、ロジスティックを解決する方法を示すのに良い仕事をしているようです

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

于 2010-02-24T05:31:34.780 に答える
1

このデータを MySQL に保存するのは良いことですが、データベースにアクセスできる言語からデータを処理することもできます。擬似コード:

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

しかし、結果をテーブルに保存しないのはなぜですか? データベースにより適しています。

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

X 列と Y 列の両方に個別のインデックスを配置します。

于 2010-01-18T01:39:53.813 に答える