
| 검증 항목 | 상관분석 | 회귀분석 |
|---|---|---|
| 정규성 | O (Pearson) | O (잔차의 정규성) |
| 독립성 | O (독립 표본) | O (잔차의 독립성) |
| 선형성 | O (산점도) | O (적합값 플롯) |
| 등분산성 | X | O (잔차의 등분산성) |
| 다중공선성 | X | O (VIF) |
| 이상치 탐색 | O (박스플롯) | O (잔차 플롯) |
plot(c)
lines(lowess(c))
cor.test(cdist)
Pearson's product-moment correlation
💡data: 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
c$speed)와 제동거리(c$dist) 사이의 상관계수 r는 0.8069로, 이는 강한 양의 선형 관계를 의미합니다.lm(dist~speed, data=c)
Call:
lm(formula = dist ~ speed, data = c)
Coefficients:
(Intercept) speed
-17.579 3.932
abline(lm(cspeed),col='blue')

summary(lm(cspeed))
Call:
lm(formula = 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
Std. Error : 0.4155
c$speed의 표준 오차: 0.4155t-statistic : 9.464
c$speed)의 t-값이 9.464로 매우 크기 때문에, 속도는 제동거리에 강한 영향을 미친다고 볼 수 있습니다.p-value : 1.49e-12
(Intercept): 0.0123 → p-value < 0.05로 유의미.c$speed: 1.49e-12 → 매우 작은 값으로, 속도가 제동거리에 유의한 영향을 미친다고 결론지을 수 있습니다.*** (p < 0.001): 매우 유의미** (p < 0.01): 유의미* (p < 0.05): 약간 유의미Residual standard error: 15.38 on 48 degrees of freedom
Multiple R-squared: 0.6511, Adjusted R-squared: 0.6438
c$speed가 종속변수 c$dist에 유의한 영향을 미치는지를 판단합니다.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
cspeed>12&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값+변화량을 적용해주어야한다!!
c$speed가 12 이하일 때, 예측된 제동거리의 평균이 18.20임.c$speed가 (12, 20] 구간에 속하면, 제동거리는 기본값 18.20에 28.09를 더한 값으로 예측됩니다.dist=18.20+28.09=46.29\text{dist} = 18.20 + 28.09 = 46.29c$speed가 20보다 클 때, 제동거리는 기본값 18.20에 64.66을 더한 값으로 예측됩니다.dist=18.20+64.66=82.86\text{dist} = 18.20 + 64.66 = 82.8620> 20
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
💡평균(weight, trt1)=5.032+(−0.371)=4.661\text{평균(weight, trt1)} = 5.032 + (-0.371) = 4.661 평균(weight, trt2)=5.032+0.494=5.526\text{평균(weight, trt2)} = 5.032 + 0.494 = 5.526
- 즉, trt2 그룹의 평균 weight는 **5.526**입니다.factor()의 기준 그룹이 달라질 때 발생합니다.factor(group)에서 ctrl이 기준 그룹으로 선택되었습니다.relevel() 함수를 사용할 수 있습니다.p$group <- relevel(p$group, ref = "trt1")
res <- lm(weight ~ factor(group), data = p)
summary(res)
levels() 함수로 베이스라인 확인
levels() 함수로 factor의 수준(level)을 확인할 수 있습니다.r
코드 복사
levels(data$group)
결과:
csharp
코드 복사
[1] "ctrl" "trt1" "trt2"
해석:
contrasts() 함수로 더미 변수 확인
contrasts() 함수는 R이 생성한 더미 변수의 매핑을 보여줍니다.r
코드 복사
contrasts(data$group)
결과:
markdown
코드 복사
trt1 trt2
ctrl 0 0
trt1 1 0
trt2 0 1
해석:
relevel() 함수로 베이스라인 변경
relevel()을 사용합니다.data$group <- relevel(data$group, ref = "trt1") # 기준을 trt1로 설정
factor()로 직접 베이스라인 설정
factor()의 levels 순서를 명시적으로 지정하여 기준을 변경할 수 있습니다.data$group <- factor(data$group, levels = c("trt1", "ctrl", "trt2"))
해석:
trt1이 첫 번째 수준으로 배치되었기 때문에 trt1이 베이스라인으로 설정됩니다factor(group)을 사용하지 않으면, R은 group 변수를 연속형 변수로 인식합니다. 즉, group이 범주형 변수(categorical variable)로 인식되지 않고, 연속형(숫자형) 변수로 간주되기 때문에 회귀계수의 해석이 달라집니다.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)은 기준 그룹과의 차이를 나타냅니다.
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의 증가에 따른 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의 숫자 자체를 하나의 연속형 변수로 다루기 때문에 의미가 왜곡될 수 있습니다.
| 구분 | factor(group) 사용 | factor(group) 미사용 |
|---|---|---|
| group 변수의 해석 | 범주형 (categorical) 변수로 해석 | 연속형 (continuous) 변수로 해석 |
| 더미 변수 생성 | 더미 변수 생성 (0, 1) | 더미 변수 생성 안 함 |
| 절편의 의미 | 기준 그룹의 평균 (ex. ctrl) | group = 0일 때의 weight의 예측값 |
| 회귀계수의 의미 | 그룹 간의 평균 차이 | group의 변화에 따른 weight 변화율 |
| 계산 방식 | factor(group) 생성 후 회귀 분석 | 연속형 숫자 group에 대해 회귀 분석 |
| 해석의 직관성 | 직관적 (그룹 간 평균 비교 가능) | 해석이 불가능하거나 오해 소지가 있음 |
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 자체가 범주형 변수이므로, 이 해석은 잘못된 것입니다.
factor()를 사용해야 하는 이유
group이 범주형 변수(범주: ctrl, trt1, trt2)이므로, R이 이를 인식하게 하려면 factor()를 사용해야 합니다.group을 연속형 변수로 인식하여, 회귀 모델의 해석이 불가능하게 됩니다.factor() 미사용 시 문제점
어떻게 해야 하나?
- 범주형 변수를 회귀모델에 사용할 때는 반드시 factor()를 사용해야 합니다.
- R에서 lm() 함수를 사용할 때 factor(group)로 작성하여 R이 group을 범주형으로 인식하게 만드세요.
이해가 잘 되지 않는 부분이나 더 궁금한 부분이 있으면 알려주세요.
group이 문자형(문자열, character) 값으로 되어 있으면, R은 자동으로 factor로 변환하지 않고도 범주형(categorical)으로 인식합니다. 즉, factor()로 명시적으로 변환할 필요가 없는 경우가 많습니다. R의 lm() 함수는 문자형(character) 변수를 자동으로 factor로 변환합니다. 따라서, 문자형 변수를 연속형으로 인식하지 않습니다.R의 lm() 함수는 문자형 변수를 자동으로 factor로 인식합니다.
이는 R의 회귀 분석 모델에서 범주형 변수가 명확히 인식되어야 하는 특성 때문입니다.
만약 group 변수가 문자형이면, R은 이를 factor로 변환한 후 더미 변수로 처리합니다.
더미 변수로 변환할 때, 하나의 기준 그룹을 Intercept로 설정하고, 나머지 그룹은 그와의 차이로 표현됩니다.
| 항목 | 문자형(character) | factor(범주형) |
|---|---|---|
| 데이터 형태 | 문자형(문자열) | 정수로 코딩된 범주형 (factor level) |
| 범주형 인식 | 자동으로 인식 | 자동으로 인식 (명시적 사용 필요) |
| lm()의 해석 | 자동으로 더미 변수 생성 (factor로 인식) | 더미 변수 생성 |
| 더미 변수 생성 | 자동으로 생성 (factor로 변환됨) | 명시적으로 생성 (factor) |
| 필요한 작업 | 작업 불필요 | 필요 시 명시적 변환 필요 |
결론적으로, factor()를 명시적으로 변환하지 않더라도 R은 문자형 변수를 factor로 자동 인식합니다.
# 데이터 생성
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로 명시적으로 변환한 경우와 동일합니다.
만약 숫자로 보이지만 문자형으로 저장된 경우(예: "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이 더미 변수로 추가됩니다.
만약 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)로 변환해주어야 더미 변수가 생성됩니다.
문자형 변수는 factor로 자동 인식되므로 별도로 factor()로 변환할 필요가 없습니다.
숫자로 보이는 문자형(예: "1", "2", "3")도 factor로 자동 인식됩니다.
진짜 숫자형 변수(1, 2, 3)는 연속형 변수로 인식되기 때문에 factor로 변환해야 더미 변수가 생성됩니다.
| 변수의 형태 | R의 인식 방식 | 더미 변수 생성 | factor로 변환 필요 |
|---|---|---|---|
| 문자형 ("A", "B") | 범주형 (factor로 자동 인식) | O (기준 그룹과의 차이) | ❌ 필요 없음 |
| 숫자로 된 문자 ("1", "2") | 범주형 (factor로 자동 인식) | O (기준 그룹과의 차이) | ❌ 필요 없음 |
| 숫자형 (1, 2) | 연속형 변수로 인식 | X (연속형으로 해석됨) | ✅ 필요 (factor로 변환 필요) |
문자형 변수는 factor로 자동 변환됩니다.
숫자형 변수는 연속형으로 인식되기 때문에, 더미 변수로 다루고 싶다면 factor()를 명시적으로 사용해야 합니다.
문자형 데이터는 factor로 자동 변환되므로, factor로 다시 변환할 필요가 없습니다.
숫자형 데이터는 연속형으로 인식되므로, 반드시 factor로 변환해주어야 더미 변수를 생성할 수 있습니다.
필요에 따라 더 명확한 설명이나 예시가 필요하다면 알려주세요!
변경 예시
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
범주형일 때는 범주별 평균차이와
연속형일 때는 한단위 증가에 따른 변화량
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 해석
groupctrl로 설정되었고, 해당 그룹의 평균은 5.032입니다.grouptrt1의 평균이 groupctrl의 평균과 유의미하게 다르지 않다고 해석합니다.grouptrt1의 평균은 groupctrl의 평균에서 유의미한 변화를 보이지 않습니다.Residual standard error 해석
R-squared 해석
weight)의 약 26.41%의 변동을 설명할 수 있다는 의미입니다.group이라는 독립변수로 weight의 변동을 26.41%만큼 설명할 수 있습니다.최종 해석
group이라는 변수가 weight에 유의한 영향을 미친다고 결론지을 수 있습니다.weight)의 변동을 약 26.41% 설명할 수 있습니다.결론
c<-cars
plot(c)
cor.test(cdist)
Pearson's product-moment correlation
data: 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)

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

Q-Q Plot은 잔차(Residuals)가 정규분포를 따르는지 확인하는 시각화 도구입니다.
목적
X축과 Y축의 의미
해석 방법
Q-Q Plot 해석 예시

Scale-Location Plot은 잔차의 분산이 일정한지를 확인하기 위한 시각화 도구입니다.
목적
X축과 Y축의 의미
해석 방법
Scale-Location Plot 해석 예시
plot(model, which = 3): Scale-Location plot을 생성합니다.

Cook's Distance 라인이 표시됩니다. 쿡의 거리는 특정 데이터 포인트가 모델에 미치는 영향을 나타내며, 이 값이 높으면 해당 관측치가 회귀 결과에 큰 영향을 미칠 가능성이 큽니다.Cook's Distance 값이 0.5 또는 1을 넘는 데이터 포인트는 모델의 회귀 계수에 큰 영향을 줄 수 있으므로 주의 깊게 살펴봐야 합니다.Cook's Distance를 기준으로 외곽에 위치한 점들은 모델의 결과에 큰 영향을 줄 수 있는 잠재적인 영향 관측치(influential points)입니다.