
setwd("C:/R")
d1 = read.table("wt.txt", header = T, sep = "\t")
tmp1 <- d1[,c(1,4)]
tmp1 <- aggregate(wt~pid, data = tmp, max)
tmp2 <- d1[,c(-4)]
tmp2 <- na.omit(tmp2)
d1 <- merge(tmp1, tmp2)
💡#"pid", "A_steps", "A_calorie", "A_distance"
a1 <- read.table("2_App data_e.txt", header = T, sep = "\t")
a1 <- a1[, c("A_myhealth_id", "A_steps", "A_calorie", "A_distance")]
names(a1)[names(a1) == "A_myhealth_id"] <- "pid"
summary(a1)
a1A_distance)
summary(a1)
a1 <- a1[a1A_steps >= 0 & a1A_steps <= 20000,]
summary(a1)
a1 <- na.omit(a1)
d1 = read.table("wt.txt", header = T, sep = "\t"): wt.txt 파일을 불러옵니다.tmp1: d1의 wt 열에 대해 pid별 최대값을 추출합니다.tmp1 <- d1[, c(1, 4)] # pid와 wt 열만 선택
tmp1 <- aggregate(wt ~ pid, data = tmp1, max) # pid별로 wt의 최대값 추출tmp2: d1의 4번째 열(wt)을 제외한 모든 열을 선택합니다.tmp2 <- d1[, -4] # 4번째 열(wt) 제거
tmp2 <- na.omit(tmp2) # 결측값 제거d1 <- merge(tmp1, tmp2) # pid 기준 병합a1 = read.table("2_App data_e.txt", header = T, sep = "\t"): 앱 데이터 파일 불러오기.A_myhealth_id를 pid로 변경.names(a1)[names(a1) == "A_myhealth_id"] <- "pid"A_distance를 숫자형으로 변환
A_steps가 0에서 20,000 사이의 값만 남기고, 결측값 제거.
a1$A_distance <- as.numeric(a1$A_distance)
a1 <- a1[a1$A_steps >= 0 & a1$A_steps <= 20000, ]
a1 <- na.omit(a1) # 결측값 제거
tmp1 <- aggregate(A_steps~pid, data = a1, mean)
tmp2 <- aggregate(A_calorie~pid, data = a1, mean)
tmp3 <- aggregate(A_distance~pid, data = a1, mean)
tmp4 <- merge(tmp1,tmp2)
tmp4 <- merge(tmp4, tmp3)
summary(tmp4)
💡finaldata <- merge(d1,tmp4)
데이터 요약 및 병합
pid별로 A_steps, A_calorie, A_distance의 평균값을 계산합니다.tmp1 <- aggregate(A_steps ~ pid, data = a1, mean)
tmp2 <- aggregate(A_calorie ~ pid, data = a1, mean)
tmp3 <- aggregate(A_distance ~ pid, data = a1, mean)tmp4 <- merge(tmp1, tmp2)
tmp4 <- merge(tmp4, tmp3)finaldata <- merge(d1, tmp4) # pid 기준으로 병합summary(lm(wt~age, data = finaldata))
summary(lm(wt~factor(sex), data = finaldata))
summary(lm(wt~A_steps, data = finaldata))
summary(lm(wt~A_calorie, data = finaldata))
summary(lm(wt~A_distance, data = finaldata))
💡res <- lm(wt~ . -pid, data = finaldata)
단일 변수 회귀분석
summary(lm(wt ~ age, data = finaldata))
summary(lm(wt ~ factor(sex), data = finaldata))
summary(lm(wt ~ A_steps, data = finaldata))
summary(lm(wt ~ A_calorie, data = finaldata))
summary(lm(wt ~ A_distance, data = finaldata))
```
res <- lm(wt ~ . - pid, data = finaldata)
```
- 종속변수 **wt**를 기준으로 모든 변수를 포함해 다중 회귀분석을 수행합니다.
- `~ . - pid`: 모든 변수를 사용하되, **pid는 제외**합니다.💡res <- lm(wt~age+sex+A_steps+A_calorie, data = finaldata)
vif(res)
step(res) #모든 변수가 AIC를 낮추는데 기여
summary(res) #모델은 유의미하지만, 종속변수의 변동성을 크게 설명하지는 못한다.
library(car)
vif(res)
res <- lm(wt ~ age + sex + A_steps + A_calorie, data = finaldata)
vif(res) # 다중공선성 확인
step(res) # AIC 기반의 변수 선택
summary(res)
```
summary(res)
```
- 회귀 모델의 **p-value, R-squared, Coefficients** 등을 확인합니다.
- p-value가 유의한 독립변수를 식별하고, R-squared를 통해 **설명력**을 평가합니다.wt.txt와 2_App data_e.txt의 데이터를 병합하여 finaldata 데이터셋을 생성했습니다.age, sex, A_steps, A_calorie, A_distance의 영향을 확인했습니다.