Подтвердить что ты не робот

Пытаясь отобразить исходные и установленные данные (nls + dnorm) с помощью ggplot2 geom_smooth()

Я изучаю некоторые данные, поэтому первое, что я хотел сделать, это попытаться установить нормальный (гауссовский) дистрибутив. Это моя первая попытка попробовать это в R, поэтому я делаю это шаг за шагом. Сначала я предварительно подготовил свои данные:

myhist = data.frame(size = 10:27, counts = c(1L, 3L, 5L, 6L, 9L, 14L, 13L, 23L, 31L, 40L, 42L, 22L, 14L, 7L, 4L, 2L, 2L, 1L) )

qplot(x=size, y=counts, data=myhist)

plot1

Так как я хочу подсчеты, мне нужно добавить коэффициент нормировки (N) для увеличения плотности:

fit = nls(counts ~ N * dnorm(size, m, s), data=myhist, start=c(m=20, s=5, N=sum(myhist$counts)) )   

Затем я создаю готовые данные для отображения, и все отлично работает:

x = seq(10,30,0.2)
fitted = data.frame(size = x, counts=predict(fit, data.frame(size=x)) )
ggplot(data=myhist, aes(x=size, y=counts)) + geom_point() + geom_line(data=fitted)

plot2

Я взволновался, когда нашел этот поток, который рассказывает об использовании geom_smooth(), чтобы сделать все это за один шаг, но я не могу заставить его работать:

Вот что я пытаюсь... и что получаю:

ggplot(data=myhist, aes(x=size, y=counts)) + geom_point() + geom_smooth(method="nls", formula = counts ~ N * dnorm(size, m, s), se=F, start=list(m=20, s=5, N=300, size=10))

Error in method(formula, data = data, weights = weight, ...) : 
  parameters without starting value in 'data': counts

Кажется, что ошибка указывает на то, что она пытается соответствовать наблюдаемой переменной считает, но это не имеет никакого смысла, и она предсказуемо удивляет, если я укажу "начальное" значение для также считается:

fitting parameters ‘m’, ‘s’, ‘N’, ‘size’, ‘counts’ without any variables

Error in eval(expr, envir, enclos) : object 'counts' not found

Любая идея, что я делаю неправильно? Конечно, это не конец света, но меньше шагов всегда лучше, и вы, ребята, всегда придумываете самые изящные решения этих общих задач.

Спасибо заранее!

Джеффри

4b9b3361

Ответ 1

первая ошибка указывает, что ggplot2 не может найти переменную 'count', которая используется в формуле, в данных.

Статистика происходит после сопоставления, то есть size → x и counts → y.

Вот пример использования nls в geom_smooth:

ggplot(data=myhist, aes(x=size, y=counts)) + geom_point() + 
  geom_smooth(method="nls", formula = y ~ N * dnorm(x, m, s), se=F, 
              start=list(m=20, s=5, N=300)) 

Дело в том, что с использованием x и y вместо размера и подсчета в спецификации формулы.