方差分析
来源:互联网 发布:阿里云备案空间多少钱 编辑:程序博客网 时间:2024/04/28 17:43
方差分析是数理统计中分析试验数据的一种常用方法.其目的是从试验数据中分析出各种因素的影响及其相互间的交互影响,用以确定各种因素作用的大小,通过数量的形式来分析导致试验结果不同的两种原因:观测条件与随机因素,确定出在试验中有无由观测条件引起的系统性因素在起作用。
双无关变量方差分析
下面三段代码分别对应单变量方差分析、双无关变量方差分析和双相关变量方差分析的算法。由于只是出于嫌弃概率统计的作业太麻烦了,懒得算了而写,健壮性以及代码可读性均不强。并且不排除有错。望指教~O(∩_∩)O~
单变量方差分析:
输入:
第一行:n,m。 表示一共有n个测试数据,并且有m个测试状态。
第二行,m个数,表示m种状态每种有多少组。
接下来n个数,分别是对状态1~状态m的所有测试结果。
输出:
中间变量及最终计算的fa。具体结论需要再去查f分布表。
#include<stdio.h>#include<math.h>int main (){ while(1) { int N,m; int n[100]; scanf("%d%d",&N,&m); for (int i = 0 ;i<m;i++) scanf("%d",&n[i]); double x[100][100]; for (int i = 0; i<m;i++) for (int j = 0;j<n[i];j++) scanf("%lf",&x[i][j]); double T[100]={0}; for (int i = 0;i<m;i++) for (int j = 0;j<n[i];j++) T[i]+=x[i][j]; for (int i = 0;i<m;i++) printf("%lf ",T[i]); printf("\n"); double CT=0; for (int i = 0; i<m;i++) CT+=T[i]; CT=((CT*CT)/(double)N); double st =-CT; for (int i = 0;i<m;i++) for (int j = 0;j<n[i];j++) st+=x[i][j]*x[i][j]; double sa =-CT; for (int i = 0;i<m;i++) sa+=T[i]*T[i]/n[i]; double se=st-sa; double fa=(sa/(m-1))/(se/(N-m)); printf("CT = %lf\n",CT); printf("st = %lf\n",st); printf("sa = %lf\n",sa); printf("se = %lf\n",se); printf("fa = %lf\n",fa); } return 0;}
双无关变量方差分析
输入:
第一行:n,m。 表示两个变量分别有m、n个状态,每种组合状态只有一组测试量。
第二行:两个浮点数,与结论无关。一般可以输入“0 1”.
接下来m*n个浮点数,表示每个组合状态的测试量。
输出:
中间变量及最终计算的fa,fb。具体结论需要再去查f分布表。
#include<stdio.h>#include<math.h>int main (){ while(1) { int m,n; double x[100][100]={0}; scanf("%d%d",&m,&n); double t1,t2; scanf("%lf%lf",&t1,&t2); for (int i=1;i<=m;i++) for (int j=1;j<=n;j++) scanf("%lf",&x[i][j]); for (int i=1;i<=m;i++) for (int j=1;j<=n;j++) x[i][j]=(x[i][j]-t1)/t2; printf("\n"); for (int i=1;i<=m;i++) { for (int j=1;j<=n;j++) printf("%lf ",x[i][j]); printf("\n"); } for (int i=1;i<=m;i++) for (int j=1;j<=n;j++) x[i][0]+=x[i][j]; for (int j=1;j<=n;j++) for (int i=1;i<=m;i++) x[0][j]+=x[i][j]; for (int j=1;j<=n;j++) x[0][0]+=x[0][j]; printf("\n"); printf("Ti¡¤:\n"); for (int i=1;i<=m;i++) printf("%lf ",x[i][0]); printf("\n"); printf("T¡¤j:\n"); for (int j=1;j<=n;j++) printf("%lf ",x[0][j]); printf("\n"); printf("T¡¤¡¤: %lf\n",x[0][0]); double SA=0,SB=0,ST=0,Se=0; for (int i=1;i<=m;i++) SA+=x[i][0]*x[i][0]; SA = SA/double(n)-x[0][0]*x[0][0]/double(m*n); for (int j=1;j<=n;j++) SB+=x[0][j]*x[0][j]; SB = SB/double(m)-x[0][0]*x[0][0]/double(m*n); for (int i=1;i<=m;i++) for (int j=1;j<=n;j++) ST+=x[i][j]*x[i][j]; ST-=x[0][0]*x[0][0]/double(m*n); Se=ST-SA-SB; printf("SA: %lf\n",SA); printf("SB: %lf\n",SB); printf("ST: %lf\n",ST); printf("Se: %lf\n",Se); double FA,FB; FA=SA*(n-1)/Se; FB=SB*(m-1)/Se; printf("FA: %lf\n",FA); printf("FB: %lf\n",FB); } return 0;}
双有关变量方差分析
输入:
第一行:n,m,r。 表示两个变量分别有m、n个状态,每种组合状态有r组测试量。
第二行:两个浮点数,与结论无关。一般可以输入“0 1”.
接下来m*n*r个浮点数,表示每个组合状态的r组测试量。
输出:
中间变量及最终计算的fa,fb,fab。具体结论需要再去查f分布表。
#include<stdio.h>#include<math.h>int main (){ while(1) { int m,n,r; double x[100][100][10]={0}; scanf("%d%d%d",&m,&n,&r); double t1,t2; scanf("%lf%lf",&t1,&t2); for (int i=1;i<=m;i++) for (int j=1;j<=n;j++) for (int k=1;k<=r;k++) scanf("%lf",&x[i][j][k]); for (int i=1;i<=m;i++) for (int j=1;j<=n;j++) for (int k=1;k<=r;k++) x[i][j][k]=(x[i][j][k]-t1)/t2; printf("\n"); for (int i=1;i<=m;i++) { for (int j=1;j<=n;j++) { for (int k=1;k<=r;k++) printf("%lf ",x[i][j][k]); printf(" "); } printf("\n"); } for (int i=1;i<=m;i++) for (int j=1;j<=n;j++) { for (int k=1;k<=r;k++) x[i][j][0]+=x[i][j][k]; x[i][j][0]/=double(r); } for (int i=1;i<=m;i++) { for (int j=1;j<=n;j++) x[i][0][0]+=x[i][j][0]; x[i][0][0]/=double(n); } for (int j=1;j<=n;j++) { for (int i=1;i<=m;i++) x[0][j][0]+=x[i][j][0]; x[0][j][0]/=double(m); } for (int j=1;j<=n;j++) x[0][0][0]+=x[0][j][0]; x[0][0][0]/=double(n); printf("\n"); for (int i=1;i<=m;i++) { for (int j=1;j<=n;j++) printf("%lf ",x[i][j][0]); printf("\n"); } double SA=0,SB=0,ST=0,Se=0,SAB=0; for (int i=1;i<=m;i++) SA+=n*r*(x[i][0][0]-x[0][0][0])*(x[i][0][0]-x[0][0][0]); for (int j=1;j<=n;j++) SB+=m*r*(x[0][j][0]-x[0][0][0])*(x[0][j][0]-x[0][0][0]); for (int i=1;i<=m;i++) for (int j=1;j<=n;j++) SAB+=r*(x[i][j][0]-x[i][0][0]-x[0][j][0]+x[0][0][0])*(x[i][j][0]-x[i][0][0]-x[0][j][0]+x[0][0][0]); for (int i=1;i<=m;i++) for (int j=1;j<=n;j++) for (int k=1;k<=r;k++) ST+=(x[i][j][k]-x[0][0][0])*(x[i][j][k]-x[0][0][0]); for (int i=1;i<=m;i++) for (int j=1;j<=n;j++) for (int k=1;k<=r;k++) Se+=(x[i][j][k]-x[i][j][0])*(x[i][j][k]-x[i][j][0]); printf("SA : %lf\n",SA); printf("SB : %lf\n",SB); printf("SAB: %lf\n",SAB); printf("ST : %lf\n",ST); printf("Se : %lf\n",Se); double FA,FB,FAB; FA=SA*m*n*(r-1)/Se/(n-1); FB=SB*m*n*(r-1)/Se/(m-1); FAB=SAB*m*n*(r-1)/Se/(m-1)/(n-1); printf("FA : %lf\n",FA); printf("FB : %lf\n",FB); printf("FAB: %lf\n",FAB); } return 0;}
0 0
- 方差分析
- 方差分析
- 方差分析
- 方差分析
- 方差分析
- 方差分析
- 方差分析
- 方差分析
- 方差分析
- 方差分析
- 方差分析
- 方差分析
- 方差分析
- 方差分析
- 方差分析
- 方差分析
- 方差分析公式
- matlab方差分析
- vi常用命令
- 未能加载文件或程序集“DAL”或它的某一个依赖项。系统找不到指定的文件。
- 如何开始一个模块化可扩展的Web App
- (二)spring 远程服务之Hessian
- 程序国际化
- 方差分析
- php提交表单时判断 if($_POST[submit])与 if(isset($_POST[submit])) 的区别
- 九度 题目1214:丑数
- Linux Shell 通配符、元字符、转义符使用实例介绍
- IOS 总结
- leetcode - Binary Tree Inorder Traversal
- 数据类型
- error while loading shared libraries: libssl.so.4: cannot open shared object ...
- 06_android入门_采用HttpURLConnection的POST方式实现登陆案例