標準偏差が独立変数でスケーリングするレートを推定する


11

正規分布変数測定を行っている実験があります。Y

YN(μ,σ)

しかし、以前の実験は、標準偏差といういくつかの証拠が提供された独立変数のアフィン関数であるXを、すなわち、σX

σ=a|X|+b

YN(μ,a|X|+b)

Xの複数の値でYをサンプリングすることにより、パラメーターおよびbを推定したいと思います。さらに、実験の制限により、Yの限られた数(約30〜40)のサンプルしか取得できず、無関係な実験上の理由から、Xのいくつかの値でサンプリングすることを好みます。これらの制約がある場合、abを推定するためにどのような方法が利用できますか?abYXYXab

実験の説明

これは、上記の質問をする理由に興味がある場合の追加情報です。私の実験では、聴覚と視覚の空間知覚を測定します。さまざまな場所からの聴覚的または視覚的なターゲットを提示できる実験設定があり、被験者はターゲットの知覚された場所Yを示します。上記のσとしてモデル化した離心率の増加(つまり| X |の増加)により、ビジョン*とオーディションの両方の精度が低下します。結局、abを見積もりたいXY|X|σabビジョンとオーディションの両方のために、私は空間内のさまざまな場所にわたる各感覚の精度を知っています。これらの推定値は、同時に提示される場合に視覚的および聴覚的ターゲットの相対的な重み付けを予測するために使用されます(ここで提示される多感覚統合の理論と同様:http : //www.ncbi.nlm.nih.gov/pubmed/12868643)。

*中心窩空間と中心窩外空間を比較すると、このモデルは視覚に対して不正確であることがわかっていますが、私の測定値は中心窩空間にのみ制限されています。これはまともな近似です。


2
μaσ

SDが負になることはないため、Xの線形関数である可能性は低いです。あなたの提案a | X |は、X = 0で最小またはより狭いV形状を必要とします。これは、私にはかなり不自然な可能性のようです。 。これは正しいですか?
ガン-モニカの回復

σ|X|

@whuberこれを希望する理由は少し複雑ですが、実験を説明する方法を考え、質問にもう少し詳細を追加します。
Adam Bosen、2015年

1
演繹的に、X = 0が最小SDを表し、f(| X |)が単調であることを信じる十分な理由がありますか?
gung-モニカの回復

回答:


2

あなたのような、パラメーターを推定したい比較的単純だが「非標準」の生成モデルがある場合、私の最初の考えはStanのようなベイジアン推論プログラムを使用することです。あなたが与えた説明は非常にきれいにスタンモデルに翻訳されます。

RStan(StanへのRインターフェース)を使用したRコードの例。

library(rstan)

model_code <- "
data {
    int<lower=0> n; // number of observations
    real y[n];
    real x[n];
}
parameters {
    real mu; // I've assumed mu is to be fit.
             // Move this to the data section if you know the value of mu.
    real<lower=0> a;
    real<lower=0> b;
}
transformed parameters {
    real sigma[n];
    for (i in 1:n) {
        sigma[i] <- a + b * fabs(x[i]);
    }
}
model {
    y ~ normal(mu, sigma);
}
"

# Let's generate some test data with known parameters

mu <- 0
a <- 2
b <- 1

n <- 30
x <- runif(n, -3, 3)
sigma <- a + b * abs(x)
y <- rnorm(n, mu, sigma)

# And now let's fit our model to those "observations"

fit <- stan(model_code=model_code,
            data=list(n=n, x=x, y=y))

print(fit, pars=c("a", "b", "mu"), digits=1)

次のような出力が得られます(ただし、乱数はおそらく私のものとは異なります)。

Inference for Stan model: model_code.
4 chains, each with iter=2000; warmup=1000; thin=1; 
post-warmup draws per chain=1000, total post-warmup draws=4000.

   mean se_mean  sd 2.5%  25% 50% 75% 97.5% n_eff Rhat
a   2.3       0 0.7  1.2  1.8 2.2 2.8   3.9  1091    1
b   0.9       0 0.5  0.1  0.6 0.9 1.2   1.9  1194    1
mu  0.1       0 0.6 -1.1 -0.3 0.1 0.5   1.4  1262    1

Samples were drawn using NUTS(diag_e) at Thu Jan 22 14:26:16 2015.
For each parameter, n_eff is a crude measure of effective sample size,
and Rhat is the potential scale reduction factor on split chains (at 
convergence, Rhat=1).

abμ


あ、これ好き!参考までに、スタンについて聞いたことがありませんでした。私は最初は分析的な解決策を望んでいましたが、応答がないことを考えると、それが存在するとは思えません。私はあなたの答えがこの問題への最善のアプローチであると信じる傾向があります。
Adam Bosen、2015年

分析的なソリューションが存在していても、完全にショックを受けることはありませんが、確かに少し驚かれることでしょう。Stanのようなものを使用することの強みは、モデルに変更を加えるのが非常に簡単であることです。分析ソリューションは、与えられたモデルにおそらく非常に強く制約されます。
Martin O'Leary、2015年

2

閉じた数式は期待できませんが、尤度関数を書き留めて数値的に最大化することはできます。モデルは 次に、対数尤度関数(パラメーターに依存しない項を除く)は で、簡単にプログラムできます数値オプティマイザに与えます。

YN(μ,a|x|+b)
l(μ,a,b)=ln(a|xi|+b)12(yiμa|xi|+b)2

Rでは、

make_lik  <-  function(x,y){
    x  <-  abs(x)
    function(par) {
        mu <- par[1];a  <-  par[2];  b <-  par[3]
        axpb <-  a*x+b
        -sum(log(axpb)) -0.5*sum( ((y-mu)/axpb)^2 )
    }
}

次に、いくつかのデータをシミュレートします。

> x <-  rep(c(2,4,6,8),10)
> x
 [1] 2 4 6 8 2 4 6 8 2 4 6 8 2 4 6 8 2 4 6 8 2 4 6 8 2 4 6 8 2 4 6 8 2 4 6 8 2 4
[39] 6 8
> a <- 1
> b<-  3
> sigma <-  a*x+b
> mu  <-  10
> y  <-  rnorm(40,mu, sd=sigma)

次に、対数尤度関数を作成します。

> lik <-  make_lik(x,y)
> lik(c(10,1,3))
[1] -99.53438

次に、それを最適化します。

> optim(c(9.5,1.2,3.1),fn=function(par)-lik(par))
$par
[1] 9.275943 1.043019 2.392660

$value
[1] 99.12962

$counts
function gradient 
     136       NA 

$convergence
[1] 0

$message
NULL
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.