写在前面
温习一下用R做基本统计的过程。
summary(cars)
plot(pressure)
======================================
绪论:
概率?统计?
世界是随机的
模型 --概率--> 数据
数据 --统计--> 模型
常见概率模型
离散型:
binom:二项分布
geom:几何分布
hyper:超几何分布
nbinom:负二项分布
pois:泊松分布
连续型:
norm:正态分布
unif:均匀分布
exp:指数分布
gamma:伽马分布
beta:贝塔分布
t:t分布
f:F分布
chisq:卡方分布
R语言中的四种前缀
d:概率密度函数f
p:概率分布函数F
q:分位数F^(-1)
r: 随机数
一些例子
#扔100次硬币,恰好出现50次的概率
#dbinom(x, size, prob, log = FALSE)
dbinom(50,100,0.5)
pbinom(50,100,0.5)
pbinom(40,100,0.5)
qnorm(0.05)
qnorm(0.025)
#均匀分布的随机数
runif(10,0.1)
多元正态
library(mvtnorm)
mu <- c(1,-1)
sig <- matrix(c(1,0.5,0.5,1),2,2)
x <- rmvnorm(100,mu,sig)
x[1:10,]
plot(x=x[,1],y=x[,2])
常见统计量
均值;方差;标准差;中位数;四分位数
data("mtcars")
attach(mtcars) #如果存在多个数据集的时候,用attach()可能会造成误解;
mean(wt) #此时应用$来代替attach()。
var(wt)
sd(wt)
median(wt) #中位数对极端值不敏感
quantile(wt,0.25)
#自定义分位数
quantile(wt,c(0.1,0.25,0.5,0.75,0.9))
次序统计量
min(wt)
max(wt)
#排序,默认由小到大
wtinc <- sort(wt)
wtinc[1:10]
#设置“decreasing = T”,变成从大到小排列
wtdec <- sort(wt,decreasing = T)
wtdec[1:10]
summary(wt)
table(vs)
多元数据
#2是按列,1是按行
apply(mtcars,MARGIN = 2,mean)
apply(mtcars,MARGIN = 2,var)
#协方差矩阵
C <- cov(mtcars)
C
##相关性系数
cr <- cor(mtcars)
cr
======================================
假设检验和区间估计
summary(cars)
plot(pressure)
常用统计函数
常见假设检验和区间估计
两个几乎对应的概念
假设检验:用p值衡量数据与关于参数的原假设的差异程度。
区间估计:基于数据推断对应参数的一个可能区间。
如果区间包含对应原假设值 ---》接受原假设
如果区间不包含对应原假设值 ---》拒绝原假设
某种意义上来说区间估计的信息更多或更直接
但有些时候假设检验对应的区间估计难以得到或不存在。
均值检验:t test
单样本
data("mtcars")
attach(mtcars)
t.test(wt,mu=3) #默认是双尾检验
t.test(wt,mu=3,alternative = "greater") #指定为单尾检验
注:
1.理论上来说,t检验依赖于正态性建设
2.但由于中心极限,大样本也可以用
3.但多大是大呢?30?skewness!通过斜度来纠正
双样本数据
做t.test一般不考虑variance.equal=T
wt_am <- wt[am==0]
wt_mn <- wt[am==1]
t.test(wt_am,wt_mn)
#方差相同时的假设,power可能更高;更高更好;但一般不推荐
t.test(wt_am,wt_mn,var.equal = T)
sample size determination based on power fuction
功效函数:给定真实参数值和样本量,假设被拒绝的概率
由此反推,如果给定真实参数值和期望的假设被拒绝的概率,样本需要多少?
power.t.test(n=32,delta = abs(3.5 - 3),sd=sd(wt), sig.level = 0.05,power = NULL,type = "one.sample",alternative = "one.sided")
如果是双样本,标准差建议使用双样本标准差的平方平均
power.t.test(n=NULL,delta = abs(1 - 0),sd=sqrt(var(wt_am)+var(wt_mn)), sig.level = 0.05,power = 0.9,type = "two.sample",alternative = "two.sided")
配对t检验
为了提高功效,在实验条件允许的情况下,我们可以采集配对数据,每对数据其他协变量相近(统计变量法的统计版)
此时不应该使用之前的t test(over conservative,会造成更高的p值)
因为两组样本之间存在强相关性,从而带来更高的precison and power
试验设计优先。
x <- c(113,120,138,120,100,118,138,123)
y <- c(138,116,125,136,110,132,130,110)
cor(x,y)
t.test(x,y,paired = T)
t.test(x,y)
方差检验:F test
检验两组样本的方差是否相同
var.test(wt_am,wt_mn)
注:
1.这个检验基于正态性假设且及其敏感(如何检查正态性)
相关性检验
由试验设计决定
cor.test(x,y)
正态性检验
- 正态w检验法 shapiro-wilk
- qqplot
shapiro.test(wt)
qqnorm(wt)
qqline(wt)
用随机数的例子
shapiro.test(runif(100))
注:
1.检验和qq plot都很重要;后者更直观
2.还有一些非参的方法(KS,Peason),但就正态性这一问题来说,S-W的power更大。
Pearson卡方检验
单变量
(默认是)检验概率是否均匀
x <- c(210,312,170,85,223)
chisq.test(x)
注:
1.也可以设置成给定的非均匀概率
2.本质是刻画观测数据与期望数据的差距。
双变量(列连表)
检验两个变量是否独立。
x <- matrix(c(60,3,32,11),2,2)
x
chisq.test(x)
注:
1.本质是通过边际概率+独立性假设计算联合概率,进而计算期望频数并与数据比较
2.检验仅能说明存在相关性而非因果性
3.若想获得因果性,需要修改的并非是检验,而是试验设计(随机化!)
4.如果某一个单元格的期望频数小于5,则检验不可靠,R会给出warning。
针对期望频数小于5的列联表
Fisher.test
x <- matrix(c(4,5,18,6),2,2)
x
chisq.test(x)
fisher.test(x)
注:
1.通过考虑所有的排列组合去刻画概率(Lady tasting tea),因此是exact
2.在因果推断是一个重要的检验
3.可能会出现样本数量过大而无法考察所有的组合情况,此时需要Monte Carlo方法近似
参考链接:
1.https://space.bilibili.com/40285258/?spm_id_from=333.999.0.0
2.白话统计学
3.南方科大生物统计-https://www.bilibili.com/video/BV1Sf4y1N76S?p=10&spm_id_from=pageDriver