0
我有两个方程描述了截断高斯分布的矩(均值和方差)。我内置下面的函数来计算它们:给出带有两个非线性方程的解的给定参数值R
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
和sigma
,该函数返回mu_trunc
和sigma_trunc
。现在
trunc_moments(c(0.25, 0.02), a=0, b=1)
,我想获得相反的结果:给定功能,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(c(0.25,0.02),a = 0,b = 1)',因为'trunc_moments'需要一个用于参数'moments'的向量。 – Bhas