C# 单因素方差分析(One Way ANOVA)

  • 什么是单因素方差分析
  • 示例
  • 计算步骤
  • C#实现代码

什么是单因素方差分析

单因素方差分析是指对单因素试验结果进行分析,检验因素对试验结果有无显著性影响的方法。
也就是说方差检测是在随机变量Y的不同水平下,检验某个变量X是否有显著性变化。

单因素方差分析是两个样本平均数比较的引伸,它是用来检验多个平均数之间的差异,从而确定因素对试验结果有无显著性影响的一种统计方法。

示例

例如,将抗生素注入人体会产生抗生素与血浆蛋白质结合的现象,以致减少了药效。下表列出了5种常用的抗生素注入到牛的体内时,抗生素与血浆蛋白质结合的百分比。现需要在显著性水平α = 0.05下检验这些百分比的均值有无显著的差异。设各总体服从正态分布,且方差相同。

在这里,试验的指标是抗生素与血浆蛋白质结合的百分比,抗生素为因素,不同的5种抗生素就是这个因素的五个不同的水平。假定除抗生素这一因素外,其余的一切条件都相同。这就是单因素试验。试验的目的是要考察这些抗生素与血浆蛋白质结合的百分比的均值有无显著的差异。即考察抗生素这一因素对这些百分比有无显著影响。这就是一个典型的单因素试验的方差分析问题。

计算步骤

一.计算平均值


二.计算离差平方和

三.计算平均平方

四.方差分析表

F=组间方差/组内方差=MSB/MSE~F(c-1, nT-1)

如果c个总体均值不相等,则组间方差(MSB)会大于组内方差(MSE)。当F值大到某一临界值时,就可以拒绝原假设。临界值的大小由给定的α和自由度决定,一般取α=0.05或者α=0.01。所以,当给定显著性水平为α时,F的拒绝域为F>Fα(c-1,nT-c)。当组间方差和组内方差一样(我们认为这两个组别差别很小),那么F值为1,组间方差远大于组内方差时这个F值也就会比较大。

每一个F值都会对应一个p值,F值越大,p值越小,就越不可能接受原假设,组间差距也就越大。所以,p值越小,拒绝原假设的概率越低,这个特征就越该被保留下来。

C#实现代码

