2013-07-05 80 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二次模型」的意思。 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對不起,但我似乎並不瞭解你的需求。你說你需要二次模型。如果你刪除第二行(用'formulaula = y〜x'),那麼你將得到一條直線和一條曲線,你不能得到第一組曲線,因爲它是一條完美的曲線。作爲二次項的係數爲0,因此該組的二次函數將是一個特殊情況:0 *x²+ b1 * x + a –