2012-09-10 81 views

回答

3

你有等式,所以用stats::integrate來計算你的f(x)定義中的定積分項。那麼,舉個例子:plot(0:1000, f(0:1000),t='l')

+0

整潔!我不知道「集成」可以處理無限的邊界。 – Backlin

5

由於積分是正態分佈的累積PDF(除了丟失的歸一化因子),您可以使用pnorm來計算它。

sf <- 1 
mf <- 0 
f <- function(x) 1/(2*sf^2*pi)*exp(-.5*((x-mf)/sf)^2) * 
       (1 - sf*sqrt(2*pi)*pnorm(x, mf, sf)) 
curve(f, from=-2, to=2) 

sf*sqrt(2*pi)因子是爲了補償缺少的標準化。我不是100%確定我的數學是正確的,所以請親自驗證一下。

編輯:作爲Ben Bolker指出的f的第一部分可以與dnorm被簡化,使得代碼更具有可讀性。

f <- function(x) dnorm(x, mf, sf)/(sqrt(2*pi)*sf) * 
       (1 - sf*sqrt(2*pi)*pnorm(x, mf, sf)) 

curve

+0

這是一個很好的解決方案,非常感謝:)但無論如何,我怎樣才能輸入這樣的積分呢? –

+0

我不確定你在這裏輸入的意思。繪製積分或將方程轉化爲R代碼?我只是做了兩個,所以如果你有其他的功能,你只需要修改上面的代碼。如果你有一個非標準的積分,你應該去整合()'@Carl建議的,而不是'pnorm()'。或者你想將公式繪製到繪圖區域? – Backlin

+1

我認爲你可以通過使用'dnorm'作爲第一個因素稍微簡化一下(儘管你也必須調整標準化因子) –