пытается отобразить оригинальные и подогнанные данные (nls + dnorm) с помощью geom_smooth () из ggplot2 - PullRequest
12 голосов
/ 08 декабря 2010

Я изучаю некоторые данные, поэтому первое, что я хотел сделать, это попытаться приспособить к нему нормальное (гауссово) распределение. Я впервые пробую это в 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

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

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

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

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

Заранее спасибо!

Джеффри

1 Ответ

16 голосов
/ 08 декабря 2010

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

Статистические данные имеют место после отображения, то есть size -> x, и count ->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 вместо размера и количества.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...