2016-05-28 9 views
1

データセットでLOESS回帰と競合しようとするときに問題が発生します。私は適切に行を作成することができましたが、正しくプロットすることができません。LOESS回帰直線と信頼区間を表示する際の問題

このようなデータを調べました。 Iエラー

受信し、この時点で

animals.lo <- loess(X15p5 ~ Period, animals, weights = n.15p5)  
animals.lo  
summary(animals.lo)  
plot(X15p5~ Period, animals)  
lines(animals$X15p5, animals.lo, col="red") 

"xy.coordsでのエラー(X、Y): 'X' および 'Y' の長さが異なる"

をIを検索この問題は注文が必要な点が原因である可能性があることを読んで、私は進めました。

a <- order(animals$Period)  
lines(animals$X15p5[a], animals.lo$Period[a], col="red", lwd=3) 

この時点ではエラーはありませんでしたが、LOESS行は依然としてプロットに表示されませんでした。ポイントは正しく表示されましたが、ラインは表示されませんでした。私はこのしばらく働いや同じくらい私はできる限り読んしようとしているが、私はできていないされている

これは私が使用していたデータセットに似ている...

structure(list(Site = c("Cat", "Dog", "Bear", "Chicken", "Cow", 
"Bird", "Tiger", "Lion", "Leopard", "Wolf", "Puppy", "Kitten", 
"Emu", "Ostrich", "Elephant", "Sheep", "Goat", "Fish", "Iguana", 
"Monkey", "Gorilla", "Baboon", "Lemming", "Mouse", "Rat", "Hamster", 
"Eagle", "Parrot", "Crow", "Dove", "Falcon", "Hawk", "Sparrow", 
"Kite", "Chimpanzee", "Giraffe", "Bear", "Donkey", "Mule", "Horse", 
"Zebra", "Ox", "Snake", "Cobra", "Iguana", "Lizard", "Fly", "Mosquito", 
"Llama", "Butterfly", "Moth", "Worm", "Centipede", "Unicorn", 
"Pegasus", "Griffin", "Ogre", "Monster", "Demon", "Witch", "Vampire", 
"Mummy", "Ghoul", "Zombie"), Region = c(6L, 4L, 4L, 5L, 7L, 6L, 
2L, 4L, 6L, 7L, 7L, 4L, 6L, 4L, 4L, 4L, 4L, 3L, 4L, 4L, 4L, 4L, 
4L, 4L, 4L, 4L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 8L, 4L, 6L, 6L, 
4L, 2L, 7L, 4L, 2L, 2L, 7L, 3L, 4L, 7L, 4L, 4L, 4L, 7L, 7L, 4L, 
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 2L, 8L), Period = c(-2715, -3500, 
-3500, -4933.333333, -2715, -2715, -2715, -3500, -2715, -4350, 
-3500, -3500, -2950, -4350, -3650, -3500, -3500, -2715, -3650, 
-4350, -3500, -3500, -3400, -4350, -3500, -3500, -4350, -3900, 
-3808.333333, -4233.333333, -3500, -3900, -3958.333333, -3900, 
-3500, -3500, -3500, -2715, -3650, -2715, -2715, -2715, -2715, 
-3500, -2715, -2715, -3500, -4350, -3650, -3650, -4350, -5400, 
-3500, -3958.333333, -3400, -3400, -4350, -3600, -4350, -3650, 
-3500, -2715, -5400, -3500), Value = c(0.132625995, 0.163120567, 
0.228840125, 0.154931973, 0.110047847, 0.054347826, 0.188679245, 
0.245014245, 0.128378378, 0.021428571, 0.226277372, 0.176923077, 
0.104938272, 0.17659805, 0.143798024, 0.086956522, 0.0625, 0.160714286, 
0, 0.235588972, 0, 0, 0.208333333, 0.202247191, 0.364705882, 
0.174757282, 0, 0.4, 0.1, 0.184027778, 0.232876712, 0.160493827, 
0.74702381, 0.126984127, 0.080645161, 0.06557377, 0, 0.057692308, 
0.285714286, 0.489361702, 0.108695652, 0.377777778, 0, 0.522727273, 
0.024390244, 0.097560976, 0.275, 0, 0.0625, 0.255319149, 0.135135135, 
0.216216216, 0.222222222, 0.296296296, 0.222222222, 0.146341463, 
0.09375, 0.125, 0.041666667, 0.078947368, 0.2, 0.137931034, 0.571428571, 
0.142857143), Sample_size = c(188.5, 105.75, 79.75, 70, 52.25, 
46, 39.75, 39, 37, 35, 34.25, 32.5, 32.4, 30.76666667, 30.36666667, 
28.75, 28, 28, 28, 26.6, 25, 25, 24, 22.25, 21.25, 20.6, 20, 
20, 20, 19.2, 18.25, 18, 18, 16.8, 15.5, 15.25, 15, 13, 12.6, 
11.75, 11.5, 11.25, 11, 11, 10.25, 10.25, 10, 10, 9.6, 9.4, 9.25, 
9.25, 9, 9, 9, 8.2, 8, 8, 8, 7.6, 7.5, 7.25, 7, 7), Sample_sub = c(25, 
17.25, 18.25, 10.8452381, 5.75, 2.5, 7.5, 9.555555556, 4.75, 
0.75, 7.75, 5.75, 3.4, 5.433333333, 4.366666667, 2.5, 1.75, 4.5, 
0, 6.266666667, 0, 0, 5, 4.5, 7.75, 3.6, 0, 8, 2, 3.533333333, 
4.25, 2.888888889, 13.44642857, 2.133333333, 1.25, 1, 0, 0.75, 
3.6, 5.75, 1.25, 4.25, 0, 5.75, 0.25, 1, 2.75, 0, 0.6, 2.4, 1.25, 
2, 2, 2.666666667, 2, 1.2, 0.75, 1, 0.333333333, 0.6, 1.5, 1, 
4, 1)), .Names = c("Site", "Region", "Period", "Value", "Sample_size", 
"Sample_sub"), class = "data.frame", row.names = c(NA, -64L)) 

