
setwd("c:/R")
install.packages("dplyr")
library(dplyr)
install.packages("car")
library(car)
d1 = read.table("wt.txt", header = T, sep = "\t")
d2 <- d1[,c(1,4)] #pid와 wt만 추출
d2 <- aggregate(wt~pid, data = d2, max) #pid에 따른 몸무게의 최대값
d3 <- d1[, -4]
d3 <- na.omit(d3)
💡d4 <- merge(d2,d3, key="pid")
파일 불러오기
d1 = read.table("wt.txt", header = T, sep = "\t")
\t로 구분된 텍스트 파일을 불러옵니다.pid, wt, age, sex 등의 변수.```
d2 <- d1[, c(1, 4)] # pid와 wt만 추출
d2 <- aggregate(wt ~ pid, data = d2, max) # pid에 따른 몸무게의 최대값
d3 <- d1[, -4] # wt 열을 제외
d3 <- na.omit(d3) # 결측값 제거
d4 <- merge(d2, d3, key = "pid") # pid를 기준으로 병합
```
- **d2**: **pid별로 wt의 최대값**을 구합니다.
- **d3**: wt 열을 제외하고 결측치를 제거합니다.
- **d4**: **d2와 d3를 pid 기준으로 병합**하여 최종 데이터 **d4**를 생성합니다.
- *최종 데이터(d4)**에는 **pid, wt, age, sex** 등의 변수가 포함됩니다.#qqnorm, qqline, shapiro 등으로 정규성 보고 정규분포 하지 않는다? -> wilcox.test
#정규분포 하는경우 : (var.test -> t.test)
#정규분포 하지 않는경우 : wilcox.test
#wilcox검정시 성별에따른 몸무게 중앙값이랑 aggregate(wt~sex, data = a5, range)해서 범위 보여줘야됨
#그냥 aggregate(wt~sex, data = a5, summary)로 보여줘도됨
💡shapiro.test(d4$wt) #결과 정규분포하지 않는다.
shapiro.test(d4$wt)
💡pairs(d4)
plot(d4)
기초 시각화
pairs(d4)
plot(d4)
pairs()는 변수들 간의 산점도 행렬을 시각화하여 변수가 서로 어떻게 관계되어 있는지 확인합니다.plot(d4)는 각 변수에 대한 산점도와 분포를 확인할 수 있습니다.cor.test(d4age) #정규성 필요
💡cor.test(d4age, method = "spearman")#정규성 필요없음
상관 분석
cor.test(d4$wt, d4$age) # Pearson 상관분석 (정규성 필요)
cor.test(d4$wt, d4$age, method = "spearman") # Spearman 상관분석 (정규성 불필요)
cor.test()의 결과로 상관계수(r)와 p-value가 출력됩니다.💡m = lm(wt~age+factor(sex), data = d4)
summary(m)
회귀 분석
m = lm(wt ~ age + factor(sex), data = d4)
summary(m)
💡m = glm(wt~age+factor(sex), data = d4)
summary(m)
로지스틱 회귀 분석
m = glm(wt ~ age + factor(sex), data = d4)
summary(m)
a1 <- read.table("2_App data_e.txt", header = T, sep = "\t")
a1 <- a1[,c(1,3,4,5)]
names(a1) <- c("pid", "A_steps", "A_calorie", "A_distance")
💡summary(a1) #확인결과 A_distance가 character이다.
a1A_distance)
summary(a1A_steps > 0 & a1A_distance)
summary(a1)
a1 <- na.omit(a1)
두 번째 데이터 불러오기
a1 <- read.table("2_App data_e.txt", header = T, sep = "\t")
a1 <- a1[, c(1, 3, 4, 5)]
names(a1) <- c("pid", "A_steps", "A_calorie", "A_distance")
2_App data_e.txt를 불러오고, A_steps, A_calorie, A_distance 변수를 선택합니다.```
a1$A_distance <- as.numeric(a1$A_distance)
a1 <- a1[a1$A_steps > 0 & a1$A_steps < 20000, ]
a1 <- na.omit(a1)
```
- **이상치 제거**: A_steps의 범위를 0에서 20000 사이로 제한합니다.
- **결측치 제거**: **na.omit()**으로 결측치를 제거합니다.tmp1 <- aggregate(A_steps~pid, data = a1, mean)
tmp2 <- aggregate(A_calorie~pid, data = a1, mean)
tmp3 <- aggregate(A_distance~pid, data = a1, mean)
f <- merge(tmp1, tmp2,key = "pid")
f <- merge(f, tmp3, key = "pid")
💡final <- merge(d4, f, key = "pid")
집계 및 병합
tmp1 <- aggregate(A_steps ~ pid, data = a1, mean)
tmp2 <- aggregate(A_calorie ~ pid, data = a1, mean)
tmp3 <- aggregate(A_distance ~ pid, data = a1, mean)
f <- merge(tmp1, tmp2, key = "pid")
f <- merge(f, tmp3, key = "pid")
final <- merge(d4, f, key = "pid")
m <- lm(wt~ . - pid, data = final) #전체 변수들중 pid만 제외.
m
vif(m)
m <- glm(wt~age+factor(sex)+A_steps+A_calorie, data = final)
vif(m)
💡step(m) #더이상 뺄건 없다.
summary(m) #해석, 함의까지 작성하면 됩니다.
모델 생성
m <- lm(wt ~ . - pid, data = final)
vif(m)
```
m <- glm(wt ~ age + factor(sex) + A_steps + A_calorie, data = final)
vif(m)
step(m)
summary(m)
```
- **변수 선택**: AIC(Akaike Information Criterion)를 기준으로 최적의 변수를 선택합니다.
- **AIC가 가장 낮은 조합**을 찾고, 불필요한 변수를 제거합니다.
- **모형 평가**:
- **p-value**가 유의미한 변수만 남깁니다.
- 회귀계수의 해석을 통해, **변수의 영향력**을 평가합니다.