代码实现参考微软官网的讲解,但是在求P值的时候没有提供相应的原函数,在下方列了出来,供参考。
https://docs.microsoft.com/zh-cn/archive/msdn-magazine/2016/october/test-run-anova-with-csharp.

 /*
*  P{ F > F(m, n) } = p
*返回p值
*/double sum = 0;//总体数据和double SSA=0;//组间离差平方和double SSE=0;//组内离差平方和double df1 = 0;//组间自由度double df2 = 0;//组内自由度double f;   //F值double p;   //P值string F, P;    //用来接收四舍五入后的P、F值List<string> Fs = new List<string>();List<string> Ps = new List<string>(); int n,m;//二维数组的行列数private double anova(double[,]arr) {     double gmeans;//总均值double SST;double MSA;double MSE;n = arr.GetLength(0);   //行数m = arr.GetLength(1);   //列数double[] total = new double[m];//记录每一组的和double[] means = new double[m];//记录每一组的平均值df1 = n - 1;//组间自由度 = n-1df2 = n * m - n;//n * (m - 1);组内自由度 = n*(m-1),n为组数,m为每组个数,或者(总数减去组数)sum = 0;SSE = 0;SSA = 0;for (int i = 0; i < n; i++){for (int j = 0; j < m; j++){sum = sum + arr[i,j];//求总体和}}for (int i = 0; i < n; i++){for (int j = 0; j < m; j++){total[i] += arr[i,j];   //求出每组和means[i] = total[i] / m;    //求每组均值}}gmeans = sum / arr.Length;for (int i = 0; i < n; i++){for (int j = 0; j < m; j++){SSE = SSE + Math.Pow((arr[i, j] - means[i]), 2);//组内方差}SSA = SSA + m * Math.Pow((means[i] - gmeans), 2);//组间方差}SST = SSA + SSE;MSA = SSA / df1;//组间均方差(自由度df1 = n-1,n为组数)MSE = SSE / df2;//组内均方差(自由度df2 = n*(m-1) 或者 总体数-组数)f = MSA / MSE;F = f.ToString("f6");   //四舍五入保留6位小数p = FDist(f,df1,df2);P = p.ToString("f6");   //四舍五入保留6位小数                return p;}/*  下面为用到的一些原函数方法 */private double FDist(double F, double m, double n){double xx;double p = 0;if (m <= 0 || n <= 0){p = -1;}else if (F > 0){xx = F / (F + n / m);p = betainc(xx, m / 2, n / 2);}return (1 - p);}double betainc(double x, double a, double b)/* 不完全Beta函数 */{double y, BT, AAA;if (x == 0 || x == 1)BT = 0;else{AAA = gamma(a + b) - gamma(a) - gamma(b);BT = Math.Exp(AAA + a * Math.Log(x) + b * Math.Log(1 - x));}if (x < (a + 1) / (a + b + 2))y = BT * beta_cf(a, b, x) / a;elsey = 1 - BT * beta_cf(b, a, 1 - x) / b;return y;}double beta_cf(double a, double b, double x){int count, count_max = 100;double eps = 0.0000001;double AM = 1;double BM = 1;double AZ = 1;double QAB;double QAP;double QAM;double BZ, EM, TEM, D, AP, BP, AAP, BPP, AOLD;QAB = a + b;QAP = a + 1;QAM = a - 1;BZ = 1 - QAB * x / QAP;for (count = 1; count <= count_max; count++){EM = count;TEM = EM + EM;D = EM * (b - count) * x / ((QAM + TEM) * (a + TEM));AP = AZ + D * AM;BP = BZ + D * BM;D = -(a + EM) * (QAB + EM) * x / ((a + TEM) * (QAP + TEM));AAP = AP + D * AZ;BPP = BP + D * BZ;AOLD = AZ;AM = AP / BPP;BM = BP / BPP;AZ = AAP / BPP;BZ = 1;if (Math.Abs(AZ - AOLD) < eps * Math.Abs(AZ)) return (AZ);}return AZ;}double gamma(double xx){double[] coef_const = new double[7];double step = 2.50662827465;double HALF = 0.5;double ONE = 1;double FPF = 5.5;double SER, temp, x, y;int j;coef_const[1] = 76.18009173;coef_const[2] = -86.50532033;coef_const[3] = 24.01409822;coef_const[4] = -1.231739516;coef_const[5] = 0.00120858003;coef_const[6] = -0.00000536382;x = xx - ONE;temp = x + FPF;temp = (x + HALF) * Math.Log(temp) - temp;SER = ONE;for (j = 1; j <= 6; j++){x = x + ONE;SER = SER + coef_const[j] / x;}y = temp + Math.Log(step * SER);return y;}

