需要算法来计算数据是从正态分布还是对数正态分布采样的相对可能性


13

假设您有一组值,并且想知道是从高斯(正态)分布中抽样还是从对数正态分布中抽样?

当然,理想情况下,您应该对总体或实验误差的来源有所了解,因此会有更多有用的信息来回答问题。但是在这里,假设我们只有一组数字而没有其他信息。哪个更有可能:是从高斯抽样还是从对数正态分布抽样?可能性更高?我希望的是在两个模型之间进行选择的算法,并希望量化每个模型的相对可能性。


1
尝试对自然界/已出版文献中的分布进行特征化描述可能是一个有趣的练习。再说一遍-它永远不会是一个有趣的练习。对于认真的治疗,您可以寻找一种理论证明您的选择是正确的,或者是给与足够的数据可视化并测试每种候选分布的拟合优度。
JohnRos 2013年

3
如果要从经验中概括一下,我会说正偏分布是最常见的类型,尤其是对于那些具有中心意义的响应变量,对数正态分布比正态分布更常见。1962年的一卷科学家推测,由著名的统计学家IJ Good编辑,其中包括一个匿名文章“ Bloggins的工作规则”,其中包含断言“对数正态分布比正态更正态”。(其他几条规则都具有很强的统计意义。)
Nick Cox

我对您的问题的理解似乎与JohnRos和anxoestevez不同。对我来说,您的问题听起来像是关于普通模型选择的问题,即计算,其中是正态分布或对数正态分布,而是您的数据。如果您不是要选择的型号,可以澄清一下吗?M DP(MD)MD
卢卡斯

@lucas我认为您的解释与我的没有太大不同。无论哪种情况,您都需要先验假设。
anxoestevez

2
为什么不只计算广义似然比并在偏爱于对数正态时提醒用户?
Scortchi-恢复莫妮卡

Answers:


7

您可以通过最大似然拟合每个分布(正态或对数正态)与数据,然后比较每个模型下的对数似然度来对分布类型做出最佳猜测-具有最高对数似然度的模型是最佳拟合。例如,在R中:

# log likelihood of the data given the parameters (par) for 
# a normal or lognormal distribution
logl <- function(par, x, lognorm=F) {
    if(par[2]<0) { return(-Inf) }
    ifelse(lognorm,
    sum(dlnorm(x,par[1],par[2],log=T)),
    sum(dnorm(x,par[1],par[2],log=T))
    )
}

# estimate parameters of distribution of x by ML 
ml <- function(par, x, ...) {
    optim(par, logl, control=list(fnscale=-1), x=x, ...)
}

# best guess for distribution-type
# use mean,sd of x for starting parameters in ML fit of normal
# use mean,sd of log(x) for starting parameters in ML fit of lognormal
# return name of distribution type with highest log ML
best <- function(x) {
    logl_norm <- ml(c(mean(x), sd(x)), x)$value
        logl_lognorm <- ml(c(mean(log(x)), sd(log(x))), x, lognorm=T)$value
    c("Normal","Lognormal")[which.max(c(logl_norm, logl_lognorm))]
}

现在从正态分布生成数字并通过ML拟合正态分布:

set.seed(1)
x = rnorm(100, 10, 2)
ml(c(10,2), x)

产生:

$par
[1] 10.218083  1.787379

$value
[1] -199.9697
...

比较对数可能性对正态分布和对数正态分布的ML拟合:

ml(c(10,2), x)$value # -199.9697
    ml(c(2,0.2), x, lognorm=T)$value # -203.1891
best(x) # Normal

尝试使用对数正态分布:

best(rlnorm(100, 2.6, 0.2)) # lognormal

取决于n,均值和标准差,分配将不是完美的:

> table(replicate(1000, best(rnorm(500, 10, 2))))

Lognormal    Normal 
        6       994 
> table(replicate(1000, best(rlnorm(500, 2.6, 0.2))))

