200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > R语言_非参数检验

R语言_非参数检验

时间:2018-11-01 09:34:25

相关推荐

R语言_非参数检验

皮尔森拟合优度卡方检验ks检验列联表数据独立性检验符号检验秩相关检验wilcoxon检验参考资料

皮尔森拟合优度卡方检验

该检验的主要目的是:

由样本评估群体是否符合某种分布情况。

假设H0:群体具有某分布

备选假设H1:群体不具有改分布

思路:将数轴分为m组,样本数据会落入不同的组内。根据假设H0的分布,我们可以确定各个组的预期个数,然后与各个组的实际个数一起构造统计量K。

结论:当n趋于无穷时,k收敛于m-1的卡方分布。

#如果是均匀分布,则没有明显差异 。这里组其实已经分好了,直接用 。#H0:人数服从均匀分布x <- c(210,312,170,85,223)n <- sum(x); m <- length(x)p <- rep(1/m,m)K <- sum((x-n*p)^2/(n*p)); K #计算出K值[1] 136.49p <- 1-pchisq(K,m-1); p #计算出p值,0拒绝假设

在R语言中 chisq.test(),可以完成拟合优度检验。默认就是检验是否为均匀分布,如果是其他分布,需要自己分组,并在参数p中指出。上面题目的解法

chisq.test(x)

其他例子如下:

#例:用这个函数检验其他分布。 抽取31名学生的成绩,检验是否为正态分布。#小于0.05,拒绝正态分布的假说x <- c(25,45,50,54,55,61,64,68,72,75,75,78,79,81,83,84,84,84,85,86,86,86,87,89,89,89,90,91,91,92,100)A = table(cut(x,breaks=c(0,69,79,89,100))) #对样本数据进行分组Ap = pnorm(c(70,80,90,100),mean(x),sd(x)) #获得理论分布概率值p = c(p[1],p[2]-p[1],p[3]-p[2],1-p[3])pchisq.test(A,p=p)#例:大麦杂交后关于芒性的比例应该是 无芒:长芒:短芒=9:3:4 。 #我们的实际观测值是335:125:160 。请问观测值是否符合预期?p <- c(9/16,3/16,4/16)x <- c(335,125,160)chisq.test(x,p=p)

注意:

1. 分组的时候每组的频数应该大于5。

2. 如果理论分布依赖于多个未知参数,则先用样本得到参数的估计值,然后构造统计量K。这个时候K的自由度减少未知参数的数量个数。

ks检验

该检验的目的是:

1. 对于单样本,检验其是否符合某种分布

2. 对于双样本,检验其是否属于同一分布

ks检验,理论上可以检验任何分布。

ks检验,既可以做当样本检验,也可以做双样本检验。

#单样本检验#记录一台设备无故障工作时常,并从小到大排序#420 500 920 1380 1510 1650 1760 2100 2300 2350。#问这些时间是否服从lambda=1/1500的指数分布?x <- c(420,500,920,1380,1510,1650,1760,2100,2300,2350)ks.test(x,"pexp",1/1500)#双样本检验#有两个分布,分别抽样了一些数据,问他们是否服从相同的分布。X<-scan()Y<-scan()x = runif(100)y = runif(100)ks.test(x,y)

列联表数据独立性检验

chisq.test() 同样可以做列联表数据独立性检验,只要将数据写成矩阵的形式就可以了。

#根据列联表判断吸烟与致癌是否有关系#p值很小,拒绝无关系的假设,应该有关系x = matrix(c(60,3,32,11),nrow=2)chisq.test(x)#如果一个单元格内的数据小于5,那么pearson检验无效。#此时应做Fisher精确检验fisher.test(x)

此外,还有针对配对数据的McNemar检验

符号检验

当我们以中位数将数据分为两边,一边为正,一边为负,那么样本出现在两边的概率应该都为1/2。因此,使用p=0.5的二项检验就可以做符号检验了。

#统计了66个城市的生活花费指数,北京的生活花费指数为99 。#请问北京是否位于中位数以上。x = c(66, 75, 78, 80, 81, 81, 82, 83, 83, 83, 83,84, 85, 85, 86, 86, 86, 86, 87, 87, 88 ,88,88, 88 ,88 ,89 ,89 ,89 ,89 ,90 ,90 ,91, 91,91, 91, 92, 93, 93, 96, 96, 96, 97, 99, 100,101 ,102, 103, 103, 104, 104, 104, 105, 106, 109, 109,110 ,110 ,110 ,111 ,113 ,115 ,116 ,117, 118, 155 ,192)mean(x)binom.test(sum(x>99),length(x),p=0.5,alternative = "less")

符号检验也可以用来检验两个总体是否存在明显差异。要是没有差异,那么两者之差为正的概率为0.5。

#统计两种饲料养猪的增重情况,判断是否有差异#其实用均值更好#没有明显差异y <- c(19,32,21,19,25,31,31,26,30,25,28,31,25,25)x <- c(25,30,28,23,27,35,30,28,32,29,30,30,31,16)binom.test(sum(x<y),length(x),p=0.5,alternative = "two.sided") #并不推荐这么检验var.test(x,y) #方差相等t.test(x,y,var.equal = T) #没有显著差异

#p<0.1 接受备择假设 认为有差异binom.test(3,12,alternative = "less",conf.level = 0.9)

秩相关检验

在R语言中,rank()函数用来求秩,如果向量中有相同的数据,求出的秩可能不合我们的要求,对数据做微调即可

x <- c(1.2,0.8,-3.1,2,1.2)rank(x)x <- c(1.2,0.8,-3.1,2,1.2+1e-5)rank(x)

利用秩可以做相关性检验。具体参考参数估计。

cor.test( method=”spearman,kendell”)

wilcoxon检验

符号检验只考虑了符号,没有考虑要差异的大小。wilcoxon解决了这个问题。

假设,数据是连续分布的,数据是关于中位数对称的。

#单样本检测#某电池厂商生产的电池中位数为140.#现从新生产的电池中抽取20个测试。请问电池是否合格x <- c(137,140,138.3,139,144.3,139.1,141.7,137.3,133.5,138.2,141.1,139.2,136.5,136.5,135.6,138,140.9,140.6,136.3,134.1)wilcox.test(x,mu=140,alternative = "less",exact=F,correct=F,confi.int=T)#配对双样本检测。#在农场中选择了10块农田,将每一块农田分成2小块,分别用不同的化肥种菜。#请问化肥会不会提高蔬菜产量。x <- c(459,367,303,392,310,342,421,446,430,412)y <- c(414,306,321,443,281,301,353,391,405,390)wilcox.test(x-y,alternative = "greater")#非配对双样本检测#10名非铅工人和10名铅工人的血铅值是否存在显著差异x <- c(24,26,29,34,43,58,63,72,87,101)y <- c(82,87,97,121,164,208,213)wilcox.test(x,y,alternative="less")

x <- rep(1:4,c(62,41,14,11))y <- rep(1:4,c(20,37,16,15))wilcox.test(x,y)

参考资料

非参数检验

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。