推论统计(Inferential statistics)是借助抽样调查,从局部推断总体,以对不肯定的事物做出决策的一种统计。有总体参数估计与假设检验两种。前者以一次性抽样实验为依据,对整个总体的某个数字特征做出估计。后者则是对某种假设进行检验,根据计算结果推断所做的假设是否可以接受。如平均数、标准差、相关系数、回归系数等特征的总体估计及差异显著性检验。推断统计的理论基础是概率论,它更多地需要借助抽样理论与方法[1]。
本文框架:
一、概率分布
1.离散分布
1)基础知识
2)Python实现
plot默认绘制折线,如果只绘制点,只需传入下面的参数:
marker:点的形状,值o表示点为圆圈标记(circle marker)
linestyle:线条的形状,值None表示不显示连接各个点的折线
vlines用于绘制竖直线(vertical lines),参数说明:
vline(x坐标值, y坐标最小值, y坐标值最大值)
- 伯努利分布Bernoulli distribution
#导入包
#数组包
import numpy as np
#绘图包
import matplotlib.pyplot as plt
#统计计算包的统计模块
from scipy import stats
X = np.arange(0, 2,1)
p = 0.5 # 硬币朝上的概率
pList = stats.bernoulli.pmf(X, p)
plt.plot(X, pList, marker='o',linestyle='None')
plt.vlines(X, 0, pList)
#x轴文本
plt.xlabel('随机变量:抛硬币1次')
#y轴文本
plt.ylabel('概率')
#标题
plt.title('伯努利分布:p=%.2f' % p)
#显示图形
plt.show()
- 二项分布Binomial Distribution
#导入包
#数组包
import numpy as np
#绘图包
import matplotlib.pyplot as plt
#统计计算包的统计模块
from scipy import stats
#第1步,定义随机变量:5次抛硬币,正面朝上的次数
n = 5 # 做某件事情的次数
p = 0.5 # 做某件事情成功的概率
X = np.arange(0, n+1,1)
#第2步,#求对应分布的概率:概率质量函数 (PMF)
#它返回一个列表,列表中每个元素表示随机变量中对应值的概率
pList = stats.binom.pmf(X, n, p)
#第3步,绘图
plt.plot(X, pList, marker='o',linestyle='None')
plt.vlines(X, 0, pList)
#x轴文本
plt.xlabel('随机变量:抛硬币正面朝上次数')
#y轴文本
plt.ylabel('概率')
#标题
plt.title('二项分布:n=%i,p=%.2f' % (n,p))
#显示图形
plt.show()
- 几何分布Geometric distribution
#导入包
#数组包
import numpy as np
#绘图包
import matplotlib.pyplot as plt
#统计计算包的统计模块
from scipy import stats
#第k次做某件事情,才取到第1次成功
k = 5
#做某件事情成功的概率,这里假设每次成功概率都是60%
p = 0.6
X = np.arange(1, k+1,1)
pList = stats.geom.pmf(X,p)
plt.plot(X, pList, marker='o',linestyle='None')
plt.vlines(X, 0, pList)
#x轴文本
plt.xlabel('随机变量:第k次才首次成功')
#y轴文本
plt.ylabel('概率')
#标题
plt.title('几何分布:p=%.2f' % p)
#显示图形
plt.show()
- 泊松分布Poisson distribution
#导入包
#数组包
import numpy as np
#绘图包
import matplotlib.pyplot as plt
#统计计算包的统计模块
from scipy import stats
#第1步:定义随机变量:已知某市平均一天发生事故的次数是2,求每天发生4次的概率是多少?
mu=2 #mu表示每天发生的次数是2次
k=4 #每天发生4次
X=np.arange(0,k+1,1)
#第2步:求PMF
pList=stats.poisson.pmf(X,mu)
#第3步:绘图
plt.plot(X, pList, marker='o',linestyle='None')
plt.vlines(X, 0, pList)
#x轴文本
plt.xlabel('随机变量:某市发生k次事故')
#y轴文本
plt.ylabel('概率')
#标题
plt.title('泊松分布:平均值=%i' % mu)
#显示图形
plt.show()
2.连续分布
1)基础知识
下面是z值表,通过z值查找相应的概率。查询步骤:例如z=1.15,可以先在第一列找到1.1,然后在第一行找到0.05,分别作垂线,相交的点对应的数值即为概率。
2)Python实现
- 正态分布Normal distribution
#导入包
#数组包
import numpy as np
#绘图包
import matplotlib.pyplot as plt
#统计计算包的统计模块
from scipy import stats
#第1步,定义随机变量:
mu=0 #平均值
sigma= 1 #标准差
X = np.arange(-5, 5,0.1)
#第2步,概率密度函数(PDF)
y=stats.norm.pdf(X,mu,sigma)
#第3步,绘图
plt.plot(X, y)
#x轴文本
plt.xlabel('随机变量:x')
#y轴文本
plt.ylabel('概率:y')
#标题
plt.title('正态分布:$mu$=%.1f,$sigma^2$=%.1f' % (mu,sigma))
#网格
plt.grid()
#显示图形
plt.show()
- 幂律分布Power-law distrubition
参考:Python数据可视化:幂律分布
#导入包
import matplotlib.pyplot as plt
import numpy as np
from scipy.stats import norm
#第1步:定义随机变量X
X = np.arange(10, 1010, 10) #生成100个数据点
#第2步:生成因变量Y
noise=norm.rvs(0, size=100, scale=0.2) # 生成50个正态分布scale=0.2控制噪声强度
Y=[]
for i in range(len(X)):
Y.append(10.8*pow(X[i],-0.3)+noise[i]) # 得到Y=10.8*x^-0.3+noise
#第3步:绘图
# plot raw data
Y=np.array(Y)
#x轴文本
plt.xlabel('随机变量:x')
#y轴文本
plt.ylabel('因变量:y')
#标题
plt.title("幂律分布")
plt.scatter(X, Y, color='black')
plt.show()
二、抽样分布
1.总体与样本
- 总体是研究对象的整个群体;
- 样本是从总体中选取的一部分,用于代表总体;
- 样本数量是你有多少个样本,样本大小(样本容量)是每个样本里有多少个数据;
- 将样本平均值的分布可视化,叫做抽样分布。
2.中心极限定理
- 样本平均值约等于总体平均值;
- 不管总体是什么分布,任意一个总体的样本平均值都会为围绕在总体的平均值周围,并且成正态分布。
中心极限定理演示地址:http://onlinestatbook.com/stat_sim/sampling_dist/index.html
1)用样本估计总体
样本均值约等于总体平均值;
样本估计总体的标准差:
2)根据总体信息,判断某个样本属于总体
总体中的个体离均值的偏离程度,测量出的σ(西格玛,标准误差)表征着诸如单位缺陷、百万缺陷或错误的概率性,σ值越大,缺陷或错误就越少。这个σ是对于固定的一组数据和曲线来说的,而对于两组数据来说这个σ是不能直接比较的。如图,σ对于曲线来说是相对的,曲线的平均值到其中一个控制线(上限或下限)的值固定,当如上图的离散度大时σ也大,曲线的平均值到其中一个控制线只相当于3σ;而当如下图的离散度小时σ也小,曲线的平均值到其中一个控制线却相当于6σ[2]。
3.随机抽样的应用
- 数据框(DataFrame)抽样
#导入包
import numpy as np #数组包
import pandas as pd #数据分析包
df = pd.DataFrame(np.arange(5 * 4).reshape((5, 4)))
#随机选择一个n行的子集
sample1=df.sample(n=3)
sample1
- 抽奖
#应用案例:从500个用户中随机抽取10个人作为中奖者
for i in range(10):
userId=random.randint(0,500)
#用%s格式化字符串
print('第 %s 位获奖用户id是 %s' % (i,userId) )
- 机器学习
from sklearn.cross_validation import train_test_split
#建立模型用的训练数据集和测试数据集
train_X, test_X, train_y, test_y = train_test_split(source_X , source_y,train_size=.8)
#输出数据集大小
print ('原始数据集特征:',source_X.shape,
'训练数据集特征:',train_X.shape ,
'测试数据集特征:',test_X.shape)
print ('原始数据集标签:',source_y.shape,
'训练数据集标签:',train_y.shape ,
'测试数据集标签:',test_y.shape)
4.偏见的产生和避免
1)样本偏差
由样本抽取的方式存在问题导致的,常见的样本偏差有两种,一种是所抽取的样本不是随机的,另一种是抽取的样本数量不够多。
避免方法:采取随机抽取的方式如抽签、抽取足够的样本数量。
2)幸存者偏差
指的是当取得资讯的渠道,仅来自于幸存者时,此资讯可能会存在与实际情况不同的偏差。人们只看到经过某种筛选而产生的结果,而没有意识到筛选的过程,因此忽略了被筛选掉的关键信息。
避免方法:逆向思考、假设检验法。
3)概率偏见
我们的直觉和客观概念常常是不相符的。诺贝尔经济学奖得主,行为经济学家丹尼尔卡尼曼认为,这种偏见主要来自于三个原因:代表性偏差(以偏概全),可得性偏差(眼见为实),沉锚效应(先入为主)。
避免方法:学习概率论与数理统计、避免用直觉判断。
4)信息茧房
指人们的信息领域会习惯性地被自己的兴趣所引导,从而将自己的生活桎梏于像蚕茧一般的“茧房”中的现象。
避免方法:远离舒适圈、拓宽自己的视野。
参考
- ^车文博.当代西方心理学新词典:吉林人民出版社,2001
- ^6西格玛 https://zhidao.baidu.com/question/394624914.html