0

リストがctlnsあり、データの視覚化を作成しようとしています

ctlns<-list(structure(list(level = 10, x = c(0.101666666666667, 0.06, 
0.0385714285714286, 0.035, 0.035, 0.035, 0.04, 0.0433333333333333, 
0.05, 0.0516666666666667, 0.06, 0.0606416584402764, 0.0606416584402764, 
0.0766666666666667, 0.0766666666666667, 0.0933333333333333, 0.0933333333333333, 
0.0975, 0.11, 0.110956351152526, 0.110956351152526, 0.135, 0.135
), y = c(0.01, 0.04125, 0.06, 0.11, 0.16, 0.21, 0.26, 0.31, 0.36, 
0.41, 0.458123195380173, 0.46, 0.51, 0.56, 0.61, 0.66, 0.71, 
0.76, 0.808123195380173, 0.81, 0.86, 0.91, 0.96)), .Names = c("level", 
"x", "y")))

その後私は、

 plot(ctlns[[1]]$x,ctlns[[1]]$y, xlim=c(0,.21), ylim=c(0,1), lwd=2, type="l", col="darkred" )

そして、私はプロットを取得します ここに画像の説明を入力

曲線構造の一部 (y<0.2) を維持しながら、赤い曲線 (y>0.2) の上部を滑らかにしたいと思います。

lines(lowess(ctlns[[1]]$x,ctlns[[1]]$y,f=2/3), lwd=2, col="darkblue")

前の部分はうまく処理されますが、曲線の下部は削除されます。次の質問があります。

  1. あれ、なんでこうなるの?
  2. 赤い曲線の下部を保持して滑らかにするにはどうすればよいですか? それとも、曲線/滑らかな線を組み合わせますか?
  3. 赤い曲線を無視して、青い曲線データに基づいて lowess に y=0 まで値を外挿するように指示するにはどうすればよいですか?

agstudyとの議論の後に編集

赤い線の曲線の性質のため、必要なのは平滑化関数ではなくy~x、点をある種の曲線で結ぶグラフ関数である可能性が高いと考えていました。x, yポイントは、ベクトル内に表示される順序で接続する必要があります(x[1]withy[1]など...)

ここに画像の説明を入力

これは可能ですか?

4

2 に答える 2

5

xsplineおそらく、関数を使用したいでしょう(またはgrid.xsplineグリッド グラフィックを使用している場合)。

plot( ctlns[[1]], type='l', col='red' )
xspline( ctlns[[1]], shape=1, border='blue' )

データの事前平滑化を行うこともできます。これは、いくつかの助けにもなります。

tmp.x <- ctlns[[1]]$x
tmp.y <- ctlns[[1]]$y

tmp <- cumsum( c(TRUE, head(tmp.x,-1) != tail(tmp.x,-1) ) )

tmp2.x <- tapply( tmp.x, tmp, mean )
tmp2.y <- tapply( tmp.y, tmp, mean )

xspline( tmp2.x, tmp2.y, shape=1, border='green' )

または平滑化に黄土を使用します。

fit <- loess( tmp.y ~ tmp.x+tmp )
tmp3.y <- tapply( fitted(fit), tmp, mean )
xspline( tmp2.x, tmp3.y, shape=1, border='orange' )
于 2013-01-10T18:07:57.887 に答える
2

あなたの質問のパート2に答えるには:

lines(lowess(ctlns[[1]]$x[ctlns[[1]]$y<0.2],
            ctlns[[1]]$y[ctlns[[1]]$y<0.2]), lwd=2, col="darkblue")

あなたの質問の最初の部分では、アルゴリズムは関数 (用語の数学的定義) で機能するように設計されていると思います。x の重複を削除します。

OPコメントの後に編集してください!

私にとって、これは良いことです。少なくとも、LOESS 関数を最適な方法で使用することです。すべてのパーツを結合したい場合は、問題を引き起こすポイントに対して小さな線を作成します。

 ids <- duplicated(ctlns[[1]]$x) & ctlns[[1]]$y < 0.25
 lines(ctlns[[1]]$x[ids],ctlns[[1]]$y[ids], lwd=4, col="darkblue")

ここに画像の説明を入力

于 2013-01-09T14:27:12.867 に答える