Lognormal    Normal 
      999         1 

1
您无需从数值上找到正态或对数正态的最大似然参数估计值(尽管它显示了如何将该思想推广到其他分布的比较中)。除此之外,这是非常明智的方法。
Scortchi-恢复莫妮卡

我几乎没有使用R或最大似然的概念,所以这是一个基本问题。我知道我们无法从将正态分布拟合到数据与将数据拟合到数据日志中来比较AIC(或BIC),因为AIC或BIC无法比较。一个人需要将两个模型拟合到一组数据(不进行任何转换;不排除异常值等),并且对数据进行转换将改变AIC或BIC,而不会使比较伪造。ML呢?这个比较合法吗?
Harvey Motulsky

我们找到最适合数据的正态分布和对数正态分布,然后假设它们来自那些分布(似然或p(X|\theta)),计算观察到数据的概率。我们不转换数据。我们打印出观测数据概率最高的分布。这种方法是合法的,但缺点是我们无法根据给定数据推断模型p(M|X)的概率,即数据来自正态分布与对数正态分布的概率(例如,p(正态)= 0.1,p(对数正态)= 0.9)与贝叶斯方法不同。
晶圆薄

1
@Harvey确实足够,但是无关紧要-您问过关于将正态分布与对数正态分布拟合到相同数据的问题,而这就是whannymahoots的回答。由于两个模型的可用参数数量相同,因此比较AIC或BIC减少了比较对数似然的可能性。
Scortchi-恢复莫妮卡

@wannymahoots在这种情况下,贝叶斯方法的任何合理先验-依靠估计软件用户试图拟合正常或对数-正常数据的相对概率-都将变得毫无根据,以至于将给该方法带来类似的结果仅基于可能性。
Scortchi-恢复莫妮卡

11

M{Normal,Log-normal}X={x1,...,xN}

P(MX)P(XM)P(M).

困难的部分是获得边际可能性

P(XM)=P(Xθ,M)P(θM)dθ.

p(θM)XY={logx1,...,logxNYX

P(XM=Log-Normal)=P(YM=Normal)i|1xi|.

P(θM)P(σ2,μM=Normal)P(M)

例:

P(μ,σ2M=Normal)m0=0,v0=20,a0=1,b0=100

在此处输入图片说明

根据Murphy(2007)(等式203),正态分布的边际似然由

P(XM=Normal)=|vN|12|v0|12b0a0bnaNΓ(aN)Γ(a0)1πN/22N

aN,bN,vNP(μ,σ2X,M=Normal)

vN=1/(v01+N),mN=(v01m0+ixi)/vN,aN=a0+N2,bN=b0+12(v01m02vN1mN2+ixi2).

对于对数正态分布,我使用相同的超参数,

P(XM=Log-normal)=P({logx1,...,logxN}M=Normal)i|1xi|.

0.1P(M=Log-normal)=0.1

在此处输入图片说明

后部的行为是这样的:

在此处输入图片说明

N

在实施方程式时,最好使用对数密度而不是密度。但是否则应该很简单。这是我用来生成绘图的代码:

https://gist.github.com/lucastheis/6094631


4

听起来您正在寻找一种实用的方法来帮助可能不是专业统计学家的分析人员,他们需要一些东西来促使他们进行应采用的标准探索性技术,例如查看qq图,密度图等。

在这种情况下,为什么不简单地对原始数据进行正态性检验(Shapiro-Wilk或其他方法),然后对对数转换后的数据进行正态性检验,如果第二个p值较高,则为分析人员考虑使用对数变换提出一个标志。 ?另外,还可以吐出原始数据和转换后数据的密度线图和qqnorm图的2 x 2图形。

从技术上讲,这不会回答您有关相对可能性的问题,但我想知道这是否就是您所需要的。


聪明。也许这就足够了,并且无需解释似然计算....谢谢。
Harvey Motulsky
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.