複数の 2 次元回帰を視覚化する戦略はありますか?

複数の 2 次元回帰を視覚化する戦略はありますか?

タイトルよりも内容で質問をより明確に説明できればと思います。特定の pgfplots テクニックよりも視覚化戦略に関するものかもしれません。問題は 2 次元入力の回帰に関するものですが、まずは 1 次元入力から始めさせてください。

私の実験では、入力 x を変化させ、出力 y を観察します。実験を 3 回繰り返します。プロットに結果が表示されます (コードは最後に記載されています)。

1次元入力の多重回帰

ここで、私の実験に 2 つの入力 x と y、および出力 z があると仮定します。1 つの実験からの観察結果は、次のようにプロットできます。

2次元入力の回帰

しかし、実験を繰り返した場合 (たとえば 4 ~ 5 回)、これらすべての結果を含む 3D プロットは、かなりわかりにくくなります。平均と偏差のプロットは見栄えは良いですが、情報が失われていることは確かです。実験を 2 回繰り返した場合 (2 セットの観測) の例を次に示します。プロットは次のようになります。

2次元入力の多重回帰

このケース (複数の xyz) をより良く視覚化できる戦略はありますか? 「より良く」というのは、個々の実験が明確に提示され、複数の実験が簡単に比較できるようにまとめて提示されるという意味かもしれません。

参考までに、これらはプロットを生成する pgfplots コードです。

複数の xyz プロット:

\begin{tikzpicture}[scale=0.8]
\begin{axis}
  [scale only axis, width=0.35\textwidth,
  xlabel=x, ylabel=y, zlabel=z, title=Two dimensional input,]
  \addplot3[surf,mesh/rows=5] coordinates { 
    (0,0,0) (1,0,0) (2,0,0) (3,0,0) 
    (0,1,0.1) (1,1,0.3) (2,1,0.3) (3,1,0.4) 
    (0,2,0.15) (1,2,0.5) (2,2,0.5) (3,2,0.5) 
    (0,3,0.65) (1,3,0.60) (2,3,0.65) (3,3,0.45) 
    (0,4,0.8) (1,4,0.75) (2,4,0.85) (3,4,0.65) 
  }; 
 \addplot3[surf,mesh/rows=5] coordinates { 
    (0,0,0.1) (1,0,0.1) (2,0,0) (3,0,0) 
    (0,1,0.3) (1,1,0.2) (2,1,0.2) (3,1,0.4) 
    (0,2,0.15) (1,2,0.6) (2,2,0.5) (3,2,0.5) 
    (0,3,0.55) (1,3,0.7) (2,3,0.65) (3,3,0.45) 
    (0,4,0.6) (1,4,0.85) (2,4,0.65) (3,4,0.35) 
  }; 
\end{axis} 
\end{tikzpicture}
\begin{tikzpicture}[scale=0.8]
\begin{axis}[scale only axis, width=0.3\textwidth,
  xlabel=x, ylabel=y, zlabel=z, title=Mean and Deviation,]
  \addplot3[surf,mesh/rows=5,
    error bars/z dir=both, error bars/z fixed=0.1,] coordinates { 
    (0,0,0.05) (1,0,0.05) (2,0,0) (3,0,0) 
    (0,1,0.2) (1,1,0.25) (2,1,0.25) (3,1,0.4) 
    (0,2,0.15) (1,2,0.55) (2,2,0.5) (3,2,0.5) 
    (0,3,0.65) (1,3,0.65) (2,3,0.65) (3,3,0.45) 
    (0,4,0.7) (1,4,0.80) (2,4,0.75) (3,4,0.5) 
  }; 
\end{axis} 
\end{tikzpicture}

単一の xyz プロット:

