私は、切り捨てガウス分布のモーメント(平均と分散)を表す2つの式を持っています。私はそれらを計算するために、以下の機能を建て:2つの非線形方程式をもつ解が与えられた場合のパラメータ値の検索R
mu
と
sigma
考える
trunc_moments <- function(moments, a, b){
require(truncnorm)
mu <- moments[1]
sigma <- moments[2]
alpha <- (a - mu)/sigma; beta <- (b - mu)/sigma
mu_trunc <- mu + sigma*
((dnorm(alpha, mu, sigma) - dnorm(beta, mu, sigma))/
(pnorm(beta, mu, sigma) - pnorm(alpha, mu, sigma)))
sigma_trunc <- sigma^2 * (1 +
((alpha*dnorm(alpha, mu, sigma) - beta*dnorm(beta, mu, sigma))
/(pnorm(beta, mu, sigma) - pnorm(alpha, mu, sigma))) -
((dnorm(alpha, mu, sigma) - dnorm(beta, mu, sigma))
/(pnorm(beta, mu, sigma) - pnorm(alpha, mu, sigma)))^2)
return(c(mu_trunc, sigma_trunc))
}
、機能はmu_trunc
とsigma_trunc
を返します。
trunc_moments(c(0.25, 0.02), a=0, b=1)
今、私は逆の結果を取得したいと思います。function、mu_trunc
とsigma_trunc
与え、私はmu
とsigma
の値を取得することができますか?
私はnleqslv Rパッケージで何かを試しましたが、私はこれが私が探しているものではないかと思います。
library(nleqslv)
nleqslv(c(0.25, 0.0004), trunc_moments, a = 0, b = 1)$x
pf 'trunc_moments'を呼び出すと、エラーメッセージが表示されます。 'trunc_moments'は引数' moments'のベクトルを期待しているので、 'trunc_moments(c(0.25、0.02)、a = 0、b = 1)'でなければなりません。 – Bhas