绘制R中自举值的分布

时间:2016-07-20 11:26:37

标签: r distribution density-plot

我需要使用95%置信区间拟合S形分布(y = 0~1),并将x值设为y=5%(称为hc5)。名为ZnOLC50.txt的原始输入数据文件:

LC50    Proportion
0.089    0.071428571
0.16    0.214285714
1.155    0.357142857
1.51    0.5
3.97    0.642857143
573.8    0.785714286
789    0.928571429


# Load data

>require(MASS)

>require(ggplot2)

>SSDZnOLC50<-read.delim("ZnOLC50.txt", header = TRUE)

>fitSSDZnOLC50<-fitdistr(SSDZnOLC50$LC50, 'lognormal')


# Extract hc5
>(hc5 <- qlnorm(0.05, meanlog = fitSSDZnOLC50$estimate[1], sdlog = fitSSDZnOLC50$estimate[2]))
[1] 0.01789181


>myboot <- function(fitSSDZnOLC50, p){

# resample from fitted distribution

>xr <- rlnorm(fitSSDZnOLC50$n, meanlog = fitSSDZnOLC50$estimate[1], sdlog = fitSSDZnOLC50$estimate[2])

# fit distribition to new data

>fitr <- fitdistr(xr, 'lognormal')
# return HCp

>hc5r <- qlnorm(p, meanlog = fitr$estimate[1], sdlog = fitr$estimate[2])
return(hc5r)
}


# Get 95% confidence interval
>set.seed(1234)
>hc5_boot <- replicate(1000, myboot(fitSSDZnOLC50, p = 0.05))

>quantile(hc5_boot, probs = c(0.025, 0.5, 0.975))

    2.5%          50%        97.5% 
0.0007278486 0.0370062459 1.4272168899 

然后我想根据生成的矩阵hc5绘制hc5_boot分布。首先我尝试了这个:

curve(dnorm(x,mean(hc5_boot),sd(hc5_boot)),xlim=c(-1,10),col="Red",lwd=1)

并获得

中显示的曲线

enter image description here

然后我也尝试了

> df <- as.data.frame(hc5_boot)

> ggplot(df, aes(x=hc5_boot)) + geom_density() + scale_x_continuous(limits=c(0,4))

并获得

中显示的曲线

enter image description here

然而,根据观察结果,这些曲线似乎都不适合2.5%的{​​{1}}分位数,因为当0.0007278486时密度值甚至不接近0。< / p>

所以我想知道出了什么问题,我应该怎么做。

1 个答案:

答案 0 :(得分:0)

听起来你想要绘制累积分布而不是密度函数。要执行此操作,请使用pnorm函数而不是生成pdf的dnorm。这是一个例子:

set.seed(1234)
mySample <- rnorm(100, 1, 5)
curve(pnorm(x,mean(mySample),sd(mySample)),xlim=c(-10,10),col="Red",lwd=1)

enter image description here