2つの勾配の差を計算する方法は?


11

2本の線が(多かれ少なかれ)平行であるかどうかを理解する方法はありますか?線形回帰から生成された2本の線があり、それらが平行かどうかを知りたいのですが。つまり、この2つの線の傾きの違いを知りたいのです。

これを計算するR関数はありますか?

編集: ...そして線形回帰直線の傾き(度単位)をどのように取得できますか?

回答:


23

明らかなものが足りないのではないかと思いますが、統計的にANCOVAを使用してこれを行うことはできませんか?重要な問題は、2つの回帰の勾配が誤差を伴って推定されることです。これらは、母集団全体の勾配の推定値です。2つの回帰直線が母集団内で平行かどうかが懸念事項である場合、正確な等価性についてと直接比較することは意味がありません。これらは両方とも、考慮に入れる必要のあるエラー/不確実性の影響を受けます。a1a2

これを統計的な観点から考え、両方のデータセットのとに関するデータを何らかの意味のある方法で組み合わせることができる場合(つまり、両方のセットのとは、2つの母集団から2つの母集団から描画されます変数は、2つの母集団で異なるのは、それらの間の関係にすぎません)。次の2つのモデルを近似できます。バツyバツy

y^=b0+b1バツ+b2g

そして

y^=b0+b1バツ+b2g+bバツg

ここで、はモデル係数、はグループ化変数/係数で、各観測がどのデータセットに属するかを示します。bg

分散分析表またはF比を使用して、2番目のより複雑なモデルが、より単純なモデルよりもデータに適しているかどうかをテストできます。より単純なモデルでは、2つの線の傾きは同じ()ですが、線は互いにだけオフセットされています。b1b2

より複雑なモデルには、線の傾きとグループ化変数間の相互作用が含まれます。この相互作用項の係数がゼロと大幅に異なる場合、または分散分析/ F比がより複雑なモデルがデータに適していることを示す場合、2つの線が平行であるというNull仮説を棄却する必要があります。

Rでダミーデータを使用した例を次に示します。最初に、勾配が等しいデータ:

set.seed(2)
samp <- factor(sample(rep(c("A","B"), each = 50)))
d1 <- data.frame(y = c(2,5)[as.numeric(samp)] + (0.5 * (1:100)) + rnorm(100),
                 x = 1:100,
                 g = samp)
m1 <- lm(y ~ x * g, data = d1)
m1.null <- lm(y ~ x + g, data = d1)
anova(m1.null, m1)

与える

> anova(m1.null, m1)
Analysis of Variance Table

Model 1: y ~ x + g
Model 2: y ~ x * g
  Res.Df    RSS Df Sum of Sq      F Pr(>F)
1     97 122.29                           
2     96 122.13  1   0.15918 0.1251 0.7243

このデータサンプルでは、​​勾配が等しいという帰無仮説を棄却できないことを示しています。もちろん、実際に差異があったとしても、差異を検出するのに十分な能力があり、サンプルサイズが小さすぎて予期した効果が得られなかったために誤ってnullを拒否できなかったことを確認したいと思います。

現在、さまざまなスロープがあります。

set.seed(42)
x <- seq(1, 100, by = 2)
d2 <- data.frame(y = c(2 + (0.5 * x) + rnorm(50),
                       5 + (1.5 * x) + rnorm(50)),
                 x = x,
                 g = rep(c("A","B"), each = 50))
m2 <- lm(y ~ x * g, data = d2)
m2.null <- lm(y ~ x + g, data = d2)
anova(m2.null, m2)

それは与える:

> anova(m2.null, m2)
Analysis of Variance Table

Model 1: y ~ x + g
Model 2: y ~ x * g
  Res.Df     RSS Df Sum of Sq     F    Pr(>F)    
1     97 21132.0                                 
2     96   103.8  1     21028 19439 < 2.2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1

ここでは、帰無仮説に対する実質的な証拠があるので、対立仮説を支持してそれを棄却できます(つまり、2つの線の勾配が等しいという仮説を棄却します)。

私が適合させた2つのモデル()の相互作用項は、2 つのグループの勾配の推定差を示します。最初のモデルの場合、勾配の差の推定値は小さい(約0.003)bバツg

> coef(m1)
(Intercept)           x          gB        x:gB 
2.100068977 0.500596394 2.659509181 0.002846393

そして、これに対するは、勾配のこの差が0であるという帰無仮説を棄却できません。t

> summary(m1)

Call:
lm(formula = y ~ x * g, data = d1)

Residuals:
     Min       1Q   Median       3Q      Max 
-2.32886 -0.81224 -0.01569  0.93010  2.29984 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) 2.100069   0.334669   6.275 1.01e-08 ***
x           0.500596   0.005256  95.249  < 2e-16 ***
gB          2.659509   0.461191   5.767 9.82e-08 ***
x:gB        0.002846   0.008047   0.354    0.724    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1 

Residual standard error: 1.128 on 96 degrees of freedom
Multiple R-squared: 0.9941, Adjusted R-squared: 0.9939 
F-statistic:  5347 on 3 and 96 DF,  p-value: < 2.2e-16 

2つのグループの勾配を異なるようにした2番目のデータセットに適合したモデルに目を向けると、2つの線の勾配の推定差は〜1単位であることがわかります。

