2012-04-27 10 views
1
library(Sleuth2) 

mlr<-lm(ex1222$Buchanan2000~ex1222$Perot96*ex1222$Gore2000) 


for (i in 0:3) { 
      assign(paste("betaHat", i, sep=""), 
      summary(mlr)$coeff[i+1,1]) 
       } 

x<-sort(ex1222$Perot96) 
y<-sort(ex1222$Gore2000) 


z1 <- outer(x, y, function(a,b) betaHat0+betaHat1*a+betaHat2*b+betaHat3*a*b) 
nrz <- nrow(z) 
ncz <- ncol(z) 

# Create a function interpolating colors in the range of specified colors 
jet.colors <- colorRampPalette(c("blue", "red")) 

# Generate the desired number of colors from this palette 
nbcol <- 100 
color <- jet.colors(nbcol) 

# Compute the z-value at the facet centres 
zfacet <- z[-1, -1] + z[-1, -ncz] + z[-nrz, -1] + z[-nrz, -ncz] 

# Recode facet z-values into color indices 
facetcol <- cut(zfacet, nbcol) 

persp(x, y, z1, col=color[facetcol],theta=-30, lwd=.3,xlab="Perot 96", ylab="Gore 2000", zlab="Predicted Votes for Buchanan") 

こんにちはに従って着色3Dプロットを作成します。私は、赤色(または実際にはどの色でもよい)のより暗い色合いの 'z'色の値を高くしたいと考えていました。、Z軸

これをどうやって行うかについての助けがあれば幸いです。

また、これを実現するために別の機能を提案することもできます。

ありがとうございました!

編集....私は新しいコードを?perspの例を見てから入れました。私は色を変更したいと思います。私は新しいプロットの可読性に満足していません。

+2

例4は、「Z値に対応する表面の色を」と題して、あなたが求めているものだけを示しています。あなた自身のデータにそれを適応させることはあまりにも厳しくすべきではありません。 –

+0

良い提案。私はそれを調べます。 – Michael

+0

その例を見てみましょう。それは私が欲しいものですが、2つの色を使います。私は単一の色が欲しい。 – Michael

答えて

5

あなたのコードを少し修正しました。

library(Sleuth2) 

それは$を介してデータフレームから抽出された予測変数を使用するよりも、data引数を使用することが一般的に、より良い習慣です:

mlr<-lm(Buchanan2000~Perot96*Gore2000,data=ex1222) 

我々は、クリーンでの回帰結果を得るためにexpand.grid()predict()を使用することができますway:

perot <- seq(1000,40000,by=1000) 
gore <- seq(1000,400000,by=2000) 

ファセットをth代わりにperot <- sort(unique(ex1222$Perot96)); gore <- sort(unique(ex1222$Gore2000))を使用することができます。

pframe <- with(ex1222,expand.grid(Perot96=perot,Gore2000=gore)) 
mlrpred <- predict(mlr,newdata=pframe) 

今行列に予測変換:

nrz <- length(perot) 
ncz <- length(gore) 
z <- matrix(mlrpred,nrow=nrz) 

Iは暗赤色(#cc0000、ビットに(緑/青のかなり赤#ffcccc)光赤色から行くことを選びました赤は何もありません)。あなたはまた、Rが組み込まれていレッズものを見るためにgrep("red",colors(),value=TRUE)を使用することができます。あなたは、プロットの「読みやすさと超満足していない」だと言う

# Generate the desired number of colors from this palette 
nbcol <- 100 
color <- jet.colors(nbcol) 

# Compute the z-value at the facet centres 
zfacet <- z[-1, -1] + z[-1, -ncz] + z[-nrz, -1] + z[-nrz, -ncz] 
# Recode facet z-values into color indices 
facetcol <- cut(zfacet, nbcol) 

persp(perot, gore, z, 
     col=color[facetcol],theta=-30, lwd=.3, 
     xlab="Perot 96", ylab="Gore 2000", zlab="Predicted Votes for Buchanan") 

enter image description here

jet.colors <- colorRampPalette(c("#ffcccc", "#cc0000")) 

、それはあまり具体的ではありません...私は?perspページでしばらく時間を費やして、あなたのオプションのいくつかを見てみましょう...

Anothe Rの選択はrglパッケージです:

library(rgl) 
## see ?persp3d for discussion of colour handling 
vertcol <- cut(z, nbcol) 
persp3d(perot, gore, z, 
     col=color[vertcol],smooth=FALSE,lit=FALSE, 
     xlab="Perot 96", ylab="Gore 2000", zlab="Predicted Votes for Buchanan") 

enter image description here

またcarパッケージからscatter3d見てみる価値があるかもしれない(SOそのグラフィカルなプロパティの一部を微調整する方法を説明した上で他の記事があります) 。`?persp`で

library(car) 
scatter3d(Buchanan2000~Perot96*Gore2000,data=ex1222) 

enter image description here

+0

Ben、モデルの予測は、私が使っていたものよりもはるかに滑らかです!お手伝いありがとう。 元のデータをプロットしておくことをお勧めします。何が起こっているのかをもう少し見ることができます。 "プロットの可読性にはあまり満足していません"私は、1次元の2次元プロットを使って応答曲面の曲率が変化するこの3次元モデルを表示することは避けられないほど厄介だと思います。 クリックしてドラッグして画像を回転させることができるプロットはすばらしいでしょう。 もう一度おねがいします! – Michael

+0

さて、あなたは本当に "元のデータ"を保持していません - ちょうどxとyの場所。編集を参照してください。 'rgl :: persp3d'か' car:scatter3d'のどちらかが動的なパースペクティブプロットを返します... –

+0

もう一度ありがとう!なんらかの理由で、私は 'rgl'パッケージを私のMacにロードするのにいくつかの困難を抱えています。そのパッケージに関する現在の問題の一般的なビットのように見えます。私はそれが元のデータではないことに同意します。おそらく、あなたの方法はより良いでしょう。 – Michael

関連する問題