2016-12-07 7 views
0

私はいくつかの列を持つリストを持っています。左端の列はx軸のデータであり、残りはさまざまなyのデータです。特定の範囲内の複数の列に対して線形回帰をプロットする

これらの列のそれぞれに対して線形回帰を生成したいが、xの特定の範囲についてのみ、線形回帰を0,0に強制したい。最後に、前記線形回帰の線勾配を抽出する。以下は私のデータの例です。ここ

x  y1  y2  y3  y4 
1 2.495 -1e-04 -1e-03 -1e-04 0e+00 
2 2.995 -2e-04 -7e-04 -2e-04 0e+00 
3 3.495 2e-04 -2e-04 1e-04 2e-04 
4 3.995 0e+00 -3e-04 0e+00 1e-04 
5 4.495 0e+00 -3e-04 0e+00 0e+00 
6 4.995 0e+00 -3e-04 0e+00 1e-04 
7 5.495 1e-04 -2e-04 0e+00 1e-04 
8 5.995 -1e-04 -1e-04 0e+00 3e-04 
9 6.495 1e-04 1e-04 2e-04 3e-04 
10 6.995 1e-04 0e+00 0e+00 3e-04 

は、例えば、私は0,0と交差する回帰を強制する、例えば行のxの3〜10の範囲のための線形回帰を得ることができます。最後に、y1、y2等に対する線形回帰からの傾きが得られる。

私はabind関数とlm関数を認識していますが、0,0の交差を強制せずに単一の回帰をプロットすることしかできませんでした。ありがとう

+0

はあなたの独立変数であり、これはあなたの依存をしているどの変数明確にもらえますか?インターセプトを強制的に0にするには、回帰モデルに 'lm(y〜x -1)'のように-1を加えるだけです。 – paqmo

+0

列xは独立変数ですが、y1、y2 ..は依存します。 – AGB

答えて

0

インターセプトのない回帰モデルは、回帰直線を原点に強制します。これは、Rにモデルに-1を加えることによって達成される。あなたが望むxの範囲を取得するには、単にその範囲に観測をサブセットと異なる独立変数をループにlapplyを使用します。

dat2 <- dat[3:9,] 
fits <- lapply(dat2[,-1], function(x) lm(x ~ dat2[,1] - 1)) 

ggplot2とデータと回帰ラインをプロットします。 reshape2パッケージのmeltを使用すると、データを長くすることができます。これは、カテゴリ内のデータを壊すggplot2役立ちます

library(ggplot2); library(reshape2) 
mdat <- melt(dat2,id="x") 
ggplot(data = mdat) + 
    geom_point(aes(y = value, x = x, color=variable)) + 
    geom_smooth(data=mdat,aes(x=x,y=value,color = variable),formula = y ~ x - 1, 
       method = "lm", se = F) 

enter image description here

+0

こんにちは、ありがとう!それは本当にうまくいった。私はサプリ機能にあまり精通していません。さらに多くのy列がありますが、どのようにして、すべてのy列を通過する別のサプリ関数をコーディングすることができますか?ありがとう – AGB

+0

今のところ、 'lapply'関数は、最初のもの(独立変数)を除くデータフレーム内のすべての列をループします。実際の問題はプロットするときに現れます。私が提供するコードがたくさんある場合は、私が提供するコードはかなり面倒で扱いにくいものです。それを自動化するためにyの値をループする方がいいでしょう。 – paqmo

+0

もう一度ありがとう、私はあなたにu.pvoteへの評判を持っていません申し訳ありません。それは本当にうまくいく。私の最終的な質問は、どのように線形フィットのすべての勾配の値を取得するのですか? – AGB

関連する問題