> coef(m2)
(Intercept)           x          gB        x:gB 
  2.3627432   0.4920317   2.8931074   1.0048653 

グループ "A"の勾配は〜0.49(x上記の出力)ですが、グループ "B"の勾配を取得するには、グループ "A"の勾配に差分勾配(相互作用項を思い出してください)を追加する必要があります。 ; 〜0.49 +〜1 =〜1.49。これは、グループ「B」の1.5の勾配にかなり近いです。斜面のこの差に対する検定はまた、差の推定値が0から離れて制限されることを示しています。t

> summary(m2)

Call:
lm(formula = y ~ x * g, data = d2)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.1962 -0.5389  0.0373  0.6952  2.1072 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) 2.362743   0.294220   8.031 2.45e-12 ***
x           0.492032   0.005096  96.547  < 2e-16 ***
gB          2.893107   0.416090   6.953 4.33e-10 ***
x:gB        1.004865   0.007207 139.424  < 2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1 

Residual standard error: 1.04 on 96 degrees of freedom
Multiple R-squared: 0.9994, Adjusted R-squared: 0.9994 
F-statistic: 5.362e+04 on 3 and 96 DF,  p-value: < 2.2e-16

この非常に良い説明をありがとうございました。私の目標は、スロープが同じか少ないかを理解することですので、ANOVAを使用してテストすると思います。
2011年

2つのdistintベクトルがあり、それらのスロップを比較したいが、y(lm(x〜y)がない場合、ANOVAをどのように使用できますか?anova(lm(x〜1)、lm(y 〜1))が、私は警告を取得
デール

ここのベクトルとはどういう意味ですか?Rの意味と数学の意味のどちらですか?これはあなたが提起した質問とは大きく異なりますので、新しい質問を開始してください-これを編集 ないでください- コメントでそのような幅広い性質のフォローアップを行うことは不可能です。
Gavin Simpson

2つのモデルをANOVAと比較する必要があります... okですが、次の式でモデルを作成すると、x〜1とy〜1の別のモデルで警告が表示されます。私はRの意味で話している。どのようにできるのか?
デール

1
@Dail 2つの回帰をフィッティングして2つの勾配/線を取得した場合、両方のデータセットのxおよびyデータがあります。私の回答で述べたように、xsとysが2つのデータセットで同等である場合、すべてのデータ組み合わせてグループ化変数追加するだけで済みます。私の例では、ダミーデータを使用してこれを行う方法を示していますが、xおよびyデータが既にあります。これは、個別の回帰を当てはめるために使用したデータです。
Gavin Simpson

8

最初の質問は、実際にはジオメトリからです。フォームに2行ある場合:

y=a1バツ+b1
y=a2バツ+b2

a1=a2

日焼けα=a1αバツa1

α=アークタンa1

2π=360

α=アークタンa13602π

アークタンatan

サンプルRコード:

> x<-rnorm(100)
> y<-x+1+rnorm(100)/2
> mod<-lm(y~x)
> mod$coef
    (Intercept)           x 
      0.9416175   0.9850303 
    > mod$coef[2]
        x 
0.9850303 
> atan(mod$coef[2])*360/2/pi
       x 
44.56792 

最後の行は度です。

a1

α=180アークタンa13602π

注意。高校の三角法を思い出すのは楽しいことでしたが、本当に役立つ答えはGavin Simpsonからのものです。回帰直線の傾きは確率変数であるため、それらを比較するには統計的仮説フレームワークを使用する必要があります。


ありがとうございました!回帰から勾配を取得する方法 係数と切片を取得する必要がありますか?
2011年

多分線形回帰は、いくつかの関数で直接度を返しますか?
2011年

degress = +45とdegress = -315は同じ行ではないのですか?同じ線について話していませんか?
2011年

1

... @mpiktasの回答に続き、lmオブジェクトから勾配を抽出して上記の式を適用する方法を次に示します。

# prepare some data, see ?lm
ctl <- c(4.17,5.58,5.18,6.11,4.50,4.61,5.17,4.53,5.33,5.14)
trt <- c(4.81,4.17,4.41,3.59,5.87,3.83,6.03,4.89,4.32,4.69)
group <- gl(2,10,20, labels=c("Ctl","Trt"))
weight <- c(ctl, trt)

lm.D9 <- lm(weight ~ group)
# extract the slope (this is also used to draw a regression line if you wrote abline(lm.D9)
coefficients(lm.D9)["groupTrt"] 
      groupTrt 
   -0.371 
# use the arctan*a1 / (360 / (2*pi)) formula provided by mpiktas
atan(coefficients(lm.D9)["groupTrt"]) * (360/(2 * pi)) 
 groupTrt 
-20.35485 
180-atan(coefficients(lm.D9)["groupTrt"]) * (360/(2 * pi))
 groupTrt 
200.3549 

この例ではどうもありがとうございました。この場合、学位は-200ですか?
デール

はい。問題が解決したと思われる場合は、@ mpiktasの回答を正解としてチェックしてください。
RomanLuštrik

2π

1
@RomanLuštrik、コードを修正して正しい出力を追加しました。修正は自由に削除してください。
mpiktas
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.