5 类别的比较

学习笔记
作者: MingXiao

5.1 单个样本比例的置信区间

5.1.1 例子引入

例:某社区有12000人,但只有200个试剂盒,要如何检测社区的感染率?即:如何从样本推断总体比例
一共有200次检测机会,记n=200,N=12000
在一次检测中,测出了m个阳性,那么这组的感染率就是\(p_1=\frac{m}{n}\)
假设12000中一共有M个阳性,那么很显然\(\mathsf{E}(p_i)=\frac{M}{12000}\triangleq p\)其中p就是每个人的感染率,即要求的东西
pi的方差满足\(D(p_i)=D(m/n)=\frac{p(1-p)}{n}\Rightarrow \sigma_p=\sqrt{\frac{p(1-p)}{n}}\)
根据大数定律和中心极限定理,当满足下面的条件时,就有
\(p_i \sim N(p,\frac{p(1-p)}{n})\),\(p\approx p_i \Rightarrow \sigma_p\approx\sigma_{p_{i}}\)
故用\(p_i \sim N(p,\frac{p_i(1-p_i)}{n})\),作为枢轴量计算置信区间,得到p的置信区间\(\mathsf{CI}_{1-\alpha}=p_i\pm Z_{\frac{\alpha}{2}}\cdot\sigma_{p_i}\)

要满足的条件是:

  1. n<5%N,即每次抽样的样本数少于总体的样本数的5%(为了保证\(p_i\)的数量满足中心极限定理)
  2. 阳性和阴性数目都不少(\(np_i>10 , n(1-p_i)>10\))

实际上,这个想法和概统中所说的中心极限是一致的。

假定个体\(x_i\),其得病概率p,那么总体中所有患病人数满足\(\Sigma x\sim B(N,p)\)
根据中心极限定理,有\(\Sigma x \stackrel{近似}{\sim} N(Np,Np(1-p))\approx N(Np,Np_i(1-p_i))\)
\(\therefore p \stackrel{近似}{\sim}N(p,\frac{p_i(1-p_i)}{N})\)
此时只需要满足条件2即可

5.1.2 求单样本CI的两种方法

  • Simple Asymptotic:即上面的方法
  • Simple Asymptotic with continuity correction:\(\mathsf{CI}_{1-\alpha}=p_i\pm (Z_{\frac{\alpha}{2}}\cdot\sigma_{p_i}+\frac{1}{2n})\)
python代码 import statsmodels.stats.proportion as proportion
print(proportion_confint(m,n,alpha,method="normal"))
其中m是阳性,n是总体,method是检验方式,alpha是置信度(小的) 上面的计算方法是simple asymptotic 若想用修正的,则自己算

5.2 多个独立样本的比例差异的统计

注意,以下的样本必须满足5.1的条件

5.2.1 差异的置信区间

原理
两个独立的正态总体 \(X_1\sim N(\mu_1,\sigma^2_1),X_2\sim N(\mu_2,\sigma^2_2)\),枢轴量如前文得到的独立样本的t检验
现在就是将\(X_1,X_2\)换成\(\hat{p_1},\hat{p_2}\),其均值是要求的,方差是用已知估计的
有\(\hat{p_1}-\hat{p_2}\sim N(p_1-p_2,\frac{\hat{p_1}(1-\hat{p_1})}{n_1}+\frac{\hat{p_2}(1-\hat{p_2})}{n_2})\)
得到枢轴量

几种算法

  • Pearson's:\(\mathsf{CI}=\hat{p_1}-\hat{p_2}\pm z_\frac{\alpha}{2}\cdot \sqrt{\frac{\hat{p_1}(1-\hat{p_1})}{n_1}+\frac{\hat{p_2}(1-\hat{p_2})}{n_2}}\)
  • Yate's:\(\mathsf{CI}=\hat{p_1}-\hat{p_2}\pm (z_\frac{\alpha}{2}\cdot \sqrt{\frac{\hat{p_1}(1-\hat{p_1})}{n_1}+\frac{\hat{p_2}(1-\hat{p_2})}{n_2}}+\frac{1}{2}(\frac{1}{n_1}+\frac{1}{n_2}))\)

5.2.2 差异的假设检验

5.2.2.1 两个样本用NHST(zTest)

\(H_0:p_1=p_2\),枢轴量如5.2.1所示,做NHST

python代码 from statsmodels.stats.proportion import proportions_ztest
proportions_ztest(m, n, p, alternative="tow-sided")
上面是单个样本和p比,其中m是阳性,n是总数 count = [m1, m2]
nobs = [n1, n2]
proportions_ztest(count, nobs, alternative="tow-sided")
上面是双样本

