【统计推断】理论与实现



2017年10月27日    Author:Guofei

文章归类: 0x41_统计模型    文章编号: 406

版权声明:本文作者是郭飞。转载随意,但需要标明原文链接,并通知本人
原文链接:https://www.guofei.site/2017/10/27/hypothesistesting.html


理论篇大图见于这里
jupyter原文见于这里

理论篇

第一类错误:H0为真,但错误地拒绝了H0
第二类错误:H0为假,但错误地接受了H0

用公式表示就是

  • 第一类错误$\alpha=P(x \in w \mid H_0)$
  • 第二类错误$\beta=P(x \in w \mid H_1)$

大图见于这里

大图见于这里

额外

用excel来存这个知识,始终别扭,现在把其中一部分重新在这里写一写。

均值检验

名字 H0 前提条件 构建随机变量 服从分布 代码 备注
单因子方差分析 ANOVA u1=u2=…=ur 独立、正态、等方差
$X_{ij}=u_i+\varepsilon_{ij}$
$\varepsilon_{ij} \sim N(0,\sigma^2)$
$SST=\sum\limits_{i=1}^r\sum\limits_{j=1}^{n_i}(x_{ij}-\bar{\bar x})^2$
$=\sum\limits_{i=1}^r\sum\limits_{j=1}^{n_i}(x_{ij}-\bar x_i)+\sum\limits_{i=1}^r\sum\limits_{j=1}^{n_i}(\bar x_i-\bar{\bar x})^2$
=SSE(组内误差)+SSA(组间误差)
$F=\dfrac{SSA/\sigma^2/(r-1)}{SSE/\sigma^2/(n-r)}\sim F(r-1,n-r)$ tstat, pvalue = stats.f_oneway(data1, data2, data3)
from statsmodels.formula.api import ols
sm.stats.anova_lm(ols(‘target ~ C(motor)’,data=df).fit())
 

双因子方差分析带交叉项

参考
先定义命名和数据:
$x_{ijk}=u+\alpha_i+\beta_j+(\alpha\beta)_ {ij}+\varepsilon_{ijk}$

  • 序号i表示在A因素中的标号,总共a个
  • 序号j表示在B因素中的标号,总共b个
  • 序号j表示在AB因素相同时,多次抽取的样本的标号。然后假设每组数量都一样,都是n个

H0:$\alpha_i=0,\beta_j=0,\forall i,j$

那么,

方差来源 公式 若H0成立,那么 F统计量
因子A $SSA=bn\sum\limits_{i=1}^a(\bar x_{i\cdot\cdot}-\bar x_{\cdot\cdot\cdot})^2$ $SSA/\sigma^2\sim \chi^2(a-1)$ $\dfrac{SSA/(a-1)}{SSE/(ab(n-1))}$
因子B $SSB=an\sum\limits_{i=1}^b(\bar x_{\cdot j \cdot}-\bar x_{\cdot\cdot\cdot})^2$ $SSB/\sigma^2\sim \chi^2(b-1)$ $\dfrac{SSB/(b-1)}{SSE/(ab(n-1))}$
因子A×B $SSAB=n\sum\limits_{i=1}^a\sum\limits_{j=1}^b(\bar x_{ij\cdot}-\bar x_{i\cdot\cdot}-\bar x_{\cdot j \cdot}+\bar x_{\cdot\cdot\cdot})^2$ $SSAB/\sigma^2\sim \chi^2((a-1)(b-1))$ $\dfrac{SSA/((a-1)(b-1))}{SSE/(ab(n-1))}$
组内误差 $SSE=\sum\limits_{i=1}^a\sum\limits_{j=1}^b\sum\limits_{k=1}^n(y_{ijk}-\bar y_{ij\cdot})^2$ $SSE/\sigma^2\sim \chi^2(ab(n-1))$  
总和 SST=SSA+SSB+SSAB+SSE $SST/\sigma^2\sim \chi^2(abn-1)$  
sm.stats.anova_lm(ols('target ~ C(motor) + C(screw)',data=df).fit())

带交互项:<br> ana = ols('target ~ C(motor) + C(screw) +C(motor)*C(screw)', data= df).fit()
sm.stats.anova_lm(ana)

实践篇

大网页见于这里

大网页见于这里

点击下载ipynb文件

额外知识

kstest 不但可以传入指定的分布字符串(上文),也可以传入一个分布对象(如下)

stats.kstest(rvs=[1, 2, 3, 4, 5], cdf='norm')
stats.kstest(rvs=[1, 2, 3, 4, 5], cdf=stats.norm(loc=0, scale=1).cdf)

您的支持将鼓励我继续创作!