简体   繁体   中英

How to fit Gaussian distribution with one-sided data?

x <- c(-3,-2.5,-2,-1.5,-1,-0.5)
y <- c(2,2.5,2.6,2.9,3.2,3.3)

在此处输入图像描述

The challenge is that the entire data is from the left slope, how to generate a two-sided Gaussian Distribution?

There is incomplete information with regards to the question. Hence several ways can be implemented:

Here is one way to tackle it:

f <- function(par, x, y )sum((y - par[3]*dnorm(x,par[1],par[2]))^2)
a <- optim(c(0,  1, 1), f, x = x, y = y)$par
plot(x, y, xlim = c(-3,3.5), ylim = c(2, 3.5))
curve(dnorm(x, a[1], a[2])*a[3], add = TRUE, col = 2)

在此处输入图像描述

There is no way to fit a Gaussian distribution with these densities. If correct y-values had been provided this would be one way of solving the problem:

# Define function to be optimized
f <- function(pars, x, y){
  mu <- pars[1]
  sigma <- pars[2]
  y_hat <- dnorm(x, mu, sigma)
  se <- (y - y_hat)^2
  sum(se)
}

# Define the data
x <- c(-3,-2.5,-2,-1.5,-1,-0.5)
y <- c(2,2.5,2.6,2.9,3.2,3.3)

# Find the best paramters
opt <- optim(c(-.5, .1), f, 'SANN', x = x, y = y)

plot(
  seq(-5, 5, length.out = 200),
  dnorm(seq(-5, 5, length.out = 200), opt$par[1], opt$par[2]), type = 'l', col = 'red'
)
points(c(-3,-2.5,-2,-1.5,-1,-0.5), c(2,2.5,2.6,2.9,3.2,3.3))

在此处输入图像描述

Use nls to get a least squares fit of y to.lin.a * dnorm(x, b, c) where.lin.a, b and c are parameters to be estimated.

fm <- nls(y ~ cbind(a = dnorm(x, b, c)), 
  start = list(b = mean(x), c = sd(x)), algorithm = "plinear")
fm

giving:

Nonlinear regression model
  model: y ~ cbind(a = dnorm(x, b, c))
   data: parent.frame()
      b       c  .lin.a 
 0.2629  3.2513 27.7287 
 residual sum-of-squares: 0.02822

Number of iterations to convergence: 7 
Achieved convergence tolerance: 2.582e-07

The dnorm model (black curve) seems to fit the points although even a straight line (blue line) involving only two parameters (intercept and slope) instead of 3 isn't bad.

plot(y ~ x)
lines(fitted(fm) ~ x)

fm.lin <- lm(y ~ x)
abline(fm.lin, col = "blue")

截屏

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM