17

ここにRタグを追加するために、学生からよく寄せられる質問をいくつか投稿します。私は何年にもわたってこれらに対する独自の答えを開発してきましたが、おそらく私が知らないより良い方法が浮かんでいます。

y質問:私は連続で回帰を実行しましたxが、因子f(ここでlevels(f)生成されますc("level1","level2")

 thelm <- lm(y~x*f,data=thedata)

yここで、の予測値を、でx定義されたグループごとに分類してプロットしたいと思いますf。私が得るすべてのプロットは醜く、あまりにも多くの線を示しています。

私の答え:predict()関数を試してください。

##restrict prediction to the valid data 
##from the model by using thelm$model rather than thedata

 thedata$yhat <- predict(thelm,
      newdata=expand.grid(x=range(thelm$model$x),
                          f=levels(thelm$model$f)))

 plot(yhat~x,data=thethedata,subset=f=="level1")
 lines(yhat~x,data=thedata,subset=f=="level2")

(1)初心者にとって理解しやすい、および/または(2)他の観点からより良いアイデアは他にありますか?

4

4 に答える 4

19

効果パッケージには、回帰の予測値を視覚化するための優れたプロット方法があります。

thedata<-data.frame(x=rnorm(20),f=rep(c("level1","level2"),10))
thedata$y<-rnorm(20,,3)+thedata$x*(as.numeric(thedata$f)-1)

library(effects)
model.lm <- lm(formula=y ~ x*f,data=thedata)
plot(effect(term="x:f",mod=model.lm,default.levels=20),multiline=TRUE)
于 2009-09-08T17:26:04.857 に答える
3

ええと-まだ私の脳を包み込もうとしていexpand.grid()ます。比較のために、これは私がそれを行う方法です(ggplot2を使用):

thedata <- data.frame(predict(thelm), thelm$model$x, thelm$model$f)

ggplot(thedata, aes(x = x, y = yhat, group = f, color = f)) + geom_line()

ggplot()ロジックは非常に直感的だと思います。つまり、線をfでグループ化して色付けします。グループの数が増えるにつれ、それぞれにレイヤーを指定する必要がなくなることがますます役に立ちます。

于 2009-09-08T17:31:32.847 に答える
2

私はRの専門家ではありません。しかし、私は以下を使用します。

xyplot(y ~ x, groups= f, data= Dat, type= c('p','r'), 
   grid= T, lwd= 3, auto.key= T,)

これもオプションです。

interaction.plot(f,x,y, type="b", col=c(1:3), 
             leg.bty="0", leg.bg="beige", lwd=1, pch=c(18,24), 
             xlab="", 
             ylab="",
             trace.label="",
             main="Interaction Plot")
于 2012-10-22T22:41:22.913 に答える
1

これは、Mattによる優れた提案と、Helgiに似ているが、ggplotを使用したソリューションへの小さな変更です。上記との唯一の違いは、回帰直線を直接プロットするgeom_smooth(method ='lm)を使用したことです。

set.seed(1)
y = runif(100,1,10)
x = runif(100,1,10)
f = rep(c('level 1','level 2'),50)
thedata = data.frame(x,y,f)
library(ggplot2)
ggplot(thedata,aes(x=x,y=y,color=f))+geom_smooth(method='lm',se=F)
于 2017-08-22T14:46:09.307 に答える