4

x同じ2つの変数を測定するさまざまなデータセットから導出された線形モデルと非線形モデルのリストがあり、yを使用して同じプロットにプロットしたいと思いますstat_smoothxこれは、データセット間およびデータセット間の関係の形を簡単に比較できるようにするためyです。

私はこれを行うための最も効果的な方法を見つけようとしています。現在、空のggplotオブジェクトを作成してから、ある種のループを使用するかlapply、そのオブジェクトに順次追加することを検討していますが、これは思ったよりも難しいことがわかっています。もちろん、単にモデルを提供するのが最も簡単ですggplotが、私が知る限り、これは不可能です。何かご意見は?

これは、線形と指数の2つのモデルを使用して再生する簡単なデータセットの例です。

df1=data.frame(x=rnorm(10),y=rnorm(10))
df2=data.frame(x=rnorm(15),y=rnorm(15))

df.list=list(lm(y~x,df1),nls(y~exp(a+b*x),start=list(a=1,b=1),df2))

そして、2つの別々のプロット例:

ggplot(df1,aes(x,y))+stat_smooth(method=lm,se=F)
ggplot(df2,aes(x,y))+stat_smooth(method=nls,formula=y~exp(a+b*x),start=list(a=1,b=1),se=F)
4

2 に答える 2

9

編集:この回答が投稿された後、OPが質問を変更したことに注意してください

データを単一のデータフレームに結合し、モデルを示す新しい列を作成してから、を使用ggplotしてモデルを区別します。

df1=data.frame(x=rnorm(10),y=rnorm(10))
df2=data.frame(x=rnorm(10),y=rnorm(10))

df1$model <- "A"
df2$model <- "B"

dfc <- rbind(df1, df2)

library(ggplot2)
ggplot(dfc, aes(x, y, group=model)) + geom_point() + stat_smooth(aes(col=model))

これにより、次のものが生成されます。

ここに画像の説明を入力してください

于 2012-11-08T17:34:34.930 に答える
3

ここでの答えは、これを実行したいXとYの共通の範囲を取得し、そこから移動することだと思います。予測を使用して各モデルから曲線を引き出し、l_plyを使用してggplotにレイヤーを追加できます。

d

f1=data.frame(x=rnorm(10),y=rnorm(10))
df2=data.frame(x=rnorm(15),y=rnorm(15))

df.list=list(lm(y~x,df1),nls(y~exp(a+b*x),start=list(a=1,b=1),df2))


a<-ggplot()


#get the range of x you want to look at
x<-seq(min(c(df1$x, df2$x)), max(c(df1$x, df2$x)), .01)

#use l_ply to keep adding layers
l_ply(df.list, function(amod){

  #a data frame for predictors and response
  ndf <- data.frame(x=x)

  #get the response using predict - you can even get a CI here
  ndf$y <- predict(amod, ndf)

  #now add this new layer to the plot
  a<<- a+geom_line(ndf, mapping=(aes(x=x, y=y)))

} )

a

または、モデル番号などの素敵なカラーキーが必要な場合:

names(df.list) <- 1:length(df.list)
modFits <- ldply(df.list, function(amod){
  ndf <- data.frame(x=x)

  #get the response using predict - you can even get a CI here
  ndf$y <- predict(amod, ndf)

  ndf

  })


qplot(x, y, geom="line", colour=.id, data=modFits)
于 2012-11-08T21:12:24.867 に答える