2013-07-12 24 views
6

いくつかの連続予測子を使用した重回帰分析を実行しました。そのうちのいくつかが重要でした。私はに対してDVの散布図または散布図を作成したいと思います「回帰線」を含む予測変数の1つがです。これどうやってするの?複数回帰のR回帰図からの回帰直線のプロットR

私のプロットは、それは簡単な回帰だったら、私はこのような回帰直線を追加することができ、この

D = my.data; plot(D$probCategorySame, D$posttestScore) 

次のようになります。

lmSimple <- lm(posttestScore ~ probCategorySame, data=D) 
abline(lmSimple) 

しかし、私の実際のモデルは、このようなものです:

lmMultiple <- lm(posttestScore ~ pretestScore + probCategorySame + probDataRelated + practiceAccuracy + practiceNumTrials, data=D) 

私は係数を反映する回帰直線を追加したいと思います。実際の単純化されたモデルではなくモデルです。他のすべての予測変数に平均値を取って喜んでこれを行うことはできますが、私は逆のことを聞く準備ができています。

これは違いがないかもしれませんが、私はおそらく、元のデータをプロットしたくないという事実によって状況が少し複雑になるでしょう。代わりに、私はそうのように、予測値のビニング値に対するDVの平均値をプロットしたいと思います:

D[,'probCSBinned'] = cut(my.data$probCategorySame, as.numeric(seq(0,1,0.04)), include.lowest=TRUE, right=FALSE, labels=FALSE) 
D = aggregate(posttestScore~probCSBinned, data=D, FUN=mean) 
plot(D$probCSBinned, D$posttestScore) 

私がこのようにそれを行うときに、私のデータのための非常にクリーン探すために起こるという理由だけで。

+1

プロットの他のすべてのプレディクタの(静的な)値を指定することなく、単一のプレディクタに対してプロットすることはできません。表示する内容を明確にすることはできますか? –

+0

清算が追加されました。ありがとうございます。私は、他のすべての予測変数がその平均値を取ると仮定して行く傾向があると思います。 – baixiwei

答えて

4

プロットのドメインにx値のベクトルを作成し、モデルから対応するy値を予測する必要があります。これを行うには、モデル内の変数と一致する変数で構成されるデータフレームにこのベクトルを挿入する必要があります。あなたは、他の変数を平均値に固定しておいても問題ないと言いましたので、私はこのアプローチを自分のソリューションに使用しました。あなたが予測しているx値が実際にはの法律であるかどうかは、プロット内の他の値はおそらくこれを設定するときに考慮する必要があります。

サンプルデータがありません私はあなたのために正確に動作することは確かではありませんので、以下のバグがある場合はお詫びしますが、これは少なくともアプローチを示す必要があります。他の予測因子の特定の値に応じて対1つの予測をプロットする1つのオプションTeachingDemosパッケージのPredict.Plot機能で

# Setup 
xmin = 0; xmax=10 # domain of your plot 
D = my.data 
plot(D$probCategorySame, D$posttestScore, xlim=c(xmin,xmax)) 
lmMultiple <- lm(posttestScore ~ pretestScore + probCategorySame + probDataRelated + practiceAccuracy + practiceNumTrials, data=D) 

# create a dummy dataframe where all variables = their mean value for each record 
# except the variable we want to plot, which will vary incrementally over the 
# domain of the plot. We need this object to get the predicted values we 
# want to plot. 
N=1e4 
means = colMeans(D) 
dummyDF = t(as.data.frame(means)) 
for(i in 2:N){dummyDF=rbind(dummyDF,means)} # There's probably a more elegant way to do this. 
xv=seq(xmin,xmax, length.out=N) 
dummyDF$probCSBinned = xv 
# if this gives you a warning about "Coercing LHS to list," use bracket syntax: 
#dummyDF[,k] = xv # where k is the column index of the variable `posttestScore` 

# Getting and plotting predictions over our dummy data. 
yv=predict(lmMultiple, newdata=subset(dummyDF, select=c(-posttestScore))) 
lines(xv, yv) 
+0

ありがとう!アプローチは、「予測」の中で「データ」の代わりに「新しいデータ」を使用しなければならないという点を除き、機能しました。 – baixiwei

+0

時には、それは言う:警告はtermplot(mymodel): 'モデル'は、相互作用を含むように見えます:ヘルプページを参照してください、それは単に行の1つをプロットします – skan

2

ルック。

6

個々の項を線形または一般化線形モデル(すなわち、lmまたはglmでフィット)にプロットするには、termplotを使用します。ビニングやその他の操作は不要です。

# plot everything on one page 
par(mfrow=c(2,3)) 
termplot(lmMultiple) 

# plot individual term 
par(mfrow=c(1,1)) 
termplot(lmMultiple, terms="preTestScore") 
+2

こんにちは。私はtermplotを試してみました。そして、それぞれ異なるプロットでプロットしています。どのように私は同じグラフィックでalltogether得る? – skan