gpt4 book ai didi

r - 将对数正态分布拟合到 R 中的截断数据

转载 作者:行者123 更新时间:2023-12-01 18:58:54 28 4
gpt4 key购买 nike

作为一个简短的背景,我有兴趣描述火灾大小的分布,该分布被认为遵循对数正态分布(许多小火灾和很少的大火灾)。对于我的特定应用程序,我只对特定大小范围内的火灾感兴趣(>最小,<最大)。因此,我尝试将对数正态分布拟合到两端均已审查的数据集。本质上,我想找到最适合审查之前的完整分布的对数正态分布参数(mu 和 sigma)。我可以考虑到我只查看分布的一部分来拟合分布吗?

我做了一些实验,但被难住了。这是一个例子:

# Generate data #
D <- rlnorm(1000,meanlog = -0.75, sdlog = 1.5)
# Censor data #
min <- 0.10
max <- 20
Dt <- D[D > min]
Dt <- Dt[Dt <= max]

如果我使用 fitdistr (MASS) 或 fitdist (fitdistrplus) 拟合非审查数据 (D),我显然会得到与我输入的参数值大致相同的参数值。但是,如果我拟合删失数据 (Dt),则参数值将不匹配,如预期的那样。问题是如何合并已知的审查。我在其他地方看到了一些在 fitdistr 中使用 upper 和 lower 的引用,但我遇到了一个错误,我不确定如何解决:

> fitt <- fitdist(Dt, "lognormal", lower = min, upper = max)
Error in fitdist(Dt, "lognormal", lower = min, upper = max) :
The dlognormal function must be defined

我将不胜感激任何建议,首先是关于这是否是适合审查分布的适当方式,如果是的话,如何定义 dlognormal 函数以便我可以完成这项工作。谢谢!

最佳答案

您的数据未经审查(这意味着间隔之外的观察结果在那里,但你不知道它们的确切值)但被截断(这些观察结果已被丢弃)。

您只需向 fitdist 提供密度和累积分布函数您的截断分布。

library(truncdist)
dtruncated_log_normal <- function(x, meanlog, sdlog)
dtrunc(x, "lnorm", a=.10, b=20, meanlog=meanlog, sdlog=sdlog)
ptruncated_log_normal <- function(q, meanlog, sdlog)
ptrunc(q, "lnorm", a=.10, b=20, meanlog=meanlog, sdlog=sdlog)

library(fitdistrplus)
fitdist(Dt, "truncated_log_normal", start = list(meanlog=0, sdlog=1))
# Fitting of the distribution ' truncated_log_normal ' by maximum likelihood
# Parameters:
# estimate Std. Error
# meanlog -0.7482085 0.08390333
# sdlog 1.4232373 0.0668787

关于r - 将对数正态分布拟合到 R 中的截断数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16947799/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com