\begin{tikzpicture}[scale=0.8]
\begin{axis}
  [scale only axis, width=0.35\textwidth,
  xlabel=x, ylabel=y, zlabel=z, title=Two dimensional input,]
  \addplot3[surf,mesh/rows=5] coordinates { 
    (0,0,0) (1,0,0) (2,0,0) (3,0,0) 
    (0,1,0.1) (1,1,0.3) (2,1,0.3) (3,1,0.4) 
    (0,2,0.15) (1,2,0.5) (2,2,0.5) (3,2,0.5) 
    (0,3,0.65) (1,3,0.60) (2,3,0.65) (3,3,0.45) 
    (0,4,0.8) (1,4,0.75) (2,4,0.85) (3,4,0.65) 
  }; 
\end{axis} 
\end{tikzpicture}
\hfill
\begin{tikzpicture}[scale=0.8]
\begin{axis}[view={0}{90}, scale only axis, width=0.3\textwidth,
  xlabel=x, ylabel=y, zlabel=z, title=Top view of two dimensional input, ]
  \addplot3[surf,mesh/rows=5] coordinates { 
    (0,0,0) (1,0,0) (2,0,0) (3,0,0) 
    (0,1,0.1) (1,1,0.3) (2,1,0.3) (3,1,0.4) 
    (0,2,0.15) (1,2,0.5) (2,2,0.5) (3,2,0.5) 
    (0,3,0.65) (1,3,0.60) (2,3,0.65) (3,3,0.45) 
    (0,4,0.8) (1,4,0.75) (2,4,0.85) (3,4,0.65) 
  }; 
\end{axis} 
\end{tikzpicture}

複数の xy プロット:

\begin{tikzpicture}
\begin{axis}
  [scale only axis, width=0.3\textwidth,
  xlabel=x, ylabel=y, title=One dimensional input]
  \addplot coordinates{(0, 0.6) (0.1, 0.25) (0.2, 0.1) (0.3, 0.06) (0.4, 0.02) (0.5, 0.01)};
  \addplot coordinates{(0, 0.7) (0.1, 0.1) (0.2, 0.125) (0.3, 0.08) (0.4, 0.016) (0.5, 0.02)};
  \addplot coordinates{(0, 0.5) (0.1, 0.15) (0.2, 0.15) (0.3, 0.10) (0.4, 0.012) (0.5, 0.03)};
  \legend{exp1, exp2, exp3}
\end{axis}
\end{tikzpicture}
\hfill
\begin{tikzpicture}
\begin{axis}
  [scale only axis, width=0.3\textwidth,
  xlabel=x, ylabel=y, title=Mean and Deviation]
  \addplot[ error bars/.cd, y dir=both, y explicit, ]
    coordinates{(0, 0.6)  +- (0, 0.1) 
                    (0.1, 0.1)  +- (0, 0.1)
                    (0.2, 0.125) +- (0, 0.025)
                    (0.3, 0.08) +- (0, 0.08) 
                    (0.4, 0.016) +- (0, 0.04)
                  (0.5, 0.02) +- (0, 0.02)};
\end{axis}
\end{tikzpicture}

しかし、

答え1

この写真を入手するには...

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

...これらのコマンドを試してください。

pdflatex example.tex; asy  -twosided *.asy; pdflatex example.tex

...この例をコンパイルします。

\documentclass[]{article}
\usepackage[]{asymptote}
\begin{document}
Two Dimensional Input

\vspace{3cm}
\begin{asy}
settings.render=4;
import three;
import graph3;
currentlight=White;
currentprojection=orthographic(3,-5,1,center=true);
size(5cm);
size3(5cm,5cm,5cm, IgnoreAspect);

render render=render(compression=Low,merge=true);
triple[][] t1 = 
{
 {(0,0,0), (1,0,0), (2,0,0), (3,0,0) }, 
 {(0,1,0.1), (1,1,0.3), (2,1,0.3), (3,1,0.4)}, 
 {(0,2,0.15), (1,2,0.5), (2,2,0.5), (3,2,0.5)},
 {(0,3,0.65), (1,3,0.60), (2,3,0.65), (3,3,0.45)},
 {(0,4,0.8), (1,4,0.75), (2,4,0.85), (3,4,0.65)}
};
triple[][] t2 = 
{
   {(0,0,0.1), (1,0,0.1), (2,0,0), (3,0,0)},
   {(0,1,0.3), (1,1,0.2), (2,1,0.2), (3,1,0.4)},
   {(0,2,0.15), (1,2,0.6), (2,2,0.5), (3,2,0.5)},
   {(0,3,0.55), (1,3,0.7), (2,3,0.65), (3,3,0.45)},
   {(0,4,0.6),(1,4,0.85),(2,4,0.65),(3,4,0.35)}
};

