
R语言假设检验.docx
11页R语言 假设检验(非参数) 学习笔记1.皮尔森拟合优度塔防检验假设H0:总体具有某分布F 备择假设H1:总体不具有该分布我们将数轴分成若干个区间,所抽取的样本会分布在这些区间中在原假设成立的条件下,我们便知道每个区间包含样本的个数的期望值用实际值Ni 与期望值Npi可以构造统计量K 皮尔森证明,n趋向于无穷时,k收敛于m-1的塔防分布m为我们分组的个数有了这个分布,我们就可以做假设检验例:?12345678#如果是均匀分布,则没有明显差异 这里组其实已经分好了,直接用 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.49> p <- 1-pchisq(K,m-1); p #计算出p值[1] 0 #拒绝原假设在R语言中 chisq.test(),可以完成拟合优度检验默认就是检验是否为均匀分布,如果是其他分布,需要自己分组,并在参数p中指出上面题目的解法?123456chisq.test(x) Chi-squared test for given probabilities data: xX-squared = 136.49, df = 4, p-value < 2.2e-16 #同样拒绝原假设。
例,用这个函数检验其他分布 抽取31名学生的成绩,检验是否为正态分布123456789101112131415> 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))) #对样本数据进行分组> A (0,69] (69,79] (79,89] (89,100] 8 5 13 5 > p <- 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])> chisq.test(A,p=p) Chi-squared test for given probabilities data: AX-squared = 8.334, df = 3, p-value = 0.03959 #检验结果不是正态的。
例:大麦杂交后关于芒性的比例应该是 无芒:长芒:短芒=9:3:4 我们的实际观测值是335:125:160 请问观测值是否符合预期??12345678> p <- c(9/16,3/16,4/16)> x <- c(335,125,160)> chisq.test(x,p=p) Chi-squared test for given probabilities data: xX-squared = 1.362, df = 2, p-value = 0.5061 在分组的时候要注意,每组的频数要大于等于5.如果理论分布依赖于多个未知参数,只能先由样本得到参数的估计量然后构造统计量K,此时K的自由度减少位置参数的数量个 2.ks检验R语言中提供了ks.test()函数,理论上可以检验任何分布他既能够做单样本检验,也能做双样本检验单样本 例:记录一台设备无故障工作时常,并从小到大排序420 500 920 1380 1510 1650 1760 2100 2300 2350问这些时间是否服从拉姆达=1/1500的指数分布??12345678> x <- c(420,500,920,1380,1510,1650,1760,2100,2300,2350)> ks.test(x,"pexp",1/1500) One-sample Kolmogorov-Smirnov test data: xD = 0.3015, p-value = 0.2654alternative hypothesis: two-sided双样本 例:有两个分布,分别抽样了一些数据,问他们是否服从相同的分布。
12345678910111213141516171819> X<-scan()1: 0.61 0.29 0.06 0.59 -1.73 -0.74 0.51 -0.56 0.3910: 1.64 0.05 -0.06 0.64 -0.82 0.37 1.77 1.09 -1.2819: 2.36 1.31 1.05 -0.32 -0.40 1.06 -2.4726: Read 25 items> Y<-scan()1: 2.20 1.66 1.38 0.20 0.36 0.00 0.96 1.56 0.4410: 1.50 -0.30 0.66 2.31 3.29 -0.27 -0.37 0.38 0.7019: 0.52 -0.7121: Read 20 items> ks.test(X,Y) Two-sample Kolmogorov-Smirnov test #原假设为 他们的分布相同 data: X and YD = 0.23, p-value = 0.5286alternative hypothesis: two-sided 3.列联表数据独立性检验chisq.test() 同样可以做列联表数据独立性检验,只要将数据写成矩阵的形式就可以了。
1234567891011> x <- matrix(c(60,3,32,11),nrow=2) #参数correct是逻辑变量 表示带不带连续矫正> x [,1] [,2][1,] 60 32[2,] 3 11> chisq.test(x) Pearson's Chi-squared test with Yates' continuity correction data: xX-squared = 7.9327, df = 1, p-value = 0.004855 #拒绝假设 认为有关系如果一个单元格内的数据小于5 那么做pearson检验是无效的此时应该使用Fisher精确检验1234567891011121314151617> x <- matrix(c(4,5,18,6),nrow=2)> x [,1] [,2][1,] 4 18[2,] 5 6> fisher.test(x) Fisher's Exact Test for Count Data data: xp-value = 0.121 alternative hypothesis: true odds ratio is not equal to 195 percent confidence interval: 0.03974151 1.76726409 #p值大与0.05, 区间估计包含1,所以认为没有关系。
sample estimates:odds ratio 0.2791061McNemar检验这个不是相关性检验是配对卡放检验也就是说,我们是对一个样本做了两次观测,本身不是独立的样本而是相关的样本,而我们检验的是变化的强度H0:频数没有发生变化1用法就不举例了单元格内数字不得小于5.n要大于100. 4.符号检验当我们以中位数将数据分为两边,一边为正,一边为负,那么样本出现在两边的概率应该都为1/2因此,使用p=0.2的二项检验就可以做符号检验了例:统计了66个城市的生活花费指数,北京的生活花费指数为99 请问北京是否位于中位数以上123456789101112131415161718192021> x <- scan()1: 66 75 78 80 81 81 82 83 83 83 8312: 84 85 85 86 86 86 86 87 87 88 8823: 88 88 88 89 89 89 89 90 90 91 9134: 91 91 92 93 93 96 96 96 97 99 10045: 101 102 103 103 104 104 104 105 106 109 10956: 110 110 110 111 113 115 116 117 118 155 19267: Read 66 items> binom.test(sum(x>99),length(x),alternative="less") Exact binomial test data: sum(x > 99) and length(x)number of successes = 23, number of trials = 66, p-value = 0.009329alternative hypothesis: true probability of success is less than 0.595 percent confidence interval: 0.0000000 0.4563087sample estimates:probability of success 0.3484848 #北京位于中位数下。
符号检验也可以用来检验两个总体是否存在明显差异要是没有差异,那么两者之差为正的概率为0.5.例:?1234567891011121314> 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












