R 2条法线曲线的交点
虽然我认为这是一个基本问题,但我似乎不知道如何计算R中的这个: 2个或更多正态分布(拟合在直方图上)的交点(我需要x值),例如具有以下参数:R 2条法线曲线的交点,r,normal-distribution,R,Normal Distribution,虽然我认为这是一个基本问题,但我似乎不知道如何计算R中的这个: 2个或更多正态分布(拟合在直方图上)的交点(我需要x值),例如具有以下参数: d=data.frame(mod=c(1,2),mean=c(14,16),sd=c(0.9,0.6),prop=c(0.6,0.4)) 使用my 2曲线的平均值和标准偏差,并计算每个模型对分布的贡献比例。您可以使用uniroot: f <- function(x) dnorm(x, m=14, sd=0.9) * .6 - dnorm(x, m=
d=data.frame(mod=c(1,2),mean=c(14,16),sd=c(0.9,0.6),prop=c(0.6,0.4))
使用my 2曲线的平均值和标准偏差,并计算每个模型对分布的贡献比例。您可以使用
uniroot
:
f <- function(x) dnorm(x, m=14, sd=0.9) * .6 - dnorm(x, m=16, sd=0.6) * .4
uniroot(f, interval=c(12, 16))
$root
[1] 15.19999
$f.root
[1] 2.557858e-06
$iter
[1] 5
$estim.prec
[1] 6.103516e-05
f对不起,但公认的答案不好。另见:
可以使用如下函数获得两个根:
intersect <- function(m1, s1, m2, s2, prop1, prop2){
B <- (m1/s1^2 - m2/s2^2)
A <- 0.5*(1/s2^2 - 1/s1^2)
C <- 0.5*(m2^2/s2^2 - m1^2/s1^2) - log((s1/s2)*(prop2/prop1))
(-B + c(1,-1)*sqrt(B^2 - 4*A*C))/(2*A)
}
我同意@flounder的观点,你应该计算两个根,但是提供的函数是不完整的。当s1=s2时,A变为零,产生Inf和NaN
稍加修改即可完成此功能:
intersect <- function(m1, sd1, m2, sd2, p1, p2){
B <- (m1/sd1^2 - m2/sd2^2)
A <- 0.5*(1/sd2^2 - 1/sd1^2)
C <- 0.5*(m2^2/sd2^2 - m1^2/sd1^2) - log((sd1/sd2)*(p2/p1))
if (A!=0){
(-B + c(1,-1)*sqrt(B^2 - 4*A*C))/(2*A)
} else {-C/B}
}
m1=0; sd1=2; m2=2.5; sd2=2; p1=.8; p2=.2
(is=intersect(m1,sd1,m2,sd2,p1,p2))
xs = seq(-6, 6, by=.01)
plot(xs, p1*dnorm(xs, m1, sd1), type= 'l')
lines(xs, .2*dnorm(xs, m2,sd2))
abline(v=is)
intersect+1,但您能否对它的功能/工作原理进行一些解释?谢谢你的文字。这太棒了!
intersect <- function(m1, sd1, m2, sd2, p1, p2){
B <- (m1/sd1^2 - m2/sd2^2)
A <- 0.5*(1/sd2^2 - 1/sd1^2)
C <- 0.5*(m2^2/sd2^2 - m1^2/sd1^2) - log((sd1/sd2)*(p2/p1))
if (A!=0){
(-B + c(1,-1)*sqrt(B^2 - 4*A*C))/(2*A)
} else {-C/B}
}
m1=0; sd1=2; m2=2.5; sd2=2; p1=.8; p2=.2
(is=intersect(m1,sd1,m2,sd2,p1,p2))
xs = seq(-6, 6, by=.01)
plot(xs, p1*dnorm(xs, m1, sd1), type= 'l')
lines(xs, .2*dnorm(xs, m2,sd2))
abline(v=is)
library(rootSolve)
f <- function(x, m1, sd1, m2, sd2, p1, p2){
dnorm(x, m1, sd1) * p1 - dnorm(x, m2, sd2) * p2 }
uniroot.all(f, lower=-6, upper=6, m1=m1, sd1=sd1, m2=m2, sd2=sd2, p1=p1, p2=p2)