关于one-way Anova和two-way Anova的代码

最近学数理统计学到Anova感觉做题手动算很麻烦所以编写了一元素和二元素的anova的代码,较为简单只要翻译公式成代码即可,作为小白尝试一下(已验证可用)下为代码,需要安装math和prettytable包!
填好数据后可直接复制到sublime中,然后在终端运行即可。
(新手求轻喷)

one-way anova

import math
from prettytable import PrettyTable
sum1=0 #Xij平方的和
sum2=0 #Xij的和
sum3=0 #行元素的和
sum4=0 #sst第一部分的和
n=0
matrix=[填写矩阵]
for q in range(0,len(matrix)):
for w in range(0,len(matrix[q])):
n=n+1
for i in range(0,len(matrix)):
for j in range(0,len(matrix[i])):
a=math.pow(matrix[i][j],2)
sum1=a+sum1
b=matrix[i][j]
sum2=b+sum2
for o in range(0,len(matrix)):
l=float(1)/len(matrix[o])
sum3=0
for p in range(0,len(matrix[o])):
c=matrix[o][p]
sum3=c+sum3
d=math.pow(sum3,2)*l
sum4=d+sum4
ssto=sum1-math.pow(sum2,2)/n
sst=sum4-math.pow(sum2,2)/n
sse=ssto-sst
msst=sst/(i)
msse=sse/(n-i-1)
f=msst/msse
x=PrettyTable([‘sst’,‘msst’,‘f’])
x.add_row([sst,msst,f])
z=PrettyTable([‘sse’,‘msse’])
z.add_row([sse,msse])
print x
print z

two-way anova

from prettytable import PrettyTable
import math
matrix=[填写矩阵]
n=0
tsum=0 #总数和
rsum1=0
arsum=[0]*len(matrix)
acsum=[0]*len(matrix[0])
for i in range(0,len(matrix)):
for j in range(0,len(matrix[i])):
n=n+1
for i in range(0,len(matrix)):
for j in range(0,len(matrix[i])):
a=matrix[i][j]
tsum=tsum+a
average=tsum/float(n) #总平均数
for i in range(0,len(matrix)):
b=len(matrix[i]) #行向量个数
rsum1=0
for j in range(0,len(matrix[i])):
a=matrix[i][j]
rsum1=a+rsum1
arsum[i]=float(rsum1)/b #各行向量和均值
for j in range(0,len(matrix[i])):
c=len(matrix) #列向量个数
csum1=0
for i in range(0,len(matrix)):
a=matrix[i][j]
csum1=a+csum1
acsum[j]=float(csum1)/c #各列向量和均值

def SSTO():
ssto=0
for i in range(0,len(matrix)):
for j in range(0,len(matrix[i])):
a=math.pow(matrix[i][j]-average,2)
ssto=ssto+a
return ssto

def SSA():
ssa1=0
for i in range(0,len(matrix)):
a=math.pow(arsum[i]-average,2)
ssa1=a+ssa1
ssa=ssa1*b
return ssa

def SSB():
ssb1=0
for i in range(0,len(matrix[0])):
a=math.pow(acsum[i]-average,2)
ssb1=ssb1+a
ssb=ssb1*float©
return ssb

def SSE():
sse=SSTO()-SSA()-SSB()
return sse

def final():
msa=SSA()/float(c-1)
msb=SSB()/float(b-1)
mse=SSE()/float((b-1)*(c-1))
fa=msa/float(mse)
fb=msb/float(mse)
x=PrettyTable([‘ssa’,‘msa’,‘fa’])
x.add_row([SSA(),msa,fa])
y=PrettyTable([‘ssb’,‘msb’,‘fb’])
y.add_row([SSB(),msb,fb])
z=PrettyTable([‘sse’,‘mse’])
z.add_row([SSE(),mse])
print x
print y
print z
final()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值