我如何获得 R 中的函数“fitdistcens”以将分布准确地拟合到审查和未审查数据的混合中?

问题描述

我需要将对数正态分布、帕累托分布和广义帕累托分布拟合到一些经验数据,这些数据是审查数据和未审查数据的组合。我尝试使用 fitdistrplus 包中的函数 fitdistcens。

生成了一些由删失数据和未删失数据组成的人工数据(我的 R 代码如下)。

截尾数据可以描述如下:100 到 200 之间有 5000 个值,200 到 500 之间有 700 个值,500 到 1000 之间有 600 个值,依此类推。我们没有关于这些值的更多信息。删失数据的所有 bin 的完整列表是:

[100,200]

[200,500]

[500,1000]

[1000,2000]

[2000,5000]

[5000,10000]

[10000,20000]

[20000,100000]

未经删失的数据是通过生成 70 个均值为 0、标准差为 1 的正态分布随机变量,然后对这些变量进行平方,然后乘以 50000,最后加上 20000 来创建的。所以这些是我们确切知道的值。

然后,我使用“fitdistrplus”包中的 R 中的“fitdistcens”函数将对数正态分布和帕累托分布拟合到合并的删失和未删失数据中。然后我创建了 QQ 图、PP 图,并绘制了经验和理论 CDF 的比较图,以评估分布的拟合优度。

当我查看上面提到的图时,我看到在 PP 图和 QQ 图中,有一个矩形代表上面的所有 bin,除了 bin [20000,100000]。我想知道是否有人可以阐明这些经验分布的图形表示是如何构建的。

[QQ图][1]

library(fitdistrplus)

# Creating artificial censored data

left <- c(100,200,500,1000,2000,5000,10000,20000)
right <- c(200,20000,100000)
freqs <- c(5000,700,600,300,150,100,50,25)
df <- data.frame(left,right)

df_censored <- df[rep(seq_len(nrow(df)),times=freqs),]

# Create artificial uncensored data

left <- 20000 + 50000*rnorm(70)^2
right <- left

df_uncensored <- data.frame(left,right)

df_cens_and_uncens <- rbind(df_censored,df_uncensored)

dist_fit_lnorm <- fitdistcens(df_cens_and_uncens,"lnorm")

distr_to_plot <-list(lnorm = dist_fit_lnorm)

# plot function to compare empirical and fitted cdfs
cdfcompcens(distr_to_plot,xlim = c(0,35000),plotstyle = "ggplot")

# pp plot for the different distribution to check goodness of fit
ppcompcens(distr_to_plot,plotstyle = "ggplot")

# qq plot for the different distribution to check goodness of fit
qqcompcens(distr_to_plot,plotstyle = "ggplot",100000))

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)