数学建模入门-python实现单个母体常用参数检验

前言

发现python里面假设检验的轮子并不多,自己就把统计中常用的几种分布都实现了一下,用的库如下

import pandas as pd
import math
import numpy as np
from scipy.stats import norm, t, chi2, f

检验均值

u检验

u检验又称z检验

理论

在这里插入图片描述

代码

def one_ucheck(data, mu,sigma,alpha=0.05,tail=0):
    '''
    :param data:    样本数据可以是list也有是DataFrame
    :param mu:      原假设的均值
    :param sigma:   分布的方差
    :param alpha:   检验水平
    :param tail:    0表示双边,-1表示拒绝域在左边,1表示拒绝域在右边
    :return:        是否通过检验
    '''
    if type(data) != type(pd.DataFrame([])):
        data=pd.DataFrame(data)
    dataMean = data.mean()[0]
    u = math.sqrt(data.count()) * (dataMean - mu) / sigma
    flag = False
    if tail == 0:
        flag = abs(u) <= norm.ppf(1-alpha/2)
    elif tail == -1:
        flag = u >= norm.ppf(alpha)
    else:
        flag = u <= norm.ppf(1-alpha)
    return flag

例题

在这里插入图片描述
问机器是否正常?
总体σ 已知, x ~ N(μ,0.0152 ) , μ 未知。 于是提出假设 H 0 : μ = μ0 = 0.5和H1 : μ ≠ 0.5
在这里插入图片描述
默认α = 0.05,这里传入的是DataFrame对象,也可直接传入list
结果为False未通过检验

t检验

理论

在这里插入图片描述
在这里插入图片描述

代码

def one_tcheck(data, mu,alpha=0.05,tail=0):
    '''
    :param data:    样本数据可以是list也有是DataFrame
    :param mu:      原假设的均值
    :param alpha:   检验水平
    :param tail:    0表示双边,-1表示拒绝域在左边,1表示拒绝域在右边
    :return:        是否通过检验
    '''
    if type(data) != type(pd.DataFrame([])):
        data=pd.DataFrame(data)
    dataMean = data.mean()[0]
    n = data.count()[0]
    sigma = n*data.var()[0]/(n-1)
    T = math.sqrt(n) * (dataMean - mu) / sigma
    flag = False
    if tail == 0:
        flag = abs(T) <= t.isf(alpha/2, n-1)
    elif tail == -1:
        flag = T >= t.isf(alpha, n-1)
    else:
        flag = T <= t.isf(alpha, n-1)
    return flag

例题

在这里插入图片描述
默认α = 0.05,这里直接传入列list
在这里插入图片描述
结果为True通过检验

检验方差

理论

均值已知
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
均值未知
在这里插入图片描述

代码

def one_ccheck(data, mu, sigma, alpha=0.05, tail=0):
    if type(data) != type(pd.DataFrame([])):
        data = pd.DataFrame(data)
    n = data.count()[0]
    matrix = np.array(data)
    if mu != None:			# mu未知
        Chi2 = sum((matrix - mu)**2) / sigma
    else:					# mu已知
        dataMean = data.mean()[0]
        Chi2 = sum((matrix - dataMean)**2)[0] / sigma
        n = n-1
        print(Chi2)
    if tail == 0:
        return Chi2 >= chi2.ppf(alpha/2, n) and Chi2 <= chi2.ppf(1-alpha/2, n)
    elif tail == -1:
        return Chi2 >= chi2.ppf(alpha, n)
    else:
        print(chi2.ppf(1 - alpha, n))
        return Chi2 <= chi2.ppf(1-alpha, n)

例题

在这里插入图片描述
注意此题非双边检验,需要制定tail参数
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值