在R中拟合t分布:缩放参数


17

我如何拟合t分布的参数,即与正态分布的“均值”和“标准偏差”相对应的参数。我假设它们被称为t分布的“均值”和“缩放/自由度”?

以下代码通常会导致“优化失败”错误。

library(MASS)
fitdistr(x, "t")

我必须先缩放x还是转换成概率?如何做到最好?


2
它失败不是因为您必须缩放参数,而是因为优化器失败。请参阅下面的答案。
谢尔盖·布什曼诺夫

Answers:


16

fitdistr使用最大似然和优化技术来查找给定分布的参数。有时,尤其是对于t分布,如@ user12719所注意到的,优化形式为:

fitdistr(x, "t")

失败并显示错误。

在这种情况下,您应该通过提供起点和下限来开始寻找最佳参数,从而为优化器提供帮助:

fitdistr(x, "t", start = list(m=mean(x),s=sd(x), df=3), lower=c(-1, 0.001,1))

请注意,df=3您对“最佳” df可能是最好的猜测。提供此附加信息后,您的错误将消失。

几个摘录可以帮助您更好地了解以下方面的内部机制fitdistr

对于正态分布,对数正态分布,几何分布,指数分布和泊松分布,使用封闭形式的MLE(以及精确的标准误差),start不应提供。

...

对于以下命名分布,如果start省略或仅部分指定,则会计算出合理的起始值:“ cauchy”,“ gamma”,“ logistic”,“ negative binomal”(由mu和size参数化),“ t”和“ weibull” ”。请注意,如果拟合差,则这些起始值可能不够好:特别是除非拟合分布是长尾的,否则它们不能抵抗异常值。


1
这两个答案(弗洛姆和布什曼诺夫)都是有帮助的。我选择这一点是因为它可以更明确地表明,在正确的初始值和约束条件下,“ fitdistr”优化收敛。
user12719 '02

10

νŤ回归模型:陷阱和推论”,Biometrika86,1)。

νŤ

set.seed(1234)
n <- 10
x <- rt(n,  df=2.5)

make_loglik  <-  function(x)
    Vectorize( function(nu) sum(dt(x, df=nu,  log=TRUE)) )

loglik  <-  make_loglik(x)
plot(loglik,  from=1,  to=100,  main="loglikelihood function for df     parameter", xlab="degrees of freedom")
abline(v=2.5,  col="red2")

在此处输入图片说明

如果您使用此代码,则会发现某些情况下存在明确定义的最大值,尤其是在样本量较大的情况下 ñ

让我们尝试一些模拟:

t_nu_mle  <-  function(x) {
    loglik  <-  make_loglik(x)
    res  <-  optimize(loglik, interval=c(0.01, 200), maximum=TRUE)$maximum
    res   
}

nus  <-  replicate(1000, {x <- rt(10, df=2.5)
    t_nu_mle(x) }, simplify=TRUE)

> mean(nus)
[1] 45.20767
> sd(nus)
[1] 78.77813

显示估计值非常不稳定(从直方图看,估计值的相当大一部分处于为优化而指定的上限200)。

以更大的样本量重复:

nus  <-  replicate(1000, {x <- rt(50, df=2.5)
    t_nu_mle(x) }, simplify=TRUE)
> mean(nus)
[1] 4.342724
> sd(nus)
[1] 14.40137

更好,但均值仍远高于2.5的真实值。

然后请记住,这是实际问题的简化版本,其中还必须估算位置和比例参数。

如果使用原因 Ť-分布是要“稳固”,然后估计 ν 数据中的数据很可能破坏鲁棒性。


5
您得出的结论是,估计df的问题实际上可能与首先选择t分布的原因(即稳健性)背道而驰,这一观点令人发人深省。
user12719 '16

1
(+1)“无上限”不是一个错误的答案,并且与间隔估算结合使用时,对于某些目的可能很有用。重要的是不要盲目使用观察到的Fisher信息形成Wald置信区间。
Scortchi-恢复莫妮卡

8

在fitdistr的帮助中是以下示例:

fitdistr(x2, "t", df = 9)

表示您只需要df的值。但这假定了标准化。

为了获得更多控制权,他们还显示

mydt <- function(x, m, s, df) dt((x-m)/s, df)/s
fitdistr(x2, mydt, list(m = 0, s = 1), df = 9, lower = c(-Inf, 0))

其中参数为m =平均值,s =标准偏差,df =自由度


1
我想我对t分布的参数感到困惑。它具有2个(平均值,df)或3个(平均值,标准偏差,df)参数吗?我想知道是否可以容纳参数“ df”。
user12719

1
@ user12719 Student-t分布具有三个参数:位置,比例和自由度。它们不称为均值,标准偏差和df,因为此分布的均值和方差取决于三个参数。同样,它们在某些情况下不存在。Peter Flom正在修复df,但也可以将其视为未知参数。

1
@PeterFlom对于柯西分布,很明显,m和s是位置和尺度。我同意符号m和s分别表示均值和标准差。但是,这可能只是一个简化\mu,并\sigma为好。顺便提一下+1。

1
@PeterFlom来自R帮助文件的引用是否意味着df 对于学生分发始终为 9?您不认为df也应该估算吗?实际上,没有df错误是导致错误的原因,正确的答案应该为找到它提供一些帮助。
谢尔盖·布什曼诺夫

1
@PeterFlom顺便说一句,如果您阅读了援引文件上方几行的帮助文件,您会发现为什么df=9在他们的例子中很好,而在这里却无关紧要。
谢尔盖·布什曼诺夫'16
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.