5 类别的比较
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}\)
要满足的条件是:
- n<5%N,即每次抽样的样本数少于总体的样本数的5%(为了保证\(p_i\)的数量满足中心极限定理)
- 阳性和阴性数目都不少(\(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 proportionprint(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_ztestproportions_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表:
- \(E_i\geq10\)
- \(5\leq E_i< 10\),使用Yate's correction(仍是卡方检验)
- \(E_i<5\),使用Fisher's Exact Test(不是卡方检验)
大于等于2x3表:
- E<5的单元格小于20%
- 可以合并几列再做
python代码
import scipy.stats as statsdata必须是一个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
以及卡方检验(最准确)