さらなる進路を作る。どんなアドバイスや指導も大歓迎です。


私は、このページHow to get the confidence intervals for LOWESS fit using R?のサイトで見つけた別の例以下の信頼区間を追加しようとしている

をプロットするために信頼区間を追加することでフォローアップ。これは信頼区間を提供していますが

plot(X15p5 ~ Period, animals) 
animals.lo2<-predict(loess(animals$X15p5 ~ animals$Period), se=T) 
a <- order(animals$Period) 
lines(animals$Period[a],animals.lo2$fit, col="red", lwd=3) 
lines(animals$Period[a],animals.lo2$fit - qt(0.975,animals.lo2$df)*animals.lo2$se, lty=2) 
lines(animals$Period[a],animals.lo2$fit + qt(0.975,animals.lo2$df)*animals.lo2$se, lty=2) 

、回帰直線はすべて間違っている:私はこのように、その適応

plot(cars) 
plx<-predict(loess(cars$dist ~ cars$speed), se=T) 

lines(cars$speed,plx$fit) 
lines(cars$speed,plx$fit - qt(0.975,plx$df)*plx$se, lty=2) 
lines(cars$speed,plx$fit + qt(0.975,plx$df)*plx$se, lty=2) 

そのページに与えられた例があります。 predictの機能に問題があるかどうか、または別の問題であるかどうかはわかりません。再度、感謝します!

+0

申し訳ありませんが、この例は私が使用していた正確なセットではありませんでした。 X15p5はValueに相当し、n.X15p5はSample_sizeに相当します。あなたの説明はうまくいった。ありがとう! – Corey

答えて

3

正しいコード私の周りを検索して、この問題を注文する必要がポイントに起因することができることを読んで、私は進ん

