[R데이터분석] 상관분석/회귀분석

근이의 개발일기·2024년 12월 9일
post-thumbnail

분석 전 검증

검증 항목상관분석회귀분석
정규성O (Pearson)O (잔차의 정규성)
독립성O (독립 표본)O (잔차의 독립성)
선형성O (산점도)O (적합값 플롯)
등분산성XO (잔차의 등분산성)
다중공선성XO (VIF)
이상치 탐색O (박스플롯)O (잔차 플롯)
  • 샘플 크기가 30개 이상이면 정규성 검사를 생략해도 됩니다.
  • 랜덤 샘플링된 데이터라면 독립성을 따로 검정할 필요가 없습니다.
  • 상관계수가 높다면 선형성을 만족하는 것으로 간주할 수 있습니다.
  • 이상치는 박스플롯에서 확인하고 2개 이하라면 무시해도 무방합니다.
  • 변수가 2~3개라면 다중공선성을 고려하지 않아도 됩니다.

상관계수검정 : cor.test

plot(c)
lines(lowess(c))
cor.test(cspeed,cspeed,cdist)

    Pearson's product-moment correlation

data: cspeedandcspeed and cdist
t = 9.464, df = 48, p-value = 1.49e-12
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
0.6816422 0.8862036
sample estimates:
cor
0.8068949

💡
  • cor.test의 결과 p-value로 유의미한 선형관계가 있는지 판단할 수 있다!
  • 상관계수 (cor):
    • 속도(c$speed)와 제동거리(c$dist) 사이의 상관계수 r는 0.8069로, 이는 강한 양의 선형 관계를 의미합니다.
    • 속도가 증가할수록 제동거리도 증가하는 경향이 있습니다.
  • p-value:
    • p-value = 1.49e-12로 매우 작으므로, 귀무가설(H0: 상관관계가 없다)을 기각합니다.
    • 결론: 속도와 제동거리 사이에는 통계적으로 유의한 선형 관계가 있습니다.
  • 신뢰구간:
    • 상관계수의 95% 신뢰구간은 [0.6816, 0.8862]입니다.
    • 신뢰구간에 0이 포함되지 않기 때문에, 속도와 제동거리 사이의 선형 관계는 유의미하다고 볼 수 있습니다.
  • 최종 해석:
    - 속도와 제동거리 간에 강한 양의 선형 관계가 있으며, 속도가 증가할수록 제동거리도 증가하는 경향을 보입니다.
    - 이 관계는 통계적으로 유의미하며, 상관계수는 약 0.8069로 매우 강한 양의 선형 관계를 나타냅니다.
    - p-value = 1.49e-12로 유의수준(0.05)보다 훨씬 작기 때문에, 속도와 제동거리 사이에 유의미한 관계가 있다고 결론지을 수 있습니다.

단순선형회귀분석

lm(dist~speed, data=c)

Call:
lm(formula = dist ~ speed, data = c)

Coefficients:
(Intercept) speed

-17.579 3.932

abline(lm(cdist cdist~cspeed),col='blue')

image.png

summary(lm(cdist cdist~cspeed))

Call:
lm(formula = cdist cdist ~ cspeed)

Residuals:
Min 1Q Median 3Q Max
-29.069 -9.525 -2.272 9.215 43.201

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -17.5791 6.7584 -2.601 0.0123 *
c$speed 3.9324 0.4155 9.464 1.49e-12 ***

Signif. codes: 0 ‘*’ 0.001 ‘’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 15.38 on 48 degrees of freedom
Multiple R-squared: 0.6511, Adjusted R-squared: 0.6438
F-statistic: 89.57 on 1 and 48 DF, p-value: 1.49e-12

💡

Estimate : 3.9324

  • 속도가 1단위 증가할 때마다 평균적으로 제동거리가 3.9324 증가합니다.

Std. Error : 0.4155

  • c$speed의 표준 오차: 0.4155
  • 표준 오차가 작을수록 해당 계수의 추정이 더 정확하다는 의미.

t-statistic : 9.464

  • t-값이 클수록 해당 계수가 0이 아닐 가능성이 큽니다.
  • 속도(c$speed)의 t-값이 9.464로 매우 크기 때문에, 속도는 제동거리에 강한 영향을 미친다고 볼 수 있습니다.

p-value : 1.49e-12

  • (Intercept): 0.0123p-value < 0.05로 유의미.
  • c$speed: 1.49e-12 → 매우 작은 값으로, 속도가 제동거리에 유의한 영향을 미친다고 결론지을 수 있습니다.
  • Signif. codes
    • *** (p < 0.001): 매우 유의미
    • ** (p < 0.01): 유의미
    • * (p < 0.05): 약간 유의미

Residual standard error: 15.38 on 48 degrees of freedom

  • 잔차의 표준편차로, 잔차의 평균적인 크기를 나타냅니다.
  • 값이 15.38이므로, 예측값과 실제 값 사이의 평균적인 차이가 약 15.38 단위라는 의미.
  • 자유도 (Degrees of Freedom, DF):
    • n−p−1n - p - 1n−p−1 (n: 표본 수, p: 독립변수 수)
    • 자유도: 48 (총 샘플 수 50, 독립변수 1개)

