2013-07-05 7 views
1

Предположим, что у меня есть эти набор данных:Две модели в ggplot

x <- 1:100 
y <- 2 + 70* x 
z <- 2 + x^2 
index <- c(rep(1,100),rep(2,100)) 

x <- c(x,x) 
t<- c(y,z) 
data <- data.frame(x,t,index) 

data[,2]= data[,2] + rnorm(200,500,400) 

ggplot(data, aes(x = x, y = t, colour = factor(index))) + geom_point() + stat_smooth(method = "lm", formula = y ~ x, se = FALSE) 

ggplot функция просто подходят линейную модель, которая подходит для y. Как добавить квадратичную модель для z к вышеуказанной функции в дополнение к линейной модели.

Я ищу лучший способ, чем этот пост: ggplot2 - plot multiple models on the same plot

+0

Я не уверен, что вы имеете в виду «добавив, квадратичную модель г». z объясняется квадратичной функцией от x? Если это так, просто измените формулу на «z ~ poly (x, 2)». И, конечно, включить z в данные. –

+0

Я хочу линейную модель для 'y' и квадратичную модель для' z'. Одна формула будет 'y ~ x', а другая будет' y ~ x + x^2'. – user1436187

ответ

0

Следующий код решил мою проблему:

ggplot() + layer (data = data[1:100,], mapping=aes(x = x, y = t,colour = factor(index)),stat = "identity") + 
stat_smooth(data=data[1:100,], mapping = aes(x = x, y = t), method = "lm", formula = y ~ x, se = FALSE) + 
layer(data=data[100:200,], mapping=aes(x = x, y = t,colour = factor(index)), stat = "identity") + 
stat_smooth(data = data[100:200,], mapping = aes(x = x, y = t), method = "lm", formula = y ~ poly(x,2), se = FALSE) 
+0

Теперь вы можете принять свой ответ, нажав на галочку слева этот ответ. Когда это возможно, вы должны сделать то же самое и в своих других вопросах. – Julius

1

До сих пор не совсем уверен, как вы имеете в виду, но я думаю, это было бы шагом в направлении, которое вы хотите:

ggplot(data, aes(x = x, y = t, colour = factor(index))) + 
    stat_smooth(method = "lm", formula = y ~ x, se = FALSE) + 
    stat_smooth(method = "lm", formula = y ~ poly(x,2), se = FALSE) 

В ваших данных у вас есть одна группа (индекс = 1), которая соединена линейной функцией, а другая - квадратичной функцией. Если вы укажете формулу y ~ x, прямые линии регрессии установлены для обеих групп, и это не то, что вы хотите, правильно?

Приведенный выше код создает два слоя: первый - начальный слой с двумя прямыми линиями, второй - одну прямую линию и одну квадратичную кривую. Так как линейная группа на обоих графиках одинакова, вы видите только три строки. Если вы хотите удалить часть двумя прямыми линиями, удалите вторую строку кода, так что останется только формула y ~ poly(x,2). poly(x,2) эквивалентен x + I(x^2), который отражает математическую формулу y = x + x².

Я удалил geom_point() из кода, чтобы он не затушевывал результаты. Не стесняйтесь включать его обратно. Надеюсь, это то, что вам нужно.

+0

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

+0

@ user1436187 Извините, но я, кажется, не понимаю ваших потребностей. Вы сказали, что вам нужна квадратичная модель. Если вы удалите вторую строку (с помощью «formula = y ~ x», вы получите одну прямую линию и одну кривую. Вы не можете получить кривую для первой группы, так как это идеальная линия. Квадратичное уравнение для этой группы будет имеют 0 в качестве коэффициента для квадратичного члена, так что полученная квадратичная функция для этой группы будет частным случаем: 0 * x² + b1 * x + a –

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