python数学建模第九章

9.2

import numpy as np
from scipy.stats import norm, chi2, chisquare
import pylab as plt

n=50; k=6
a=np.loadtxt('ti9_2.txt').flatten()
mu=a.mean(); s=a.std(ddof=1)
x1=a.min(); x2=a.max()  #求最小值和最大值
x=np.linspace(14.55, 15.55, k)  #逐步凑的分点
bin=np.hstack([x1, x, x2])    #统计频数的分点
h=plt.hist(a, bin); f=h[0]    #统计数据频数及提取频数值
p1=norm.cdf(x, mu, s)  #计算各个分点分布函数的取值
p2=np.hstack([p1[0], np.diff(p1), 1-p1[-1]])  #计算各区间概率
print('各区间的频数:', f)
print('各区间概率为:', np.round(p2,4))
ex=n*p2  #计算期望频数
kf1=chisquare(f, ex, ddof=2)   #调用库函数计算统计量的值
kf2=sum(f**2/(n*p2))-n         #直接计算统计量的值
ka=chi2.ppf(0.95, k-2)         #临界值
print(kf1); print(round(kf2,4))  #输出两种方法计算的统计量

9.3

import numpy as np
import pylab as plt
import pandas as pd
import statsmodels.api as sm
from scipy.stats import f

a = pd.read_excel('ti9_3.xlsx', header=None)
a.boxplot()  #画箱线图
b = a.values.flatten()
print('上alpha分位数为:', f.ppf(0.95, 6, 63))
x = np.tile(np.arange(1,8),(10,1)).flatten()
d = {'x' : x, 'y' : b}  #x为类别变量
model = sm.formula.ols('y~C(x)', d).fit()  
anova = sm.stats.anova_lm(model)  #进行单因素方差分析
print('总的偏差平方和:', round(sum(anova.sum_sq),4))
print(anova); plt.show()

 

9.4

import numpy as np
import statsmodels.api as sm


y=np.loadtxt('ti9_4.txt').flatten()  #把表中的逗号替换为空格
x1=np.tile(np.arange(1,4),(12,1)).T.flatten()
x2=np.tile(np.hstack([np.ones(3),2*np.ones(3),3*np.ones(3),
                      4*np.ones(3)]),(3,1)).flatten()
d={'x1':x1, 'x2':x2, 'y':y}
md=sm.formula.ols('y~C(x1)*C(x2)',d).fit()
ano=sm.stats.anova_lm(md)
print(ano); print('总偏差平方和:', sum(ano.sum_sq))

9.5

import numpy as np
import statsmodels.api as sm

y=np.loadtxt('ti9_5.txt').T.flatten()  
x1=np.tile(np.hstack([np.ones(4),2*np.ones(4),3*np.ones(4)]),
           (4,1)).flatten()
x2=np.tile(np.tile([1,1,2,2],(1,3)),(4,1)).flatten()
x3=np.tile(np.tile([1,2],(1,6)),(4,1)).flatten()
d={'x1':x1, 'x2':x2, 'x3':x3, 'y':y}
md=sm.formula.ols('y~C(x1)*C(x2)*C(x3)',d).fit()
ano=sm.stats.anova_lm(md)
print(ano); print('总偏差平方和:', sum(ano.sum_sq))

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值