Multiple R-squared: 0.6511, Adjusted R-squared: 0.6438

  • Multiple R-squared (R^2) = 0.6511
    • 회귀 모델이 제동거리의 65.11% 변동을 설명할 수 있다는 의미.
  • Adjusted R-squared = 0.6438
    • 독립변수의 개수에 따라 조정된 R^2
    • 이 값은 모델의 과적합(overfitting)을 방지하기 위해 조정됩니다.
  • F-statistic: 89.57 on 1 and 48 DF, p-value: 1.49e-12
    • statistic = 89.57
      • 모델 전체의 유의성을 검정합니다.
      • 독립변수 c$speed가 종속변수 c$dist에 유의한 영향을 미치는지를 판단합니다.
    • 자유도 (DF)
      • on 1 and 48 DF:
        • 독립변수의 개수: 1
        • 잔차의 자유도: 48
    • p-value = 1.49e-12:
      • 매우 작은 값으로, 모델이 통계적으로 유의미하다는 의미.
  • 결론
    1. 속도가 1 단위 증가할 때마다 제동거리는 평균적으로 3.932 증가.
    2. 회귀모델이 제동거리 변동의 약 65.11%를 설명할 수 있음.
    3. p-value가 매우 작으므로, 속도는 제동거리에 유의미한 영향을 미친다고 결론지을 수 있습니다.

단순선형회귀분석 : 가변수의 사용

  • continous 범위에 따라 decriptive로 변환해준다. (0과 1로 나누어준다!)
  • 0인값이 기준값이 되고, 1인 값이 내가 변화량을 보고싶은 상태를 넣어준다!

