虽然这些内容考试不太可能考——班主任说她还没无聊到让我们写代码的程度,但是我觉得挺有意思也挺重要的。关键的是,今天翻大二的数统课件,第十章的最后,老师居然已经讲过了!!!可是我现在一点印象都没有,我当时在哪里?在干嘛?。。。


关于一元样本,一般我们会有这些方法:

“Quick and dirty”methods:

  • 直方图
  • QQ图
  • 偏度与峰度

统计检验:

  • Shapiro-Wilks test
  • Kolmogrov-Smirnov test
  • Cramer-von Mises test
  • Andersion-Darling test

直方图:



y1=rnorm(100); #生成100个服从标准正态分布的随机变量
y2=rexp(100,2); #生成100个服从指数分布的随机变量
y3=rt(100,1); #生成100个服从t分布的随机变量
y4=-y2
par(mfrow=c(2,2))
#分别画出直方图
hist(y1,main="Histogram for 100 random numbers from N(0,1)",xlim=c(-5,5))
hist(y2,main="Histogram for 100 random numbers from Exp(2)")
hist(y3[abs(y3)<5],main="Histogram for 100 random numbers from t(1)",xlim=c(-5,5),xlab="y3")
hist(y4,main="Histogram for 100 random numbers from -Exp(2)")



QQ图

  • QQ图的命令非常简单,它的思想其实是在比较实际的分位数与正态的分位数。如果样本来自于正态分布,那么QQ图上的点应当在一条直线上。
par(mfrow=c(2,2))
qqnorm(y1,main="QQplot for y1 from N(0,1)");qqline(y1)
#如果你想自己写也可以,下边是一个例子
a=c(1,2,3,4,5)
#t=rank(a)/length(a)    #计算对应数字在向量中的分位数
t=(rank(a)-0.5)/length(a)  ##R中qqnorm的调整方式
q=qnorm(t)  
#康康自己画的是不是和调包的一样
par(mfrow=c(1,2))
plot(q,a)
qqnorm(a)



  • 画完QQ图,我们需要观察图形的形状:如果是直线——那么样本来自正态分布;如果是“S”形——样本比正态要薄尾一些;如果是反“S”形——样本比正态要后尾一些;如果是山洞一样的“concave”——左偏;如果是“convex”——右偏

偏度与峰度

  • 若样本来自正态,算出来的值应该在0-3之间
library(moments)
#偏度
skewness(y1)
#峰度
kurtosis(y1)



统计检验

  • 四种方法我前边已经列过了,关于原理大家要用的话自己去查一查印象会深一些。
#Shapiro-Wilks Test
shapiro.test(y1)

#Kolmogorov-Smirnov Test
library(nortest)
ks.test(y1,"pnorm",mean(y1),sqrt(var(y1)))

#Cramer-von Mises Test
library(nortest)
cvm.test(y1)

#Anderson-Darling Test
library(nortest)
ad.test(y1)




关于多个维度的样本,如果我们想看看他们是不是来自于联合正态分布,我们一般这样做:

  • 看每一维度的单样本是不是来自于一元正态
  • 看二元之间的散点图有没有线性的关系。(因为对于二元正态,如果两个随机变量相关,那么他们一定是线性相关,具体的证明可以去看An Introduction to Multivariate Statistical Analysis Third Edition
  • 接下来看样本的统计距离是不是服从卡方分布。