写在前面,最近在看假设检验的相关内容,为加深理解,一时兴起随便写的,欢迎指正。
- python统计函数库scipy.stats分布中常见的函数
- - 主要公式——摘自《统计学(第6版)学习指导书 贾俊平》
- 导入包
from scipy import stats as ss
import numpy as np
def mean_test1(x,u,s,n,sig=1,alf=0.05,alternative="tow"):
statsM = abs((x-u)/(s/n**(1/2)))
if alternative=="tow":
alf = alf/2
if 0< n < 30 and sig==0:
a = abs(ss.t.isf(alf,n-1))
p = ss.t.sf(statsM,n-1)
elif n<=0:
print("n的输入有误")
else:
a = abs(ss.norm.isf(alf))
p = ss.norm.sf(statsM)
if statsM > a:
print("统计量的绝对值{} >临界值{},拒绝原假设".format(statsM,a))
else:
print("统计量的绝对值{} <临界值{},不能拒绝原假设".format(statsM,a))
print("P值为",p)
统计学(第6版)贾俊平 例题:
mean_test1(960,1000,200,100,alternative="less")
运行结果: 统计量的绝对值2.0 >临界值1.6448536269514729,拒绝原假设 P值为 0.022750131948179195
def pro_test1(p,u,n,alf=0.05,alternative="tow"):
statsP = abs((p-u)/((u*(1-u)/n)**(1/2)))
if alternative=="tow":
alf = alf/2
a = abs(ss.norm.isf(alf))
if statsP > a:
print("统计量的绝对值{} >临界值{},拒绝原假设".format(statsP,a))
else:
print("统计量的绝对值{} <临界值{},不能拒绝原假设".format(statsP,a))
print("P值为",ss.norm.sf(statsP))
统计学(第6版)贾俊平 例题:
pro_test1(0.1425,0.147,400)
运行结果: 统计量的绝对值0.25416124340864343 <临界值1.9599639845400545,不能拒绝原假设 P值为 0.39968549545509435
def vari_test1(s,u,n,alf=0.05,alternative="greater"):
statsV = (n-1)*s/u
if alternative=="less":
a = ss.chi2.ppf(alf,n-1)
elif alternative=="greater":
a = ss.chi2.isf(alf,n-1)
if statsV > a:
print("统计量{} >临界值{},拒绝原假设".format(statsV,a))
else:
print("统计量{} <临界值{},不能拒绝原假设".format(statsV,a))
print("P值为",ss.norm.sf(statsV))
例题:
vari_test1(0.866,1,25)
运行结果: 统计量20.784 <临界值36.415028501807306,不能拒绝原假设 P值为 3.0204844445890953e-96
|