csgr=ifelse(csgr=ifelse(cspeed<=15,0,1)
View(c)
res=lm(dist~sgr, data=c)
res

Call:
lm(formula = dist ~ sgr, data = c)

Coefficients:
(Intercept) sgr

27.50 32.25

  • 15이하인 것에 비해서 32만큼 더 간다. → 평균의 차이를 나타낸다.

cd1=ifelse(cd1=ifelse(cspeed>12&cspeed<=20,1,0)cspeed<=20,1,0) cd2=ifelse(c$speed>20,1,0)
View(c)
res=lm(dist~d1+d2, data=c)
res

Call:
lm(formula = dist ~ d1 + d2, data = c)

Coefficients:
(Intercept) d1 d2

18.20 28.09 64.66

💡

베이스 라인에 비해서 얼마만큼의 평균 변화량을 가지는지
관측치는 base값+변화량을 적용해주어야한다!!

  • (Intercept) = 18.20:
    • c$speed12 이하일 때, 예측된 제동거리의 평균이 18.20임.
  • d1 = 28.09:
    • c$speed(12, 20] 구간에 속하면, 제동거리는 기본값 18.2028.09를 더한 값으로 예측됩니다.
    • 이 경우의 제동거리는:
      dist=18.20+28.09=46.29
      dist=18.20+28.09=46.29\text{dist} = 18.20 + 28.09 = 46.29
  • d2 = 64.66:
    • c$speed20보다 클 때, 제동거리는 기본값 18.2064.66을 더한 값으로 예측됩니다.
    • 이 경우의 제동거리는:
      dist=18.20+64.66=82.86
      dist=18.20+64.66=82.86\text{dist} = 18.20 + 64.66 = 82.86
  • 모델의 해석:
    • 제동거리는 속도에 따라 3가지 구간으로 구분됩니다.
      • 속도 ≤12: 제동거리 18.20 ≤12\leq 12
      • 속도 (12,20]: 제동거리 46.29 (12,20](12, 20]
      • 속도 >20: 제동거리 82.86

        20> 20

  • 모델의 의미:
    • 속도가 낮을 때(12 이하) 제동거리는 작음 (18.20).
    • 속도가 12~20 사이로 증가하면 제동거리가 약 46.29로 급증.
    • 속도가 20을 초과하면 제동거리가 82.86로 더욱 급증.
  • 더미 변수 해석:
    • d1d1d1과 d2는 특정 속도 구간에 해당하는 관측치를 구분하는 더미 변수. d2d2
    • 속도 구간에 따른 구분된 제동거리의 차이를 해석할 수 있음.
    • 회귀 모델을 사용해 속도에 따른 구간별 제동거리 변화를 예측할 수 있음.
  • 속도의 영향:
    - 속도 증가에 따라 제동거리는 비선형으로 증가함.
    - 이 모델은 속도 구간에 따른 제동거리의 변화를 단계별로 구분하는 방식임.

p=PlantGrowth
res=lm(weight~factor(group), data=p)
res

Call:
lm(formula = weight ~ factor(group), data = p)

Coefficients:
(Intercept) factor(group)trt1 factor(group)trt2

5.032 -0.371 0.494

💡
  1. Intercept (절편) = 5.032
    • 기준 그룹인 ctrl의 평균 weight가 5.032라는 의미입니다.
    • 즉, group이 ctrl일 때의 weight의 평균은 5.032입니다.
  2. factor(group)trt1 = -0.371
    • trt1 그룹의 weight는 기준 그룹(ctrl)보다 평균적으로 0.371만큼 낮다는 의미입니다.
    • trt1의 평균 weight는 다음과 같이 계산됩니다.
      평균(weight, trt1)=5.032+(−0.371)=4.661
      평균(weight, trt1)=5.032+(−0.371)=4.661\text{평균(weight, trt1)} = 5.032 + (-0.371) = 4.661
    • 즉, trt1 그룹의 평균 weight는 4.661입니다.
  3. factor(group)trt2 = 0.494
    - trt2 그룹의 weight는 기준 그룹(ctrl)보다 평균적으로 0.494만큼 크다는 의미입니다.
    - trt2의 평균 weight는 다음과 같이 계산됩니다.
    평균(weight, trt2)=5.032+0.494=5.526
        평균(weight, trt2)=5.032+0.494=5.526\text{평균(weight, trt2)} = 5.032 + 0.494 = 5.526
        
    - 즉, trt2 그룹의 평균 weight는 **5.526**입니다.

베이스라인에 따른 해석의 차이

  • 베이스라인 (Baseline, 기준 그룹) 변경에 따른 해석의 차이는 회귀 모델에서 factor()의 기준 그룹이 달라질 때 발생합니다.
  • 현재 factor(group)에서 ctrl이 기준 그룹으로 선택되었습니다.
  • 만약 trt1을 기준 그룹으로 변경하려면, R에서는 다음과 같이 relevel() 함수를 사용할 수 있습니다.
    p$group <- relevel(p$group, ref = "trt1")
    res <- lm(weight ~ factor(group), data = p)
    summary(res)
    
  • 이렇게 하면, trt1이 기준 그룹이 되며, 새로운 기준 그룹에 맞게 Intercept와 회귀 계수가 재설정됩니다.
    • Intercept는 trt1 그룹의 평균이 됩니다.
    • ctrl 그룹trt2 그룹의 평균 차이는 trt1을 기준으로 계산됩니다.

베이스라인 확인하는 방법

  1. levels() 함수로 베이스라인 확인

    • levels() 함수로 factor의 수준(level)을 확인할 수 있습니다.
    • 첫 번째 수준이 베이스라인(기준)으로 사용됩니다.
    r
    코드 복사
    levels(data$group)
    

    결과:

    csharp
    코드 복사
    [1] "ctrl" "trt1" "trt2"
    

    해석:

    • 첫 번째 수준 "ctrl"이 베이스라인으로 사용됩니다.
  2. contrasts() 함수로 더미 변수 확인

    • contrasts() 함수는 R이 생성한 더미 변수의 매핑을 보여줍니다.
    r
    코드 복사
    contrasts(data$group)
    

    결과:

    markdown
    코드 복사
         trt1 trt2
    ctrl    0    0
    trt1    1    0
    trt2    0    1
    

    해석:

    • ctrl이 베이스라인으로 설정되었으며, trt1trt2는 각각 더미 변수로 생성되었습니다.
    • ctrl에 해당하는 값이 0으로 표시되었으므로, ctrl이 기준(Baseline)이 됩니다.

베이스라인 변경 방법

  1. relevel() 함수로 베이스라인 변경

    • 특정 범주를 기준 범주로 설정하려면, relevel()을 사용합니다.
    data$group <- relevel(data$group, ref = "trt1")  # 기준을 trt1로 설정
  2. factor()로 직접 베이스라인 설정

    • factor()의 levels 순서를 명시적으로 지정하여 기준을 변경할 수 있습니다.
    data$group <- factor(data$group, levels = c("trt1", "ctrl", "trt2"))

    해석:

    • trt1이 첫 번째 수준으로 배치되었기 때문에 trt1이 베이스라인으로 설정됩니다
  • factor의 사용에 따른 해석 factor(group)을 사용하지 않으면, R은 group 변수를 연속형 변수로 인식합니다. 즉, group이 범주형 변수(categorical variable)로 인식되지 않고, 연속형(숫자형) 변수로 간주되기 때문에 회귀계수의 해석이 달라집니다.

    1️⃣ factor(group) 사용 시

    코드

    p <- PlantGrowth
    res <- lm(weight ~ factor(group), data = p)
    res
    

    결과 해석

    Call:
    lm(formula = weight ~ factor(group), data = p)
    
    Coefficients:
    (Intercept)  factor(group)trt1  factor(group)trt2
          5.032             -0.371              0.494
    

    해석

    • Intercept (절편): group이 기준 그룹 (baseline) (여기서는 ctrl 그룹)일 때의 평균 weight 값. 즉, ctrl 그룹의 평균 weight가 5.032임을 의미합니다.

    • factor(group)trt1: trt1 그룹과 ctrl 그룹의 평균 차이를 나타냅니다. 즉, trt1의 평균 weight는 5.032 - 0.371 = 4.661이 됩니다.

    • factor(group)trt2: trt2 그룹과 ctrl 그룹의 평균 차이를 나타냅니다. 즉, trt2의 평균 weight는 5.032 + 0.494 = 5.526이 됩니다.

      정리

    • *factor()로 지정하면 group 변수를 범주형으로 인식하여 더미 변수**를 생성합니다.

    • Intercept는 기준 그룹(ctrl)의 평균을 의미하며, 나머지 그룹(trt1, trt2)은 기준 그룹과의 차이를 나타냅니다.


      2️⃣ factor(group)를 사용하지 않을 때

      코드

      p <- PlantGrowth
      res <- lm(weight ~ group, data = p)
      res
      

      예상 결과 해석

      Call:
      lm(formula = weight ~ group, data = p)
      
      Coefficients:
      (Intercept)         group
             4.999             0.159
      

      해석

    • group 변수가 연속형으로 해석됨: R은 group 변수를 더미 변수로 변환하지 않고, 연속형 숫자 변수로 취급합니다.

    • Intercept (절편): group이 0일 때의 weight의 예측값을 의미합니다.

      • 하지만 group이 범주형이 아니라 연속형 변수로 해석되었으므로, 이는 해석할 수 없는 의미 없는 절편이 될 수 있습니다.
    • group의 회귀계수: group의 증가에 따른 weight의 변화량(기울기)을 나타냅니다.
      - 예를 들어, group = 1에서의 weight는 Intercept + 1 × group의 계수로 해석할 수 있습니다.
      - 중요한 점: group이 0, 1, 2와 같은 숫자로 인식되므로, R은 이 변수를 연속형으로 다루며, 실제로 group의 의미는 더미 변수가 아니라 숫자로 된 예측 변수가 됩니다.
      - 예를 들어, group이 ctrl = 0, trt1 = 1, trt2 = 2로 인식되었을 경우, R은 weight = Intercept + 1 × group의 형태로 선형 관계를 학습합니다.

      정리

    • factor()를 사용하지 않으면 R은 group 변수를 숫자형 연속 변수로 인식합니다.

    • 더미 변수가 생성되지 않으므로 기준 그룹에 대한 절편 해석이 불가능합니다.

    • group의 숫자 자체를 하나의 연속형 변수로 다루기 때문에 의미가 왜곡될 수 있습니다.


      3️⃣ 결론: factor()의 차이점 요약

      구분factor(group) 사용factor(group) 미사용
      group 변수의 해석범주형 (categorical) 변수로 해석연속형 (continuous) 변수로 해석
      더미 변수 생성더미 변수 생성 (0, 1)더미 변수 생성 안 함
      절편의 의미기준 그룹의 평균 (ex. ctrl)group = 0일 때의 weight의 예측값
      회귀계수의 의미그룹 간의 평균 차이group의 변화에 따른 weight 변화율
      계산 방식factor(group) 생성 후 회귀 분석연속형 숫자 group에 대해 회귀 분석
      해석의 직관성직관적 (그룹 간 평균 비교 가능)해석이 불가능하거나 오해 소지가 있음

      4️⃣ 종합 예시

      p <- PlantGrowth
      
      # 1. factor(group)를 사용하는 경우 (범주형으로 인식)
      res1 <- lm(weight ~ factor(group), data = p)
      summary(res1)
      
      # 2. factor(group)를 사용하지 않는 경우 (연속형으로 인식)
      res2 <- lm(weight ~ group, data = p)
      summary(res2)
      

      출력 (예시)

      factor(group) 사용한 경우

      Coefficients:
      (Intercept)         factor(group)trt1     factor(group)trt2
            5.032                   -0.371               0.494
      
    • 해석:
      - 기준 그룹(ctrl)의 평균 weight는 5.032.
      - trt1의 평균 weight는 5.032 - 0.371 = 4.661.
      - trt2의 평균 weight는 5.032 + 0.494 = 5.526.

      factor(group) 사용하지 않은 경우

      Coefficients:
      (Intercept)            group
            4.999              0.159
      
    • 해석:
      - R은 group 변수를 숫자형 연속형 변수로 인식합니다.
      - Intercept는 group = 0일 때의 예측값이지만, group이 0, 1, 2와 같은 숫자형 연속 변수로 해석되었기 때문에, 의미가 없습니다.
      - group의 계수 0.159는 group이 1 증가할 때마다 weight가 0.159만큼 증가하는 것을 의미합니다.
      - 그러나 group 자체가 범주형 변수이므로, 이 해석은 잘못된 것입니다.


      5️⃣ 결론

    1. factor()를 사용해야 하는 이유

      • group이 범주형 변수(범주: ctrl, trt1, trt2)이므로, R이 이를 인식하게 하려면 factor()를 사용해야 합니다.
      • factor()를 사용하지 않으면 R은 group연속형 변수로 인식하여, 회귀 모델의 해석이 불가능하게 됩니다.
      • factor()를 사용하면 R은 기준 그룹(ctrl)을 자동으로 생성하고, 다른 그룹(trt1, trt2)과의 차이를 회귀계수로 보여줍니다.
    2. factor() 미사용 시 문제점

      • group이 숫자형 연속변수로 해석되어 잘못된 회귀모델이 생성됩니다.
      • 회귀모델의 절편, 회귀계수의 해석이 직관적이지 않고 의미가 잘못 전달됩니다.
    3. 어떻게 해야 하나?
      - 범주형 변수를 회귀모델에 사용할 때는 반드시 factor()를 사용해야 합니다.
      - R에서 lm() 함수를 사용할 때 factor(group)로 작성하여 R이 group을 범주형으로 인식하게 만드세요.


      이해가 잘 되지 않는 부분이나 더 궁금한 부분이 있으면 알려주세요.

  • 문자형 값의 경우의 해석 아니요, group문자형(문자열, character) 값으로 되어 있으면, R은 자동으로 factor로 변환하지 않고도 범주형(categorical)으로 인식합니다. 즉, factor()로 명시적으로 변환할 필요가 없는 경우가 많습니다. R의 lm() 함수는 문자형(character) 변수를 자동으로 factor로 변환합니다. 따라서, 문자형 변수를 연속형으로 인식하지 않습니다.

    1️⃣ 왜 문자형을 factor로 자동 변환하는가?

    • R의 lm() 함수는 문자형 변수를 자동으로 factor로 인식합니다.

    • 이는 R의 회귀 분석 모델에서 범주형 변수가 명확히 인식되어야 하는 특성 때문입니다.

    • 만약 group 변수가 문자형이면, R은 이를 factor로 변환한 후 더미 변수로 처리합니다.

    • 더미 변수로 변환할 때, 하나의 기준 그룹을 Intercept로 설정하고, 나머지 그룹은 그와의 차이로 표현됩니다.


      2️⃣ 문자형과 factor의 차이

      항목문자형(character)factor(범주형)
      데이터 형태문자형(문자열)정수로 코딩된 범주형 (factor level)
      범주형 인식자동으로 인식자동으로 인식 (명시적 사용 필요)
      lm()의 해석자동으로 더미 변수 생성 (factor로 인식)더미 변수 생성
      더미 변수 생성자동으로 생성 (factor로 변환됨)명시적으로 생성 (factor)
      필요한 작업작업 불필요필요 시 명시적 변환 필요

      결론적으로, factor()를 명시적으로 변환하지 않더라도 R은 문자형 변수를 factor로 자동 인식합니다.


      3️⃣ 문자형 group의 예시

      예시 데이터

      # 데이터 생성
      p <- data.frame(
        group = c("ctrl", "ctrl", "trt1", "trt2", "ctrl", "trt1", "trt2"),
        weight = c(5.3, 5.5, 6.1, 6.2, 5.1, 6.0, 6.3)
      )
      
      # lm() 함수를 실행 (group이 문자형)
      res <- lm(weight ~ group, data = p)
      summary(res)
      

      결과 해석 (예시)

      Call:
      lm(formula = weight ~ group, data = p)
      
      Coefficients:
      (Intercept)        grouptrt1        grouptrt2
            5.300               0.700               0.900
      

      해석

    • Intercept: group = ctrl일 때의 weight의 평균 값인 5.3을 의미합니다.

    • grouptrt1: trt1의 평균 weight와 ctrl의 평균 weight의 차이인 0.7을 의미합니다. 즉, trt1의 평균 weight는 5.3 + 0.7 = 6.0입니다.

    • grouptrt2: trt2의 평균 weight와 ctrl의 평균 weight의 차이인 0.9을 의미합니다. 즉, trt2의 평균 weight는 5.3 + 0.9 = 6.2입니다.

      이 결과는 factor로 명시적으로 변환한 경우와 동일합니다.


      4️⃣ 숫자로 된 문자형 group의 경우

      만약 숫자로 보이지만 문자형으로 저장된 경우(예: "1", "2", "3" 등), R은 factor로 인식합니다. 그러나 숫자형이 아닌 문자형으로 인식됩니다.

      # 문자형 숫자를 group으로 사용
      p <- data.frame(
        group = c("1", "1", "2", "3", "1", "2", "3"),
        weight = c(5.3, 5.5, 6.1, 6.2, 5.1, 6.0, 6.3)
      )
      
      # lm() 함수를 실행 (group이 문자형 숫자)
      res <- lm(weight ~ group, data = p)
      summary(res)
      

      결과 해석 (예시)

      Call:
      lm(formula = weight ~ group, data = p)
      
      Coefficients:
      (Intercept)        group2        group3
            5.300          0.700          0.900
      

      해석

    • R은 문자형 숫자도 factor로 인식하므로 숫자로 된 문자형도 범주형 변수로 취급합니다.

    • 만약 group"1", "2", "3"으로 되어 있다면, R은 이를 범주형(1, 2, 3)으로 자동 인식합니다.

    • 따라서, group1이 기준 그룹(Intercept)으로 설정되고, group2, group3이 더미 변수로 추가됩니다.


      5️⃣ 숫자형 group의 경우

      만약 group이 숫자형으로 되어 있다면, R은 이를 연속형 변수로 인식합니다. 이 경우, factor로 변환해주지 않으면 연속형 변수로 해석됩니다.

      # group이 숫자형인 경우
      p <- data.frame(
        group = c(1, 1, 2, 3, 1, 2, 3),  # 숫자형 group
        weight = c(5.3, 5.5, 6.1, 6.2, 5.1, 6.0, 6.3)
      )
      
      # lm() 함수를 실행 (group이 숫자형)
      res <- lm(weight ~ group, data = p)
      summary(res)
      

      결과 해석 (예시)

      Call:
      lm(formula = weight ~ group, data = p)
      
      Coefficients:
      (Intercept)          group
             5.300             0.200
      

      해석

    • R은 group을 연속형 변수로 인식합니다.

    • Intercept는 group이 0일 때의 예측값이 됩니다. 하지만 group에 0이 없기 때문에 해석이 직관적이지 않음.

    • *group의 회귀계수(0.200)**는 group이 1 증가할 때마다 weight가 0.2만큼 증가한다는 의미로 해석됩니다.

    • 이 경우, factor(group)로 변환해주어야 더미 변수가 생성됩니다.


      6️⃣ 정리

    • 문자형 변수는 factor로 자동 인식되므로 별도로 factor()로 변환할 필요가 없습니다.

    • 숫자로 보이는 문자형(예: "1", "2", "3")도 factor로 자동 인식됩니다.

    • 진짜 숫자형 변수(1, 2, 3)는 연속형 변수로 인식되기 때문에 factor로 변환해야 더미 변수가 생성됩니다.

      변수의 형태R의 인식 방식더미 변수 생성factor로 변환 필요
      문자형 ("A", "B")범주형 (factor로 자동 인식)O (기준 그룹과의 차이)❌ 필요 없음
      숫자로 된 문자 ("1", "2")범주형 (factor로 자동 인식)O (기준 그룹과의 차이)❌ 필요 없음
      숫자형 (1, 2)연속형 변수로 인식X (연속형으로 해석됨)✅ 필요 (factor로 변환 필요)

      7️⃣ 결론

    • 문자형 변수는 factor로 자동 변환됩니다.

    • 숫자형 변수는 연속형으로 인식되기 때문에, 더미 변수로 다루고 싶다면 factor()를 명시적으로 사용해야 합니다.

    • 문자형 데이터는 factor로 자동 변환되므로, factor로 다시 변환할 필요가 없습니다.

    • 숫자형 데이터는 연속형으로 인식되므로, 반드시 factor로 변환해주어야 더미 변수를 생성할 수 있습니다.


      필요에 따라 더 명확한 설명이나 예시가 필요하다면 알려주세요!

변경 예시

pgr=relevel(pgr=relevel(pgroup, ref=3)
res=lm(weight~gr,data=p)
res

Call:
lm(formula = weight ~ gr, data = p)

Coefficients:
(Intercept) grctrl grtrt1

5.526 -0.494 -0.865

summary(res)

Call:
lm(formula = weight ~ gr, data = p)

Residuals:
Min 1Q Median 3Q Max
-1.0710 -0.4180 -0.0060 0.2627 1.3690

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 5.5260 0.1971 28.032 < 2e-16 *
grctrl -0.4940 0.2788 -1.772 0.08768 .
grtrt1 -0.8650 0.2788 -3.103 0.00446

Signif. codes: 0 ‘*’ 0.001 ‘’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.6234 on 27 degrees of freedom
Multiple R-squared: 0.2641, Adjusted R-squared: 0.2096
F-statistic: 4.846 on 2 and 27 DF, p-value: 0.01591


p$grp=case_when(

  • p$group=='ctrl'~0,
  • p$group=='trt1'~1,
  • p$group=='trt2'~2)

View(p)
res=lm(weight~grp, data=p)
res

Call:
lm(formula = weight ~ grp, data = p)

Coefficients:
(Intercept) grp

4.826 0.247

res=lm(weight~factor(grp), data=p)
res

Call:
lm(formula = weight ~ factor(grp), data = p)

Coefficients:
(Intercept) factor(grp)1 factor(grp)2

5.032 -0.371 0.494

범주형일 때는 범주별 평균차이와

연속형일 때는 한단위 증가에 따른 변화량


ANOVA와 LM의 비교

  1. ANOVA와 LM의 F-통계량과 p-value가 동일하다는 것을 확인할 수 있습니다.
  2. ANOVA는 단순히 그룹 간의 평균 차이를 검정하는 반면, LM은 기준 그룹과 다른 그룹의 평균 차이를 회귀 계수로 제공합니다.
  3. ANOVA의 F-값과 LM의 F-값이 같으며, 모델의 유의성을 동일하게 해석할 수 있습니다.
  4. LM의 경우, B와 C 그룹이 A 그룹과 얼마나 차이가 나는지를 회귀 계수로 명시합니다.
  5. ANOVA를 사용했다면 실제 평균은 aggregate로 확인한다.

P-value / Residual standard error / R-squared의 해석

p=PlantGrowth
View(p)
res=lm(weight~group,data=p)
summary(res)

Call:
lm(formula = weight ~ group, data = p)

Residuals:
Min 1Q Median 3Q Max
-1.0710 -0.4180 -0.0060 0.2627 1.3690

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 5.0320 0.1971 25.527 <2e-16 ***
grouptrt1 -0.3710 0.2788 -1.331 0.1944
grouptrt2 0.4940 0.2788 1.772 0.0877 .

Signif. codes: 0 ‘*’ 0.001 ‘’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.6234 on 27 degrees of freedom
Multiple R-squared: 0.2641, Adjusted R-squared: 0.2096
F-statistic: 4.846 on 2 and 27 DF, p-value: 0.01591

res

Call:
lm(formula = weight ~ group, data = p)

Coefficients:
(Intercept) grouptrt1 grouptrt2

5.032 -0.371 0.494

💡

P-value 해석

  1. F-검정의 p-value
    • p-value = 0.01591
    • 귀무가설: 모든 집단의 평균이 같다.
    • 대립가설: 적어도 하나의 집단의 평균이 다르다.
    • p-value < 0.05이므로 귀무가설을 기각합니다.
    • 결론: 세 그룹 중 적어도 하나의 그룹의 평균이 통계적으로 유의하게 다르다고 해석할 수 있습니다.
  2. 개별 계수의 p-value
    • (Intercept) 관련 p-value: < 2e-16
      • 절편의 p-value가 0에 매우 가까우므로, 절편(기준 그룹의 평균)은 통계적으로 유의하다고 볼 수 있습니다.
      • 기준 그룹은 groupctrl로 설정되었고, 해당 그룹의 평균은 5.032입니다.
    • grouptrt1 관련 p-value: 0.1944
      • p-value > 0.05이므로, grouptrt1의 평균이 groupctrl의 평균과 유의미하게 다르지 않다고 해석합니다.
      • 즉, grouptrt1의 평균은 groupctrl의 평균에서 유의미한 변화를 보이지 않습니다.
    • grouptrt2 관련 p-value: 0.0877
      • p-value < 0.1이므로, 유의수준 10%에서는 유의미한 차이가 있다고 볼 수 있지만, 5% 수준에서는 유의하지 않다고 해석합니다.
      • 이는 grouptrt2의 평균이 groupctrl의 평균과 약간의 차이가 있음을 나타냅니다.

Residual standard error 해석

  • Residual standard error = 0.6234
    • 잔차 표준 오차는 회귀 모델의 예측 오차의 평균적인 크기를 나타냅니다.
    • 회귀 모델이 예측한 값과 실제 관측값 사이의 평균적인 차이가 0.6234입니다.
    • 잔차의 표준오차가 작을수록 모델의 예측이 더 정확하다고 볼 수 있습니다.
    • 자유도: 27 (샘플 수 - 변수의 개수 - 1 = 30 - 2 - 1 = 27)

R-squared 해석

  1. Multiple R-squared = 0.2641
    • 이 모델이 종속변수(weight)의 약 26.41%의 변동을 설명할 수 있다는 의미입니다.
    • 즉, group이라는 독립변수로 weight의 변동을 26.41%만큼 설명할 수 있습니다.
    • 나머지 73.59%는 설명되지 않는 변동으로, 이는 모델에 포함되지 않은 다른 변수에 의한 변동일 수 있습니다.
  2. Adjusted R-squared = 0.2096
    • 조정된 R-squared는 변수의 수와 샘플 크기를 보정한 지표로, 일반적으로 독립변수의 수가 많아질수록 낮아질 수 있습니다.
    • 이 모델에서는 조정된 R-squared가 0.2096으로, 모델의 설명력이 조정된 후에도 여전히 약 21%의 변동을 설명할 수 있다는 의미입니다.

최종 해석

  1. 모델의 유의성
    • F-검정의 p-value = 0.01591이므로, 유의수준 5%에서 모델이 유의미하다고 볼 수 있습니다.
    • 즉, group이라는 변수가 weight에 유의한 영향을 미친다고 결론지을 수 있습니다.
  2. 계수 해석
    • 기준 그룹인 groupctrl의 평균은 5.032로 설정되었습니다.
    • grouptrt1의 평균은 groupctrl의 평균에 0.371을 더한 값이므로,
      • grouptrt1의 평균 = 5.032 + (-0.371) = 4.661
    • grouptrt2의 평균은 groupctrl의 평균에 0.494를 더한 값이므로,
      • grouptrt2의 평균 = 5.032 + 0.494 = 5.526
    • 결론: groupctrl, grouptrt1, grouptrt2의 평균은 각각 5.032, 4.661, 5.526으로 해석할 수 있습니다.
  3. R-squared 해석
    • 모델이 종속변수(weight)의 변동을 약 26.41% 설명할 수 있습니다.
    • 조정된 R-squared 값은 0.2096으로, 20.96%의 변동을 설명할 수 있습니다.
  4. 잔차 해석
    • 잔차의 표준오차는 0.6234로, 회귀모형의 예측값과 실제값 사이의 평균적인 오차의 크기를 의미합니다.

결론

  • group은 종속변수 weight에 유의미한 영향을 미친다(p-value = 0.01591).
  • grouptrt1의 평균은 groupctrl의 평균에 비해 유의미한 차이가 없다(p-value = 0.1944).
  • grouptrt2의 평균은 groupctrl의 평균에 비해 유의미한 차이가 있다(p-value = 0.0877, 유의수준 10%에서 유의함).
  • 이 모델은 weight의 변동을 약 26.41% 설명할 수 있으며, 잔차의 표준오차는 0.6234로 비교적 작은 오차를 보입니다.

  • R-squared (R²)
    • 종속변수의 변동을 독립변수가 얼마나 잘 설명하는지를 나타내는 비율.
    • 높을수록 더 좋은 모델을 의미.
    • 0.8 이상이면 보통 "잘 설명하고 있다"고 해석할 수 있습니다.
  • Residual Standard Error (RSE)
    - 예측값과 실제값 간의 평균 차이를 나타내는 잔차의 표준편차.
    - 낮을수록 더 좋은 모델을 의미.
    - 종속변수의 단위와 일치하며, 예측값과 실제값의 평균 차이를 의미합니다.

Plot 해석

c<-cars
plot(c)
cor.test(cspeed,cspeed, cdist)

Pearson's product-moment correlation

data: cspeedandcspeed and cdist
t = 9.464, df = 48, p-value = 1.49e-12
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
0.6816422 0.8862036
sample estimates:
cor
0.8068949

lm(dist~speed, data=c)

Call:
lm(formula = dist ~ speed, data = c)

Coefficients:
(Intercept) speed

-17.579 3.932

res=lm(dist~speed, data=c)
abline(res)
plot(res)

image.png

💡

Residuals vs Fitted 해석

모델의 적합성을 평가하는 데 유용합니다. 이 그래프는 잔차(Residuals, 실제값과 예측값의 차이)와 예측된 종속 변수 값(Fitted values) 사이의 관계를 시각화합니다. 이 그래프를 해석하는 방법은 다음과 같습니다.

  1. 잔차가 무작위로 분포되어 있는지 확인
  • 목표: 잔차가 Fitted 값에 대해 일정한 패턴을 보이지 않고 무작위로 분포되어야 모델이 적합하다고 판단할 수 있습니다.
  • 해석: 잔차들이 무작위로 분포하고 특정 패턴이 없으면 모델이 데이터의 경향을 잘 설명하고 있다고 볼 수 있습니다. 만약 U자형이나 선형 경향이 보인다면, 비선형성을 나타내며 다른 형태의 모델이 필요할 수 있습니다.
  1. 잔차의 평균이 0인지 확인
  • 목표: 잔차가 평균 0을 중심으로 고르게 분포되어 있는지 확인합니다.
  • 해석: 잔차가 중심선을 기준으로 일정하게 퍼져 있으면 적절한 모델이라고 판단할 수 있습니다. 잔차가 한쪽으로 치우친 경우 모델의 편향을 의미할 수 있습니다.
  1. 잔차의 분산이 일정한지 확인
  • 목표: Fitted 값이 커지거나 작아짐에 따라 잔차의 분산이 변화하는지 확인합니다.
  • 해석: 만약 잔차의 분산이 일정하지 않고 패널 형태(예: 점들이 깔때기 모양을 이루는 경우)를 보이면, 이는 등분산성(Homoscedasticity) 가정을 위반한 것으로, 오차의 분산이 일정하지 않다는 의미입니다. 이를 해결하기 위해 변수를 변환하거나 가중 회귀 등을 고려할 수 있습니다.
  1. 이상치와 영향 관측치 확인
  • 목표: 잔차가 극단적으로 큰 값, 즉 이상치(Outliers)가 존재하는지 확인합니다.
  • 해석: 그래프에서 다른 점들과 멀리 떨어져 있는 점들은 모델의 적합도에 큰 영향을 미칠 수 있는 이상치일 수 있습니다. 이상치가 많은 경우, 데이터 수집 오류나 모델에 적합하지 않은 데이터가 포함되었을 가능성을 고려해 볼 수 있습니다.
  1. 추가 검토 사항
  • 잔차의 패턴이 여러 번 교차하거나 주기적인 구조를 보인다면, 누락된 변수가 있을 수 있습니다.

image.png

💡

Q-Q Plot은 잔차(Residuals)가 정규분포를 따르는지 확인하는 시각화 도구입니다.

목적

  • 잔차의 정규성을 확인하기 위해 사용합니다.
  • 회귀 모델의 중요한 가정 중 하나인 정규성 가정을 검토하는 단계입니다.

X축과 Y축의 의미

  • X축: 이론적 정규분포의 분위수 (Theoretical Quantiles)
  • Y축: 실제 잔차의 분위수 (Sample Quantiles)

해석 방법

  • 이론적 정규분포의 직선(대각선) 위에 잔차들이 놓이면, 잔차가 정규성을 만족한다고 할 수 있습니다.
  • 점들이 직선 위에 있지 않거나, 끝부분이 크게 벗어나면 잔차가 정규성을 만족하지 않는다는 의미입니다.
  • 꼬리가 위나 아래로 굽어지는 경우:
    • 위로 굽어진다면: 잔차의 분포가 오른쪽 꼬리(Positive Skewness)가 긴 분포를 의미합니다.
    • 아래로 굽어진다면: 잔차의 분포가 왼쪽 꼬리(Negative Skewness)가 긴 분포를 의미합니다.

Q-Q Plot 해석 예시

  1. 이상적인 경우:
    • 잔차가 대각선에 가깝게 위치하면 정규성을 만족하는 것으로 볼 수 있습니다.
  2. 정규성을 만족하지 않는 경우:
    • S자 모양으로 휘어진 경우: 잔차가 비정규 분포를 따른다고 볼 수 있습니다.
    • 꼬리가 올라가거나 내려가는 경우: 잔차의 분포가 왜곡(Skewness)되어 있음을 나타냅니다.
  • qqnorm(): 잔차의 Q-Q plot을 생성합니다.
  • qqline(): 대각선을 그려주어 정규성 검토를 돕습니다.

image.png

💡

Scale-Location Plot (Spread-Location Plot)

Scale-Location Plot은 잔차의 분산이 일정한지를 확인하기 위한 시각화 도구입니다.

목적

  • 등분산성(homoscedasticity) 가정을 검토합니다.
  • 등분산성 가정이란 잔차의 분산이 독립변수의 값에 따라 일정하게 유지되어야 한다는 것입니다.

X축과 Y축의 의미

  • X축: 예측값 (Fitted Values, y^) y^\hat{y}
  • Y축: 잔차의 절대값의 제곱근 (Square Root of Standardized Residuals)

해석 방법

  • 이상적인 경우, Y축의 값들이 랜덤하게 흩어진 패턴을 보여야 합니다.
  • 특정한 패턴이 보이면 등분산성이 깨졌음을 의미합니다.
    • U자 형태: 독립변수의 값이 작거나 클수록 잔차의 변동이 커지는 경우.
    • 이동하는 패턴 (↗): 예측값이 증가할수록 잔차의 변동이 커지는 경우 (이분산성).
    • 이동하는 패턴 (↘): 예측값이 증가할수록 잔차의 변동이 작아지는 경우 (이분산성).

Scale-Location Plot 해석 예시

  1. 이상적인 경우:
    • 잔차의 분산이 일정해야 하며, 랜덤하게 흩어진 점들이 보여야 합니다.
  2. 등분산성을 위반하는 경우:
    • U자 형태: 중간 부분에서는 분산이 작고, 양 끝부분으로 갈수록 잔차의 변동이 커지는 경우.
    • 선형 증가 형태: 예측값이 커질수록 잔차의 변동이 증가하는 경우 (대표적인 이분산 패턴).

plot(model, which = 3): Scale-Location plot을 생성합니다.

  • which = 3: Scale-Location plot을 그리는 옵션입니다.

image.png

💡

Leverage 해석

  1. 레버리지(Leverage) 값의 의미
    • 레버리지는 관측치가 예측된 회귀 직선에 미치는 영향력을 나타내는 지표입니다. 레버리지 값이 크다는 것은 해당 관측치가 다른 관측치와 비교했을 때 더 극단적인 X 값을 가진다는 의미입니다.
    • x축의 오른쪽 끝으로 갈수록 레버리지 값이 큰 데이터 포인트를 나타내며, 이 점들은 회귀 모델의 기울기와 절편에 큰 영향을 미칠 가능성이 있습니다.
  2. 잔차(Residuals)의 역할
    • y축은 잔차를 나타내며, 잔차 값이 클수록 해당 관측치가 모델의 예측에서 크게 벗어났음을 의미합니다. 그래프의 y축 중심선을 기준으로, 잔차가 0에 가까울수록 모델이 데이터를 잘 설명하고 있는 것입니다.
  3. 쿡의 거리(Cook's Distance) 라인 확인
    • 그래프에는 일반적으로 Cook's Distance 라인이 표시됩니다. 쿡의 거리는 특정 데이터 포인트가 모델에 미치는 영향을 나타내며, 이 값이 높으면 해당 관측치가 회귀 결과에 큰 영향을 미칠 가능성이 큽니다.
    • 보통 Cook's Distance 값이 0.5 또는 1을 넘는 데이터 포인트는 모델의 회귀 계수에 큰 영향을 줄 수 있으므로 주의 깊게 살펴봐야 합니다.
    • Cook's Distance를 기준으로 외곽에 위치한 점들은 모델의 결과에 큰 영향을 줄 수 있는 잠재적인 영향 관측치(influential points)입니다.
  4. 데이터 포인트의 위치와 패턴 확인
    - 레버리지가 높고 잔차도 큰 점은 모델의 결과에 큰 영향을 주며, 해당 관측치를 제거하면 모델의 결과가 달라질 가능성이 큽니다.
    - 레버리지가 크지만 잔차가 작은 점은 극단적인 x값을 가지지만 모델 예측에 잘 부합하므로 크게 문제되지 않을 수 있습니다.
    - 레버리지가 낮지만 잔차가 큰 점은 단순히 예측에서 벗어난 관측치(즉, 이상치)일 수 있습니다.

0개의 댓글