두 경사의 차이를 계산하는 방법은 무엇입니까?


12

두 줄이 (거의) 평행인지 이해하는 방법이 있습니까? 선형 회귀에서 생성 된 두 개의 선이 있으며 평행한지 이해하고 싶습니다. 다시 말해, 나는이 두 선의 경사를 다르게하고 싶습니다.

이것을 계산하는 R 함수가 있습니까?

편집 : ... 그리고 어떻게 선형 회귀선의 경사 (도)를 얻을 수 있습니까?

답변:


24

나는 분명한 것이 빠져 있는지 궁금하지만 ANCOVA를 사용하여 통계적으로 이것을 할 수 없습니까? 중요한 문제는 두 회귀의 기울기 오류 로 추정된다는 것 입니다. 그들은 전체 인구의 기울기를 추정 한 것입니다. 두 회귀선 이 모집단에 평행인지 아닌지에 대한 우려가 있다면 비교하는 것이 합리적이지 않습니다.12정확한 동등성을 위해 직접; 그것들은 모두 고려해야 할 오류 / 불확실성에 종속됩니다.

통계적인 관점에서이 점을 생각하면 데이터를 결합 할 수 있습니다. 엑스와이 의미있는 방식으로 두 데이터 세트 모두 (예 : 엑스와이 두 세트에서 두 변수에 대해 비슷한 범위를 가진 두 모집단에서 도출되는 것은 두 모집단에서 다른 변수 사이의 관계 일뿐입니다) 다음 두 모델에 적합 할 수 있습니다.

와이^=0+1엑스+2

와이^=0+1엑스+2+엑스

어디 나는 모델 계수이고 은 각 관측치에 속하는 데이터 세트를 나타내는 그룹화 변수 / 요인입니다.

ANOVA 테이블 또는 F- 비율을 사용하여 더 복잡한 두 번째 모델이 더 간단한 모델보다 데이터에 더 잘 맞는지 테스트 할 수 있습니다. 더 간단한 모델은 두 선의 기울기가 동일하다는 것을 나타냅니다.1) 그러나 선은 금액만큼 서로 오프셋됩니다. 2.

더 복잡한 모델에는 선의 기울기와 그룹화 변수 간의 상호 작용이 포함됩니다. 이 교호 작용 항의 계수가 0과 크게 다르거 나 ANOVA / F- 비가 더 복잡한 모형이 데이터에 더 잘 적합 함을 나타내면 두 선이 평행하다는 귀무 가설을 기각해야합니다.

다음은 더미 데이터를 사용하는 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

이 데이터 샘플에서 동일한 기울기의 귀무 가설을 기각하지 못했음을 나타냅니다. 물론, 실제로 차이가 있다면 차이를 감지 할 수있는 충분한 힘을 가졌기 때문에 샘플 크기가 너무 작아서 예상되는 효과를 얻지 못하기 때문에 널을 잘못 기각하지 못했을 것입니다.

이제 다른 경사로.

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

여기서 우리는 귀무 가설에 대한 실질적인 증거가 있으므로 대안에 찬성하여 거부 할 수 있습니다 (즉, 두 선의 기울기가 같다는 가설을 기각합니다).

내가 장착 한 두 모델의 교호 작용 항엑스)는 두 그룹의 예상 경사 차이를 제공합니다. 첫 번째 모델의 경우 기울기 차이의 추정치는 작습니다 (~ 0.003)

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

그리고 이것에 대한 -test는이 기울기 차이가 0이라는 귀무 가설을 기각하지 못합니다.

> 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 

두 그룹에 대한 경사를 다르게 설정 한 두 번째 데이터 세트에 적합한 모형을 살펴보면 두 선의 경사의 추정 된 차이가 ~ 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에 매우 가깝습니다. ㅏ이 기울기 차이에 대한 -test는 차이의 추정치가 0에서 멀어짐을 나타냅니다.

> 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를 사용하여 테스트 할 것입니다.
데일

두 개의 불분명 한 벡터가 있고 그 slops를 비교하고 싶지만 y (lm (x ~ y)가없는 경우 어떻게 ANOVA를 사용할 수 있습니까? 나는 anova (lm (x ~ 1), lm (y ~ 1)) 그러나 경고 메시지가 표시됨
Dail

여기서 벡터는 무엇을 의미합니까? R 의미 또는 수학적 의미에서? 이것은 당신이 제기 한 질문과는 매우 다르므로, 새로운 질문을 시작하십시오 – 질문을 편집 하지 마십시오 – 의견에서 그러한 광범위한 성격의 후속 조치를 수행하는 것은 불가능합니다.
개빈 심슨

기다리지 말고 두 모델을 ANOVA와 비교해야합니다 ... ok,하지만이 공식으로 모델을 만들면 x ~ 1 및 y ~ 1 인 다른 모델을 경고합니다. 나는 R 의미로 이야기하고 있습니다. 어떻게해야합니까?
Dail

1
@Dail 두 개의 기울기 / 선을 얻기 위해 두 개의 회귀 분석을 적용한 경우 두 데이터 세트 모두에 대해 x 및 y 데이터가 있습니다. 내 대답에 말했듯 인 xs와 YS는 두 데이터 세트에 비교하면, 당신은 모든 데이터를 결합 할 수 있습니다 그룹화 변수를 추가합니다. 내 예제는 더미 데이터를 사용 하여이 작업을 수행하는 방법을 보여 주지만 이미 x 및 y 데이터가 있습니다.이 데이터는 별도의 회귀 분석에 사용되는 데이터입니다.
개빈 심슨

8

첫 번째 질문은 실제로 기하학입니다. 두 줄의 양식이있는 경우 :

와이=1엑스+1
와이=2엑스+2

그런 경우 그들은 평행 1=2. 따라서 경사가 같으면 선이 평행합니다.

두 번째 질문에는 탠 껍질α=1, 어디 α 선이 이루는 각도입니다 엑스1선의 기울기입니다. 그래서

α=아크 탄1

도 단위로 변환하려면 2π=360. 따라서 학위의 답은

α=아크 탄13602π.

에 대한 R 함수 아크 탄이라고 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 

마지막 줄은 도입니다.

최신 정보. 음의 기울기 값을도 단위로 변환하려면 다른 규칙을 따라야합니다. x 축과의 각도는 x 축 위에 있다고 가정하기 때문에 x 축과의 각도는 0에서 180 사이의 값을 얻을 수 있습니다. 따라서 음수 값의 경우1공식은 다음과 같습니다.

α=180아크 탄13602π.

노트. 고등학교 삼각법을 기억하는 것이 즐거웠지만 실제로 유용한 답변은 Gavin Simpson이 제공 한 것입니다. 회귀선의 기울기는 랜덤 변수이므로이를 비교하기 위해 통계적 가설 체계를 사용해야합니다.


감사합니다! 회귀에서 기울기를 얻는 방법? 계수와 절편을 가져와야합니까?
Dail

아마도 선형 회귀는 일부 함수로 직접 각도를 반환합니까?
데일

degress = +45와 degress = -315는 같은 줄이 아닙니까? 같은 줄에 대해 이야기하고 있지 않은가?
데일

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의 답변을 올바른 것으로 선택하십시오. 감사합니다.
로마 Luštrik

@ RomanLuštrik, 당신은 부서를 그리워 2π
mpiktas

1
@ RomanLuštrik, 코드를 수정하고 올바른 출력을 추가했습니다. 수정을 자유롭게 제거하십시오.
mpiktas
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.