Rのt分布のフィッティング:スケーリングパラメーター


17

t分布のパラメーター、つまり正規分布の「平均」と「標準偏差」に対応するパラメーターをどのように適合させますか。私はそれらがt分布の「平均」と「スケーリング/自由度」と呼ばれていると思いますか?

次のコードは、多くの場合「最適化に失敗しました」エラーになります。

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

最初にxをスケーリングするか、確率に変換する必要がありますか?それを行うのに最適な方法は?


2
パラメータをスケーリングする必要があるためではなく、オプティマイザが失敗するため失敗します。以下の私の答えをご覧ください。
セルゲイブッシュマノフ

回答:


16

fitdistr最尤法と最適化手法を使用して、特定の分布のパラメーターを見つけます。@ user12719が気づいたように、特にt分布の場合、次の形式の最適化が行われることがあります。

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 binomial"(muおよびsizeでパラメーター化)、 "t"および "weibull 「。適合が不十分な場合、これらの開始値は十分でない可能性があることに注意してください。特に、適合分布がロングテールでない限り、外れ値に対して耐性がありません。


1
両方の回答(FlomとBushmanov)が役立ちます。正しい初期値と制約で 'fitdistr'最適化が収束することをより明確にするため、これを選択しています。
-user12719

10

νt

νt

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")

ここに画像の説明を入力してください

n

いくつかのシミュレーションを試してみましょう。

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をはるかに上回っています。

次に、これは場所とスケールのパラメーターも推定する必要がある実際の問題の簡略版であることに注意してください。

tν


5
dfを推定する問題は、そもそもt分布を選択する理由(つまり、堅牢性)に反して実際に機能するかもしれないというあなたの結論は、刺激的であると考えられます。
user12719

1
(+1)「Unbounded above」は間違った答えではなく、間隔の推定と組み合わせるといくつかの目的に役立つ可能性があります。重要なことは、観察されたフィッシャー情報を盲目的に使用して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スチューデントt分布には、場所、スケール、自由度の3つのパラメーターがあります。この分布の平均と分散は3つのパラメーターに依存するため、平均、標準偏差、dfとは呼ばれません。また、場合によっては存在しません。Peter Flomはdfを修正していますが、これは未知のパラメーターと見なすこともできます。

1
@PeterFlom コーシー分布の場合、mとsが位置とスケールであることは明白です。mとsの表記がそれぞれ平均と標準偏差を表すことを示唆していることに同意します。しかし、これはただの簡素化も可能\mu\sigma同様。ところで、かなり前に+1。

1
@PeterFlom Rのヘルプファイルからのこの引用は、学生の配布ではdfが常に 9であることを意味していますか?dfも同様に推定されるべきだと思いませんか?実際、dfエラーの原因はエラーの原因であり、正しい答えはそれを見つけるためのレシピを提供するはずです。
セルゲイブッシュマノフ

1
@PeterFlom BTW、引用の上の2、3行のヘルプファイルを読むと、なぜdf=9その例で良いのか、ここでは無関係であることがわかります。
セルゲイブッシュマノフ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.