天天看點

關于one-way Anova和two-way Anova的代碼one-way anovatwo-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()