2017-09-27 2 views
0

다음 코드에서 함수 호출의 xintercept 값 (3 및 0)에 하드 코드를 할 필요가 없도록 normal1과 normal2의 평균값을 얻으려고합니다.dnorm의 평균값을 얻으십시오

normal1 <- function(x) { 
    dnorm(x, 3, 3) 
} 

normal2 <- function(x) { 
    dnorm(x, 0, 2) 
} 

plot + stat_function(fun = normal1) + 
     stat_function(fun = normal2) + xlim(c(-10, 15)) + 
     geom_vline(xintercept = 3, linetype = "dashed") + 
     geom_vline(xintercept = 0, linetype = "dashed") 

그래서 앞으로 변수를 선언하고 초기 dnorm 호출을 사용하지 않고 할 싶습니다. ie

x1 <- 3 
x2 <- 0 

normal1 <- function(x) { 
    dnorm(x, x1, 3) 
} 

normal2 <- function(x) { 
    dnorm(x, x2, 2) 
} 

저는 R에있어 매우 새롭고 기능이나 복귀를 강력하게 파악하지 못했습니다.

+1

'plot '이 무엇인지 최소한의 실례를 줄 수 있습니까? –

+0

오, 감사합니다. 당신의 의견은 내가 사용하고있는'줄거리 '가 내가 코드에서 삭제 한 이후의 콘솔 메모리에있는 변수라는 것을 깨닫게했습니다. 'plot <- ggplot (x, aes (x))' – Kebtiz

+0

감사합니다. 그 동안 한 가지 대답과 좋은 대답이 있습니다. 나는 시험을 치른 후에 그것을 upvoted했습니다. 어쩌면 당신은 그것을 받아 들여서 다른 사람들이 비슷한 문제를 안다면 미래에 찾을 수 있도록해야합니다. –

답변

2

은 어쩌면 당신은 그래서 당신이 normal1 및 normal2 기능을 다시 계산할 수 있습니다이

plotter <- function(m1,m2){ 
    normal1 <- function(x) { 
    dnorm(x, m1, 3) 
    } 

    normal2 <- function(x) { 
    dnorm(x, m2, 2) 
    } 
    ggplot(data = data.frame(x=0), mapping = aes(x=x))+ 
    stat_function(fun = normal1) + 
    stat_function(fun = normal2) + xlim(-10, 15) + 
    geom_vline(xintercept = m1, linetype = "dashed") + 
    geom_vline(xintercept = m2, linetype = "dashed") 


} 

같은 것을보십시오. 사실 그들은 가변적 인 평균으로 생성되며, 새로운 값으로 플롯을 수정하는 것은 쉽습니다.

m_1 <- 4 
m_2 <- 2 

plotter(m_1, m_2) 

또는 새 값으로 직접 plotter() 함수를 실행하십시오. 반드시 그것의 창조에 대한 평균을 필요로하는 기능의 평균을 계산하는 사실


여행

은 약간 혼동하지만, 불가능하지 않다.

normal1 <<- function(x) { 
    dnorm(x, m1, 3) 
} 

이 때문에 normal1 기능은 plotter 함수 외부로 볼 수 있습니다 :

첫 번째는 plotter 기능을 조금 수정합니다.

이제 수학적 배경에 대해 살펴 보겠습니다. 함수의 평균값 또는 예상 값은 밀도 곡선에있는 변수 자체에 곱한 값과 일치합니다.

mean1 <- function(x){ 
normal1(x)*x 
} 

여기서, normal1은 밀도로 해석된다.

결과 예를 들면 m_1 <- 4 들어
mean1_empirical <- integrate(mean1, lower = -Inf, upper = Inf) 

(!)

4 with absolute error < 0.00019 

은 참고 : 기존 기능을 사용하는이 방법은 경험적 접근이다. 따라서 최소한의 유도로 결과를받을 수는 있지만 물론 정확도는 높습니다.

+0

그것은 내가했던 방식보다 깔끔하고,이 인스턴스에서는 잘 작동하지만 사실 이후에 실제로 평균을 추출 할 수있는 방법을 찾고있었습니다. 그래서 만약 내가 벌거 벗은 줄거리를 통과한다면, 나는 그것에'geom_vline'을 추가 할 수있을 것입니다. – Kebtiz

+1

@Kebtiz, 소풍으로 조금 도와 줄 수 있기를 바랍니다. –

+0

예, 감사합니다. 예제는 매우 도움이되었습니다. – Kebtiz

관련 문제