2017-06-01 172 views
0

我想從我的迴歸估計中的ggplot中的同一圖上繪製隱含函數。在下面的例子中,我創建了一個簡單的線性函數,其中c和b是從早期迴歸中存儲的係數估計值。我試圖然後在組範圍[0,50]上繪製函數(最好也使用選項:color = groups)。使用ggplot進行多個係數估計的圖函數R

library(ggplot2) 

groups = c("a", "b", "c") 
c = c(5, 4, 3) 
b = c(-0.01, -0.002, -0.001) 
x = c(0, 0, 0) 
df <- data.frame(cbind(c, b, x)) 

grad_fun <- function(x) { 
    c + b*x 
} 

ggplot(data = df, aes(x = x, group = groups)) + 
    stat_function(fun = grad_fun) + 
    xlim(0, 50) 

我的數字出來這樣,但我似乎無法找出原因。歡迎任何關於如何解決這個問題的建議。 Image: Outcome of above code

回答

0

幾件事情:

  • 而不是使用自定義功能,geom_abline這裏是你的朋友。
  • 請注意,group = group在這種情況下不會執行任何操作 - 您需要指定組的顯示方式,因此它應該是color = group
  • 最後,在使用cbind時,請注意不需要 - 它將您的數字參數轉換爲因子,然後無法繪製。只爲形式爲y = M * X + B的仿射函數

    library(ggplot2) 
    
    groups = c("a", "b", "c") 
    c = c(5, 4, 3) 
    b = c(-0.01, -0.002, -0.001) 
    df <- data.frame(c, b, groups) 
    
    ggplot(data = df) + 
        geom_abline(aes(slope = b, intercept = c, color = groups)) + 
        xlim(0,50) + ylim(0,5) 
    

    geom_abline作品:

下面的代碼應該做你想要什麼。相反,如果您想使用任何功能,則需要使用stat_function並將它們添加到下面的循環中。您還可以爲數據添加顏色

library(ggplot2) 

groups = c("a", "b", "c") 
a = c(-1, 3, 2) 
c = c(5, 4, 3) 
b = c(-0.01, -0.002, -0.001) 
colors = RColorBrewer::brewer.pal(length(a), "Dark2") 
df <- data.frame(a, b, c, groups, x = 0, colors) 

fun <- function(x, a, b, c){ 
    function(x) a*x^2 + b*x + c 
} 

funs <- mapply(fun, a = df$a, b = df$b, c = df$c) 

p <- ggplot(data = df, aes(x=x)) + 
    xlim(-50,50) 

for (i in seq_len(nrow(df))){ 
    p <- p + 
    stat_function(fun = funs[[i]], color = colors[i]) 
} 

print(p) 
+0

這很好,謝謝!如果我想包括一個多項式項,即c + bx + bx^2或對數函數形式,即ln(y)= c + b * ln(x),那麼怎麼辦? geom_abline可以處理嗎? – Gooze

+0

非常感謝@Alex,這正是我一直在尋找的! – Gooze