web-dev-qa-db-ja.com

Rの重回帰から「回帰直線」をプロットする

いくつかの連続する予測子を使用して重回帰を実行しましたが、そのうちのいくつかは有意であり、予測子のoneに対する散布図または散布図のようなプロットを作成します。 「回帰線」。これどうやってするの?

私のプロットはこのようになります

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 )

このようにすると、たまたま私のデータがきれいに見えるからです。

8
baixiwei

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

サンプルデータがないと、これが正しく機能するかどうか確信が持てないため、以下にバグがある場合はお詫びしますが、これは少なくともアプローチを説明するものです。

# 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)
6
David Marx

線形モデルまたは一般化線形モデルの個々の項をプロットするには(つまり、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")
8
Hong Ooi

Predict.Plot 1つのオプションのTeachingDemosパッケージの関数。1つの予測子と他の予測子の特定の値での応答をプロットします。

3
Greg Snow