Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mysql中的置信下限排序_Mysql_Confidence Interval - Fatal编程技术网

mysql中的置信下限排序

mysql中的置信下限排序,mysql,confidence-interval,Mysql,Confidence Interval,我在MySQL数据库中有如下数据: name |score ---------- alice|60 mary |55 ... 名称可以在列表中出现多次,但也可以仅出现一次。我想根据名称95%置信区间的下限对列表进行排序。我尝试了以下方法: SELECT name, count(*) as count_n, stddev_samp(score) as stdv, avg(score) as mean FROM `my.table` GROUP BY name ORDER BY avg(scor

我在MySQL数据库中有如下数据:

name |score
----------
alice|60
mary |55
...
名称可以在列表中出现多次,但也可以仅出现一次。我想根据名称95%置信区间的下限对列表进行排序。我尝试了以下方法:

SELECT name, count(*) as count_n, stddev_samp(score) as stdv, avg(score) as mean 
FROM `my.table`
GROUP BY name
ORDER BY avg(score)-1.96*std(score)/sqrt(count(*)) desc
这会产生一个正常的输出。理想情况下,我希望改变值1.96,因为这应该取决于该名称的count\n值。事实上,它应该是基于计数n-1自由度的t分布的值。有没有MySQL函数可以帮我做到这一点


我看到了以下内容,这些内容看起来不错,但并没有改变我想要的值。

我通过创建一个具有以下结构的单独表“tdistribution”来解决我的问题:

dof | tvalue
------------
1   | -12.706
2   | -4.3026
它包含自由度和相关的t值。然后可以将该表与原始样式的查询联接

SELECT table2.name, 
round(table2.mean-abs(tdistribution.tvalue*table2.stdv/sqrt(table2.nn)),2) AS LCB,
round(table2.mean+abs(tdistribution.tvalue*table2.stdv/sqrt(table2.nn)),2) AS UCB
FROM
    (SELECT table1.name, count(table1.name) AS nn, avg(table1.score) AS mean, stddev_samp(table1.score) AS stdv
    FROM
        (SELECT name, score FROM my.table) AS table1
    GROUP BY name
    ) AS table2
LEFT JOIN tdistribution
ON table2.nn-1=tdistribution.dof
WHERE nn>1
ORDER BY LCB DESC
它似乎起作用了