5.2.2.2 多个样本用RC联表的\(\chi^2\)检验

例:药物剂量对阳性率的影响

症状 剂量1 剂量2 剂量3
阳性 10 40 5
阴性 90 160 95
总计 100 200 100

即 \(p_1=p_2=p_3\)?(H0)

上表格是观测值(Observation),下面给出当H0成立时的期望人数(Expectation)

症状 剂量1 剂量2 剂量3 总计
阳性 10 40 5 55
阴性 90 160 95 345
总计 100 200 100 400

由总计一栏计算如果相等各个计量的人数分布

症状 剂量1 剂量2 剂量3
阳性 13.75 27.5 13.75
阴性 86.25 172.5 86.25
总计 100 200 100

得到\(\chi^2=\sum \frac{(O_i-E_i)^2}{E_i}\),其自由度\(df=rc-1-r-c=(r-1)(c-1)\),其中r,c分别是行数、列数(不包括总计),上例中df=(3-1)(2-1)=2
由于仅当H0成立时上式才服从卡方分布,故可以做检验

效应量Cramer‘s V(\(\varphi_c\))
\(V=\sqrt{\frac{\chi^2}{N\cdot\min(r-1,c-1)}}\),其中N是样本量,V表示变量对因变量的关联性强弱

Rules of thumb:
V∈[0.1,0.2]: 弱关联,V∈[0.2,0.5]: 中等关联,V>0.5: 强关联

RC联表卡方检验的条件

  • 各个单元格独立观测

  • 2x2表:

    1. \(E_i\geq10\)
    2. \(5\leq E_i< 10\),使用Yate's correction(仍是卡方检验)
    3. \(E_i<5\),使用Fisher's Exact Test(不是卡方检验)
  • 大于等于2x3表:

    1. E<5的单元格小于20%
    2. 可以合并几列再做
python代码 import scipy.stats as stats
data必须是一个RC联表DataFrame
chi2, p, dof, expected = stats.chi2_contingency(data)
chi2是卡方值,p是对应的p,dof是自由度,expected是一个RC联表,返回期望值
V自己算

5.3 计数数据的卡方检验:Goodness of Fit

例:五个班级的流感人数分布是否均匀

班级 1 2 3 4 5
观测值(Obs) 8 10 12 7 13

先列出预期值

班级 1 2 3 4 5
观测值(Obs) 8 10 12 7 13
预期值(Exp) 10 10 10 10 10

类似于RC联表的卡方检验,就是验证Obs和Exp是否同分布

原理是\(\chi^2=\sum_\limits{i=1}^c\frac{(O_i-E_i)^2}{E_i}\),df=c-q-1,其中c是样本数,q是列出预期值所需的由样本推出的未知量,1是为了保持总体不变

本例中df=5-1=4,q=0,本例只用到了总体不变

APA报告格式:通过XXX检验,感染人数的分布显著服从/不服从XX分布,\(\chi^2(df,N)=\)xx,p=.xxx
N是总人数(不是班级数)

python代码 stats.chisquare(f_obs,f_exp,ddof=q)
其中f_obs是观测值,f_exp是预期值,q是上面q
正态分布的例子

选取每个区间的中间值作为代表值,构造观测值数组count
如果认为应该服从\(N(\mu,\sigma^2)\),通过观测值计算,即\(\mu=\mathsf{mean(Count)},\sigma=s\),此时q=2
根据每组差值计算此时正态分布的\(E_i\),即\(E_i=(\Phi(u_i)-\Phi(u_{i-1}))\times N\),再加上两头的
用\(O_i和E_i\)构造\(\chi^2\)

如果认为服从\(N(1,8)\),那么此时q=0,因为没用样本观测值,\(\mu=1,\sigma=2\sqrt{2}\)

例:如下图

(1)能,使用GoF卡方检验,Exp是分布均匀,故df=50-1=49

​ 或者,使用RC联表卡方检验,df= (50-1)(2-1)=49

(2)能,划分一个区间,往里用计数的方法,如上例,分为n组,df=n-2-1

(3)能,此时认为50年前测得的数据为Exp,50年后测得的数据为Obs

​ \(\chi^2=\sum_\limits{i=1}^{50}\frac{(O_i-E_i)^2}{E_i}\),由于此时的Exp和Obs总数无关,df=50,不需要-1

5.4 判断服从正态分布的方法

print(stats.skew(data)) %偏度
print(stats.kurtosis(data)) %峰度
print(stats.shapiro(data)) %NHST
fig = sm.qqplot(data, stats.norm,line='s') %QQplot
以及卡方检验(最准确)



Comments