【C# 单因素方差分析(One Way ANOVA)】相关推荐

  1. R语言单因素方差分析(One-Way ANOVA)实战:探索性数据分析(EDA)、单因素方差分析模型结果解读(检查模型假设)、分析不同分组的差异TukeyHSD、单因素方差分析的结果总结

    R语言单因素方差分析(One-Way ANOVA)实战:探索性数据分析(EDA).单因素方差分析模型结果解读(检查模型假设).分析不同分组的差异TukeyHSD.单因素方差分析的结果总结 目录 R语言 ...

  2. R语言aov函数进行单因素方差分析(One-way ANOVA)、使用Q-Q图来评估方差分析因变量的正态性、Bartlett验证方差的相等性(齐次性)、car包中的outlierTest函数异常检验

    R语言使用aov函数进行单因素方差分析(One-way ANOVA).使用Q-Q图来评估方差分析因变量的正态性假设.Bartlett检验验证方差的相等性(齐次性).car包中的outlierTest函 ...

  3. sklearn学习-SVM例程总结2(特征选择——单因素方差分析(方差分析anova ))

    SVM with univariate feature selection(单因素方差分析) 本文隶属于机器学习的特征选择部分,是训练前对数据的预处理部分.对于机器学习而言,特征选择是影响结果的极其重 ...

  4. R语言基础 | 方差分析(1):单因素方差分析

    专注系列化.高质量的R语言教程 推文索引 | 联系小编 | 付费合集 方差分析(Analysis of Variance, ANOVA)于1918年由Ronald Fisher(也是F分布的提出者)提 ...

  5. R语言Welch方差分析(Welch’s ANOVA)实战:Welch方差分析是典型的单因素方差分析的一种替代方法,当方差相等的假设被违反时我们无法使用单因素方差分析,这时候Welch’s出来救场了

    R语言Welch方差分析(Welch's ANOVA)实战:Welch方差分析是典型的单因素方差分析的一种替代方法,当方差相等的假设被违反时我们无法使用单因素方差分析,这时候Welch's出来救场了 ...

  6. matlab函数anova,MATLAB进行单因素方差分析-ANOVA

    <MATLAB进行单因素方差分析-ANOVA>由会员分享,可在线阅读,更多相关<MATLAB进行单因素方差分析-ANOVA(5页珍藏版)>请在人人文库网上搜索. 1.MATLA ...

  7. matlab函数anova,MATLAB进行单因素方差分析——ANOVA

    MATLAB进行单因素方差分析-ANOVA 方差分析的目的是确定因素的不同处理(方法.变量)下,响应变量(类别.结果)的均值是否有显著性差异. 方差分析用于两个或者两个以上因素样本均值的检验问题,如果 ...

  8. SPSS——方差分析(Analysis of Variance, ANOVA)——单因素方差分析

    方差分析基本原理 样本要求 独立性 各样本必须是相互独立的随机样本 样本含量尽可能相等或相差不大 可比性 样本均值不相同,可比较 正态性 样本的总体符合正态分布,偏态分布不适用于方差分析. 对偏态分布 ...

  9. 单因素方差分析(ANOVA)及其Python库

    文章目录 模型描述 利用`python`求解 单因素方差分析(one-way analysis of variance, ANOVA)用于确定3个及其以上的数据组之间的均值是否具有统计差异,此外,单因 ...

最新文章

  1. LeetCode Group Anagrams
  2. SCOM2016 安装OS或应用管理包
  3. (视频) 基于HTML5的服务器远程访问工具
  4. 配置Windows 2008 R2 防火墙允许远程访问SQL Server 2008 R2 更改端口 连接字符串 IP+逗号+端口号...
  5. c语言程序兔子反之问题,C语言解决兔子产子问题代码及解析
  6. 北京IT白领的真实生活!
  7. “腾讯持股比例提升”系误读!美团对外定增后腾讯持股比例降低
  8. msvcp140.dll缺失
  9. 图论复习(各类习题)
  10. C语言:从键盘输入一个正整数,将该数倒序输出。
  11. 计算机网络生活应用,浅谈计算机网络在生活中的应用
  12. 第二期:关于十大数据相关问答汇总,关注持续更新中哦~
  13. 通用ESP8266连接阿里云物联网平台
  14. 005-2-Python文件操作
  15. 申请https证书相关说明
  16. 我能使用这台计算机吗英语,使用电脑的英语怎么说
  17. 2017年Gartner的数据防泄漏(DLP)魔力象限(Magic Quadrant)
  18. 奥赛一本通2069:【例2.12 】糖果游戏
  19. RTS game/engine Links
  20. 如何制作新年公众号封面图?手把手教你在线编辑图片

热门文章

  1. part-4 运放噪声快速计算
  2. cesium-视频融合
  3. linux无法运行sssverify,Synopsys Design Compiler在fedora Core 9下面的安装
  4. opencv图像合成
  5. OpenCV图像基本操作——图像合成
  6. Mysql数据库的分离和附加
  7. 【魔方攻略】五魔方教程(原创)
  8. Canvas 实用API详解
  9. 港大黄凯斌:6G时代的边缘智能,香农与图灵的相遇
  10. 4K智能AI双目自动跟踪云台摄像机