随手写程序——单样本t分布检验

def simple_t_test(x,miu):
    n=len(x)
    if n<=30 or n>=47:
        return'请输入31-46长度的样本'
        
    T=[71,55,19,24,9,96,83,71,60,49,39,29,20,11,2,94]
    it=iter(T)
    for i in range(len(T)):
        T[i]=next(it)/10000+1.69
    #构造t分布表,显著性水平0.05,自由度从30到45
    
    mean=0;
    for i in x:
        mean+=i
    mean=mean/n
    #求样本均值
    
    ss=0
    for i in x:
        ss=(i-mean)**2+ss
    ss=ss/n
    #求样本方差
    
    t=(mean-miu)/ss*(n-1)**(1/2)
    #构造t统计量

    if t<T[n-31] and t>-T[n-31]:
        return '不拒绝原假设'
    else:
        return '拒绝原假设'

程序很短,也很简单,但是一开始写碰到的坑不少。

1.调用时用import加载模块后,调用函数失败,用from import加载就可以调用,至于为什么暂时不研究了。同时注意路径的添加。

2.函数参数一个是列表,一个是浮点数,列表是可变数据类型,不知该不该在函数里复制一下再用,或本该用元组类型。

3.python的程序段结构里缩进是有意义的,所以写的时候格外注意,还有冒号,有个好用的编辑器很重要啊。。

4.这里t分布表算是手动输入的,循环里用了个迭代器(iter),暂时也不知道迭代器威力何在,先随便玩玩喽。

5.循环里一开始老忘i是在遍历x,老想着从一到n,还有python是从0计数的。

6.python函数调用时,参数有好几种传递方式,关键字参数方式挺好用的。

下面是调用实验

import sys
sys.path.append('D:\python\pythondata')
from jjj import simple_t_test
print(simple_t_test(range(34),17))

结果是

=================== RESTART: D:\python\pythondata\jjjj.py ===================
不拒绝原假设

这段程序没用pandas,也没用调用数据库数据实验,下一步可以考虑改进。用的统计分析方法也很简单,也可以考虑升级。

猜你喜欢

转载自blog.csdn.net/qdu5er/article/details/81073027
今日推荐