首页 > 代码库 > R语言假设检验实例整理
R语言假设检验实例整理
一、正态分布参数检验
例1. 某种原件的寿命X(以小时计)服从正态分布N(μ, σ)其中μ, σ2均未知。现测得16只元件的寿命如下:
159 280 101 212 224 379 179 264
222 362 168 250 149 260 485 170
问是否有理由认为元件的平均寿命大于255小时?
解:按题意,需检验
H0: μ ≤ 225 H1: μ > 225
此问题属于单边检验问题
可以使用R语言t.test
t.test(x,y=NULL,
alternative=c("two.sided","less","greater"),
mu=0,paired=FALSE,var.equal=FALSE,
conf.level=0.95)
其中x,y是又数据构成e向量,(如果只提供x,则作单个正态总体的均值检验,如果提供x,y则作两个总体的均值检验),alternative表示被则假设,two.sided(缺省),双边检验(H1:μ≠H0),less表示单边检验(H1:μ<μ0),greater表示单边检验(H1:μ>μ0),mu表示原假设μ0,conf.level置信水平,即1-α,通常是0.95,var.equal是逻辑变量,var.equal=TRUE表示两样品方差相同,var.equal=FALSE(缺省)表示两样本方差不同。
R代码:
X<-c(159, 280, 101, 212, 224, 379, 179, 264,
222, 362, 168, 250, 149, 260, 485, 170)
t.test(X,alternative = "greater",mu=225)
结果:
可见P值为0.257 > 0.05 ,不能拒绝原假设,接受H0,即平均寿命不大于225小时。
例2.在平炉上进行的一项试验以确定改变操作方法的建议是否会增加刚的得率,试验时在同一个平炉上进行的,每炼一炉刚时除操作方法外,其它条件都尽可能做到相同,先用标准方法炼一炉,然后用新方法炼一炉,以后交替进行,各炼了10炉,其得率分别为
标准方法 78.1 72.4 76.2 74.3 77.4 78.4 76.0 75.5 76.7 77.3
新方法 79.1 81.0 77.3 79.1 80.0 79.1 79.1 77.3 80.2 82.1
设这两个样本相互独立,且分别来自正态总体N(μ1, σ2)和N(μ2, σ2),其中μ1,μ2和σ2未知。问新的操作能否提高得率?(取α=0.05)
解1:根据题意,需要假设
H0: μ1 ≥ μ2 H1: μ1 < μ2
这里假定σ12=σ22=σ2,因此选择t.test,var.equal=TRUE
R代码:
X<-c(78.1,72.4,76.2,74.3,77.4,78.4,76.0,75.5,76.7,77.3)
Y<-c(79.1,81.0,77.3,79.1,80.0,79.1,79.1,77.3,80.2,82.1)
t.test(X,Y,var.equal = TRUE,alternative = "less")
结果:
可见P值<0.05,接受备择假设,即新的操作能够提高得率。
解2:
因为数据是成对出现的,所以采用成对数据t检验比上述的双样本均值检验更准确。所谓成对t检验就是Zi=Xi-Yi,再对Z进行单样本均值检验
R代码:
X<-c(78.1,72.4,76.2,74.3,77.4,78.4,76.0,75.5,76.7,77.3)
Y<-c(79.1,81.0,77.3,79.1,80.0,79.1,79.1,77.3,80.2,82.1)
t.test(X-Y, alternative = "less")
结果:
可见P值<0.05,接受备择假设,即新的操作能够提高得率。并且P值更小可见比双样本均值检验更准确
例3.对例2进行方差检验,方差是否相同
解:根据题意,需检验
H0: σ12 = σ22 H1: σ12 ≠ σ22
方差检验可以用var.test
var.test(x, y, ratio = 1,
alternative = c("two.sided", "less", "greater"),
conf.level = 0.95, ...)
x,y是来自两样本数据构成的向量,ratio是方差比的原假设,缺省值为1.alternative是备择假设,two.sided表示双边检验(H1:σ12/σ22<ratio),greater表示单边检验(H1:σ12)
R代码:
X<-c(78.1,72.4,76.2,74.3,77.4,78.4,76.0,75.5,76.7,77.3)
Y<-c(79.1,81.0,77.3,79.1,80.0,79.1,79.1,77.3,80.2,82.1)
var.test(X,Y)
结果:
可见P值为0.559>0.05,接受原假设,认为两者方差相同
二、二项分布参数检验
例4.有一批蔬菜种子的平均发芽率p0=0.85,现随即抽取500粒,用种衣剂进行浸种处理,结果有445粒发芽。试检验种衣剂对种子发芽率有无效果。
解:根据题意,所检验的问题为
H0:p=p0=0.85, H1:p≠p0
可以用R语言的binom.test
binom.test(x, n, p = 0.5,
alternative = c("two.sided", "less", "greater"),
conf.level = 0.95)
其中x是成功的次数;或是一个由成功数和失败数组成的二维向量。n是试验总数,当x是二维向量时,此值无效。P是原假设的概率。
R语言代码:
binom.test(445,500,p=0.85)
结果:
可知P值0.01207<0.05,拒绝原假设,说明种衣剂对种子的发芽率有显著效果。
三、其它重要的非参数检验法
3.1.理论分布完全已知的情况下,进行皮尔森卡方拟合优度检验
例5.某消费者协会为了确定市场上消费者对5种品牌啤酒的喜好情况,随即抽取了1000名啤酒爱好者作为样品进行试验:每个人得到5种品牌的啤酒各一瓶,但未标明牌子。这5种啤酒分别按着A、B、C、D、E字母的5张纸片随即的顺序送给每一个人。下表是根据样本资料整理的各种品牌啤酒爱好者的频数分布。试根据这些数据判断消费者对这5种品牌啤酒的爱好有无明显差异?
最喜欢的牌子 A B C D E
人数X 210 312 170 85 223
解:如果消费者对5种品牌的啤酒无显著差异,那么,就可以认为喜好这5种拍品啤酒的人呈均匀分布,即5种品牌啤酒爱好者人数各占20%。据此假设
H0:喜好5种啤酒的人数分布均匀
可以使用Pearson χ2拟合优度检验,R语言中调用chisq.test(X)
chisq.test(x, y = NULL, correct = TRUE,
p = rep(1/length(x), length(x)), rescale.p = FALSE,
simulate.p.value = http://www.mamicode.com/FALSE, B = 2000)
其中x是由观测数据构成的向量或者矩阵,y是数据向量(当x为矩阵时,y无效)。correct是逻辑变量,标明是否用于连续修正,TRUE(缺省值)表示修正,FALSE表示不修正。p是原假设落在小区间的理论概率,缺省值表示均匀分布,rescale.p是逻辑变量,选择FALSE(缺省值)时,要求输入的p满足和等于1;选择TRUE时,并不要求这一点,程序将重新计算p值。simulate.p.value逻辑变量(缺省值为FALSE),当为TRUE,将用仿真的方法计算p值,此时,B表示仿真的此值。
R语言代码:
X<-c(210, 312, 170, 85, 223)
chisq.test(X)
结果:
例6.为研究电话总机在某段时间内接到的呼叫次数是否服从Poisson分布,现收集了42个数据,如下表所示,通过对数据的分析,问能否确认在某段时间内接到的呼叫次数服从Poisson分布(α = 0.1)?
R语言代码:
#输入数据
X<-0:6; Y<-c(7, 10, 12, 8, 3, 2, 0)
#计算理论分布,其中mean(rep(X,Y))为样本均值
q<-ppois(X, mean(rep(X,Y))); n<-length(Y)
p[1]<-q[1]; p[n]<-1-q[n-1]
for (i in 2:(n-1))
p[i]<-q[i]-q[i-1]
#作检验
chisq.test(Y,p=p)
提示结果可能不准确,因为皮尔森卡方拟合由度检验要求分组后每组的频数至少要大于等于5,而后三组中出现的频率分别为3,2,0,均小于5,解决问题的方法是将后三组合成一组,此时的频数为5,满足要求,重写R语言代码
R语言代码:
#输入数据
X<-0:6; Y<-c(7, 10, 12, 8, 3, 2, 0)
#计算理论分布,其中mean(rep(X,Y))为样本均值
q<-ppois(X, mean(rep(X,Y))); n<-length(Y)
p<-rep(0,n)
p[1]<-q[1]; p[n]<-1-q[n-1]
for (i in 2:(n-1))
p[i]<-q[i]-q[i-1]
#重新分组
Z<-c(7, 10, 12, 8, 5)
#重新计算理论分布
n<-length(Z); p<-p[1:n-1]; p[n]<-1-q[n-1]
#作检验
chisq.test(Z,p=p)
可见P值>>0.1,可以确认在某段时间之内接到的电话次数服从Poisson 分布
3.2.理论分布依赖于若干个未知参数的情况,Kolmogorov-Smirnov K 检验
例7.对一台设备进行寿命检验,记录10次无故障工作时间,并按从小到大的次序排列如下:(单位)
420 500 920 1380 1510 1650 1760 2100 2300 2350
试用Kolmogorov-Smirnov K 检验方法检验此设备无故障工作时间分布是否服从λ = 1/1500的指数分布?
ks.test(x, y, ...,
alternative = c("two.sided", "less", "greater"),
exact = NULL) # x
R语言假设检验实例整理