【问题标题】:Mysql multivariable linear regressionMysql多变量线性回归
【发布时间】:2011-01-06 04:12:37
【问题描述】:

我正在尝试对我的 mysql 5.0 数据库中的数据进行多变量(9 个变量)线性回归(结果值字段只有 2 个可能的值,1 和 0)。

我做了一些搜索,发现我可以使用:

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 行,所以可以移动它,只是不确定我还应该使用什么。

谢谢, 丹

【问题讨论】:

    标签: mysql matrix regression linear-regression


    【解决方案1】:

    我建议将数据从 MySQL 移出并移入 R。对于 1/0 响应数据,逻辑回归更合适,它不是您正在实施的简单平方和。

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

    这似乎很好地展示了如何解决逻辑问题

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

    【讨论】:

      【解决方案2】:

      最好将这些数据存储在 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 列上放置单独的索引。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-25
        • 2017-09-19
        • 2018-08-05
        • 2019-01-25
        • 2016-02-03
        • 1970-01-01
        • 2016-11-13
        相关资源
        最近更新 更多