Как соответствовать нормальному распределению по частоте и интенсивности в R? - PullRequest
0 голосов
/ 24 февраля 2019

У меня есть список данных

frequency x1,x2,...,xn
     i.e. 10,20,...,5000.
Intensity y1,yx,...,yn
          0,0,...,50,60,50,...,0

, где я хочу разместить нормальное распределение данных.

Я нашел какой-то веб-сайт в Интернете, например (http://www.di.fc.ul.pt/~jpn/r/distributions/fitting.html)с помощью процедуры, подобной

my_data <- rnorm(250, mean=1, sd=0.45)# unkonwn distribution parameters
fit <- fitdistr(my_data, densfun="normal")

, но очевидно, что эти методы не будут работать.

Как подогнать вышеуказанные данные к нормальному распределению?

1 Ответ

0 голосов
/ 24 февраля 2019

Вы можете использовать функцию максимального правдоподобия, mle, для решения этой проблемы.Вот как бы вы это сделали:

my_data <- rnorm(250, mean=1, sd=0.45)# unkonwn distribution parameters

logLik <- function(sigma, mu){
  ll <- vapply(my_data,
               function(x) dnorm(x, mean = mu, sd = sigma),
               FUN.VALUE = numeric(1))
  -sum(log(ll))
}

mle(logLik, start = list(sigma = 1, mu = 1))

mle требует функции логарифмического сходства, которую она использует для определения оптимальных параметров (которые в случае нормального распределения равны mu (среднее значение)и sigma (ст. dev.)).Требуется отрицательная сумма логарифмического правдоподобия -sum(log(ll)) как часть численной процедуры, чтобы найти наилучшие параметры для распределения.Затем он возвращает оценочные параметры:

Call:
mle(minuslogl = logLik, start = list(sigma = 1, mu = 1))

Coefficients:
    sigma        mu 
0.4595003 0.9724402 
...