11

いくつかのデータを持っていますが、

calvarbyruno.1<-structure(list(Nominal = c(1, 3, 6, 10, 30, 50, 150, 250), Run = structure(c(1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("1", "2", "3"), class = "factor"), 
    PAR = c(1.25000000000000e-05, 0.000960333333333333, 0.00205833333333334, 
    0.00423333333333333, 0.0322333333333334, 0.614433333333334, 
    1.24333333333333, 1.86333333333333), PredLin = c(-0.0119152187070942, 
    0.00375925114245899, 0.0272709559167888, 0.0586198956158952, 
    0.215364594111427, 0.372109292606959, 1.15583278508462, 1.93955627756228
    ), PredQuad = c(-0.0615895732702735, -0.0501563307416599, 
    -0.0330831368244257, -0.0104619953693943, 0.100190275883806, 
    0.20675348710041, 0.6782336426345, 1.04748729725370)), .Names = c("Nominal", 
"Run", "PAR", "PredLin", "PredQuad"), row.names = c(NA, 8L), class = "data.frame")
calweight <- -2

線形および二次 lm モデルの両方を作成しました

callin.1<-lm(PAR~Nominal,data=calvarbyruno.1,weight=Nominal^calweight)
calquad.1<-lm(PAR~Nominal+I(Nominal^2),data=calvarbyruno.1,weight=Nominal^calweight)

次に、ggplot2 を使用してデータ値をプロットできます

qplot(PAR,Nominal,data=calvarbyruno.1)

しかし、2 つの lm オブジェクトを表す線を重ねる方法がわかりません...何かアイデアはありますか?

4

2 に答える 2

30

最も簡単なオプションは、geom_smooth() を使用して、ggplot2 をモデルに適合させることです。

ggplot(calvarbyruno.1, aes(y = PAR, x = Nominal, weight=Nominal^calweight)) + 
    geom_smooth(method = "lm") + 
    geom_smooth(method = "lm", formula = y ~ poly(x, 2), colour = "red") + 
    geom_point() + 
    coord_flip()

geom_smooth を使用したイラスト

または、予測値を使用して新しいデータセットを作成できます。

newdata <- data.frame(Nominal = pretty(calvarbyruno.1$Nominal, 100))
newdata$Linear <- predict(callin.1, newdata = newdata)
newdata$Quadratic <- predict(calquad.1, newdata = newdata)
require(reshape2)
newdata <- melt(newdata, id.vars = "Nominal", variable.name = "Model")
ggplot(calvarbyruno.1, aes(x = PAR, y = Nominal, weight=Nominal^calweight)) + 
    geom_line(data = newdata, aes(x = value, colour = Model)) + 
    geom_point()
于 2009-09-25T09:14:23.117 に答える
10

以前、私は関連する質問をしましたが、Hadley はこの良い答えを持っていました。その投稿の予測関数を使用すると、データに 2 つの列を追加できます。モデルごとに 1 つ:

calvarbyruno.1$calQuad <- predict(calquad.1)
calvarbyruno.1$callin <- predict(callin.1)

次に、ポイントをプロットし、各モデルを線として追加するだけです。

ggplot() + 
geom_point(data=calvarbyruno.1, aes(PAR, Nominal), colour="green") + 
geom_line(data=calvarbyruno.1, aes(calQuad, Nominal), colour="red" ) + 
geom_line(data=calvarbyruno.1, aes(callin, Nominal), colour="blue" ) + 
opts(aspect.ratio = 1)

その結果、この素敵な写真が得られます (そうです、色には多少の作業が必要になる可能性があります)。

代替テキスト
(出典:cerebralmastication.com

于 2009-09-25T15:19:59.510 に答える