2016-01-24 257 views
-1

使用標準化值對非標準化值在R計算正態分佈密度,當我跑成令人困惑的情況之間不同的R dnorm結果:標準化和非標準化的值

ds <- function(x, mu, var) {dnorm(x, mean = mu, sd = sqrt(var))} 
ds1 <- function(x, mu, var) {dnorm((x-mu)/sqrt(var), mean = 0, sd = 1)} 

這兩個應該給予相同的結果。然而,他們不這樣做:

> ds(0, 1, 2) 
[1] 0.2196956 
> ds1(0, 1, 2) 
[1] 0.3106966 

看來,這可能是因爲造成這兩個sqrtdnorm數值的差異,因爲如果我設置var = 1,那麼結果是相同的:

> ds(0, 1, 1) 
[1] 0.2419707 
> ds1(0, 1, 1) 
[1] 0.2419707 
> ds1(0, 1, 1.001) 
[1] 0.2420916 
> ds(0, 1, 1.001) 
[1] 0.2419707 

任何人都可以指出這是什麼原因?

+2

他們不應該是一樣的。聲明結束。說真的,這是對密度和概率的誤解,而不是一個編程問題,所以它不屬於這裏。 (但的確如此 - 它們不應該是相同的) – Dason

+1

我想你可能會混淆'dnorm'和'pnorm'。如果在示例中將前者替換爲後者,則兩個函數都會返回相同的值。 – MrFlick

回答

0

ds1,你已經忘記了1/sqrt(var)項:

ds1 <- function(x, mu, var) {dnorm((x-mu)/sqrt(var), mean = 0, sd = 1)/sqrt(var)} 

> ds(1,2,3) 
[1] 0.1949697 
> ds1(1,2,3) 
[1] 0.1949697 
+0

謝謝。幾小時後,我想到了。並且感謝那些指出我錯誤理解概率和密度的人。我可能在概念上有些不穩定,但這裏的原因是我忘記了雅可比行列式。 – qkhhly