美文网首页统计与科研
R语言求95%置信区间

R语言求95%置信区间

作者: 花田里犯了错_cbeb | 来源:发表于2019-03-08 18:29 被阅读0次

    标准正态分布下mean=0,sd=1
    95%置信区间为[mean-1.96*sd,mean+1.96*sd]
    即左侧概率和为97.5%的数据减去左侧概率和为2.5%的数据,期间的数据概率即为95%的置信区间。那为什么是1.96倍呢,先看两个函数

    dnorm

    dnorm中的d表示densitynorm表示正态分布,这个函数是正态分布的概率密度(probability density)函数
    给定x,μ和σ后,dnorm()这个函数返回的就是会返回上面的这个公式的值,如果是标准正态分布,dnorm(n,mean=0,sd=1)输出就是当取n时的概率值,就是正态分布图当x=n时y的值。

    > dnorm(0,mean=0,sd=1)
    [1] 0.3989423
    > pnorm(0,mean=0,sd=1)
    [1] 0.5
    

    pnorm

    pnorm函数中的p表示Probability,它的功能是,在正态分布的PDF曲线上,返回从负无穷到q的积分,其中这个q指的是一个Z-score,x=(mean+Z-score*sd)时的Z-score。现在我们大概就可以猜测出pnorm(0)的值是0.5,因为在标准正态分布曲线上,当Z-score等于0时,这个点正好在标准正态分布曲线的正中间,那么从负无穷到0之间的曲线面积就是整个标准正态分布曲线下面积的一半,pnorm(n,mean=0,sd=1)输出从负无穷到mean+sd*n的概率总和

    > pnorm(1.96,mean=0,sd=1)
    [1] 0.9750021
    > pnorm(-1.96,mean=0,sd=1)
    [1] 0.0249979
    > pnorm(0,mean=0,sd=1)
    [1] 0.5
    > pnorm(3,mean=0,sd=1)
    [1] 0.9986501
    > pnorm(3,mean=0,sd=1)-pnorm(-3,mean=0,sd=1)
    [1] 0.9973002
    > pnorm(1.96,mean=0,sd=1)-pnorm(-1.96,mean=0,sd=1)
    [1] 0.9500042
    

    用的最多的是3倍sd,相当于在正态分布落在3倍sd区间的概率为99.73002%,落在1.96倍sd区间的概率为95.00042%

    那怎么求标准正态分布下0.975%,0.025%对应的Z-score呢,利用qnorm函数,非标准正态下不能这么求,因为qnorm函数输入的是分位值。或者查询正态分布表。

    > qnorm(0.975,mean=0,sd=1)
    [1] 1.959964
    > qnorm(0.025,mean=0,sd=1)
    [1] -1.959964
    

    rnorm

    rnorm()函数的功能用于生成一组符合正态分布的随机数,在学习各种统计学方法时,rnorm这个函数应该是最常用的,它的参数有n,mean,sd,表示随机生成n个正态分布均值为mean标准差为sd时的一组数据,如下所示:

    > rnorm(10)
     [1] -0.2415323  1.9931196 -0.6226402  0.6725090 -0.8638580 -1.3569382
     [7]  0.4761234  0.6999504  0.4408161  0.3819532
    > rnorm(
    n=     mean=  sd=    
    > rnorm(n=20,mean=1,sd=2)
     [1] -0.02763552  2.96251058  3.16586194  1.45967947  3.03086226  3.09190195
     [7]  0.46527166  3.69744544  1.15093511  0.69325058 -0.02883520  3.17007355
    [13] -2.22805708  2.54630482  3.73819504  3.41704757 -0.04029577  0.68659838
    [19]  1.04733424  4.68370675
    
    example.png

    当出现如图所示的分布,近似正态分布,但是左右胖瘦不太一致时,这是现实中普遍存在的分布情况,如高通量测序过程中的碱基GC分布,这种情况求95%区间的方法

    conf_func = function(data,col){
        set = density(data[,col])
        max_midu = set$x[which.max(set$y)]
        right = data[data[,col] > max_midu,col]
        left = data[data[,col] < max_midu,col]
        max = max_midu + sd(c(right,max_midu*2-right))*1.96
        min = max_midu - sd(c(left,max_midu*2-left))*1.96
        return(list(set,max_midu,min,max,max(set$y)))
        }
    

    -先求取左侧部分的sd,但是要补足右侧对称的数据
    -同样求右侧部分的sd,同时补足左侧对称的数据
    -用最高密度值时max_gc值加减1.96倍左右侧的sd
    做出效果如图


    example.png

    相关文章

      网友评论

        本文标题:R语言求95%置信区间

        本文链接:https://www.haomeiwen.com/subject/sefdpqtx.html