いいえ、いいえ。発注の問題は、表示されるエラーとは関係ありません。エラーを克服するために、あなたはここで

lines(animals$Period, animals.lo$fitted, col="red") 

lines(animals$X15p5, animals.lo, col="red") 

を交換する必要がある理由は、次のとおりです。

  1. loessは、オブジェクトのリストではなく、単一のベクトルを返します。 str(animals.lo)またはnames(animals.lo)を参照してください。
  2. なぜanimals$X15p5をx軸に使用しますか?あなたのモデルはX15p5 ~ Periodなので、x軸はPeriodになるはずです。

ために、デフォルトでは、Rラインアップポイントをので、あなたは、順序付けを行う必要があり

を並べ替えについて。一例として、これを持っ:

同様
set.seed(0); x <- runif(100, 0, 10) ## x is not in order 
set.seed(1); y <- sqrt(x) ## plot curve y = sqrt(x) 
par(mfrow = c(1,2)) 
plot(x, y, type = "l") ## this is a mess!! 
reorder <- order(x) 
plot(x[reorder], y[reorder], type = "l") ## this is nice 

foo

、ん:

0123:

a <- order(animals$Period)  
lines(animals$Period[a], animals.lo$fitted[a], col="red", lwd=3) 

信頼区間のフォローアップ

はこれを試してみてください

plot(X15p5 ~ Period, animals) 
animals.lo <- loess(X15p5 ~ Period, animals) 
pred <- predict(animals.lo, se = TRUE) 
a <- order(animals$Period) 
lines(animals$Period[a], pred$fit[a], col="red", lwd=3) 
lines(animals$Period[a], pred$fit[a] - qt(0.975, pred$df)*pred$se[a],lty=2) 
lines(animals$Period[a], pred$fit[a] - qt(0.975, pred$df)*pred$se[a],lty=2) 

もう一度並べ替えを忘れました。フィットした値と標準エラーの両方を並べ替える必要があります。

モデルのcarsのデータでは、並べ替えの必要はありません。理由:

はい、データは既にソートされています。

注私はあなたのコードに他の二つの変更を行ってきた:私はloessコールとpredictコールを分離している

  1. 。おそらく、これを行う必要はないかもしれませんが、一般的に、モデルフィッティングとモデル予測を分離し、両方のオブジェクトのコピーを保持するのは良い習慣です。
  2. loess(animals$X15p5 ~ animals$Period)loess(X15p5 ~ Period, animals)に変更しました。モデル式を指定するには$サインを使用するのは悪い習慣です。私はhttps://stackoverflow.com/a/37307270/4891738にそのようなスタイルのドローバックを示す別の答えを持っています。あなたはそこの "更新"セクションで読むことができます。私は例としてglmを使用しましたが、lmの場合はglm,loessのものは同じです。
+0

ワンダフル!どうもありがとうございました。 LOESSはさまざまな方法で使用することができ、説明は人が使用する方法に必ずしも適合しません。正しいコードだけでなく説明もありがとうございます! – Corey

+0

もう1つのフォローアップをお願い申し上げますが、私は信頼区間を追加したいと思います。 LOESSを使用して関数を予測することを推奨する人もいましたが、例と同様にコードを実行したとき、最初のLOESSカーブはかなり異なっていました。使用例は以下の通りです:--- plot(cars) plx <-predict(loess(自動車$ dist〜cars $ speed)、se = T) lines(自動車$スピード、plx $ fit) lines車$スピード、plx $ fit - qt(0.975、plx $ df)* plx $ se、lty = 2) ライン(自動車$スピード、plx $ fit + qt(0.975、plx $ df)* plx $ se、lty = 2) – Corey

+0

すぐに戻ってくれてありがとう。私はポストを他の提案されたコードで更新し、それを自分のデータセットにどのように適合させましたか?繰り返しますが、どんな助けも大歓迎です! – Corey