draw(surface(t1), blue+opacity(0.9));
draw(surface(t2), red+opacity(0.6));

xaxis3("$x$",Bounds,InTicks);
yaxis3("$y$",Bounds,InTicks);
zaxis3("$z$",Bounds,InTicks);

\end{asy}
\end{document}

当然、pdflatex、asymptote パッケージ、asymptote がシステムにインストールされている必要があります。運が良ければ、最新バージョンの Acrobat Reader で PDF を開くと、インタラクティブな 3D オブジェクトも表示されます。

言うまでもなく、たとえ pgfplots でこれを実行できたとしても (簡単にはできないが)、非常に混乱するだろうという Jake の意見には私も同意します。

答え2

もう一つの同様の解決策は、純粋にpgfplots(ではなく)を使用するもので、サーフェスにオプションasymptoteを追加することです。次のようになります。opacity=0.5

 \addplot3[surf,mesh/rows=5, opacity=0.5] coordinates { ...

不透明度トリック

まだ完璧ではありませんが、少なくとも画像は物理的であり (ゴースト サーフェスが相互浸透します)、ありえない 3D オブジェクトを作成して脳に悪影響を与えることはありません。このトリックは、値が 0.5 (つまり、サーフェスが他のサーフェスをあまり覆わない) の場合にのみ機能することに注意してください。それ以外の場合、サーフェスは脳が奇妙に感じる方法で重なり始めます。

同じトリックをエラー バー ( opacity) で実行して、次の効果を得ることもできます。

誤差バー付きの不透明度

以下は最後の図の完全なコードです。

\documentclass{article}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}[scale=0.8]
\begin{axis}
  [scale only axis, width=0.35\textwidth,
  xlabel=x, ylabel=y, zlabel=z, title=Two dimensional input,]
  \addplot3[surf,mesh/rows=5,opacity=0.5] coordinates { 
    (0,0,0) (1,0,0) (2,0,0) (3,0,0) 
    (0,1,0.1) (1,1,0.3) (2,1,0.3) (3,1,0.4) 
    (0,2,0.15) (1,2,0.5) (2,2,0.5) (3,2,0.5) 
    (0,3,0.65) (1,3,0.60) (2,3,0.65) (3,3,0.45) 
    (0,4,0.8) (1,4,0.75) (2,4,0.85) (3,4,0.65) 
  }; 
 \addplot3[surf,mesh/rows=5, opacity=0.5] coordinates { 
    (0,0,0.1) (1,0,0.1) (2,0,0) (3,0,0) 
    (0,1,0.3) (1,1,0.2) (2,1,0.2) (3,1,0.4) 
    (0,2,0.15) (1,2,0.6) (2,2,0.5) (3,2,0.5) 
    (0,3,0.55) (1,3,0.7) (2,3,0.65) (3,3,0.45) 
    (0,4,0.6) (1,4,0.85) (2,4,0.65) (3,4,0.35) 
  }; 
  \addplot3[mesh/rows=5,
    error bars/z dir=both, error bars/z fixed=0.1, opacity=0.3, draw=none] coordinates { 
    (0,0,0.05) (1,0,0.05) (2,0,0) (3,0,0) 
    (0,1,0.2) (1,1,0.25) (2,1,0.25) (3,1,0.4) 
    (0,2,0.15) (1,2,0.55) (2,2,0.5) (3,2,0.5) 
    (0,3,0.65) (1,3,0.65) (2,3,0.65) (3,3,0.45) 
    (0,4,0.7) (1,4,0.80) (2,4,0.75) (3,4,0.5) 
  };
\end{axis} 
\end{tikzpicture}
\end{document}

関連情報