2016-08-20 2 views
0

Учитывая кадр данных, как:Добавление статистики на участок (ggplot2)

df1= data.frame(x = c(1:50)) 
df1$val=df1$x*(-0.35) 

Я использовал ggplot2 и добавили линию регрессии с помощью команды

t=ggplot(df1, aes(x=val, y=x))+geom_smooth(method=lm) + geom_point() 

Для того, чтобы добавить уравнение и значение г я попробовал код от этого вопроса Adding Regression Line Equation and R2 on graph

, но я получаю ошибку

Error in terms.formula(formula, data = data) : 
    'data' argument is of the wrong type 

Любые идеи о том, как исправить это?

EDIT

Код я использовал

my_sts <- function(df1){ 
    m <- lm(df1$x ~ df1$val, df1); 
    eq <- substitute(italic(y) == a + b %.% italic(x)*","~~italic(r)^2~"="~r2, 
        list(a = format(coef(m)[1], digits = 2), 
         b = format(coef(m)[2], digits = 2), 
         r2 = format(summary(m)$r.squared, digits = 3))) 
    as.character(as.expression(eq));     
} 

tgen = t + geom_text(x = -10, y = 50, label = eq(df1), parse = TRUE) 
+1

Вам нужно включить код, который вызывает ошибку выше. – nrussell

+0

Какой код вы на самом деле пытались сделать? Пожалуйста, включите в свой вопрос [воспроизводимый пример] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example). Не ссылайтесь на код еще где мы не знаем точно, как вы его использовали. Покажите нам точно, какие параметры вы прошли. – MrFlick

+0

Что такое lm_eqn? –

ответ

1

Это скопировано из сеанса консоли. Я исправил две вещи, которые я думал, были ошибки: 1), как упоминание в моем комментарии вы не должны использовать df1 $ в формуле, когда у вас есть аргумент данных, и 2) Я думаю, вы имеете в виду использовать my_sts(df1)

> df1= data.frame(x = c(1:50)) 
> df1$val=df1$x*(-0.35) 
> my_sts <- function(df1){ 
+ m <- lm(x ~ val, df1); 
+ eq <- substitute(italic(y) == a + b %.% italic(x)*","~~italic(r)^2~"="~r2, 
+     list(a = format(coef(m)[1], digits = 2), 
+       b = format(coef(m)[2], digits = 2), 
+       r2 = format(summary(m)$r.squared, digits = 3))) 
+ as.character(as.expression(eq));     
+ } 
> t=ggplot(df1, aes(x=val, y=x))+geom_smooth(method=lm) + geom_point() 
> tgen = t + geom_text(x = -10, y = 50, label = eq(df1), parse = TRUE) 
Error in layer(data = data, mapping = mapping, stat = stat, geom = GeomText, : 
    could not find function "eq" 
> tgen = t + geom_text(x = -10, y = 50, label = my_sts(df1), parse = TRUE) 
Warning message: 
In summary.lm(m) : essentially perfect fit: summary may be unreliable 
> print(tgen) 

Кажется, хорошо печатают: обратите внимание, что x и y ролей меняются на противоположные, поэтому коэффициент является обратным для моделируемого фактора.

enter image description here

Смежные вопросы