### R-squared의 종류 ####
#점들이 퍼져있는 정도, 분산의정도
# multiple ->변수와 관계없는 R-squared / adjusted-> x값이 늘어날수록 수치가 줄어드는 R-suared
year <- c(2000:2004)
value <- c(2.3, 3.2, 5.6, 5.4, 5.8)

par(mfrow=c(1,1))
plot(year, value)

fit <- lm(value ~ year)
abline(fit, col="red")

summary(fit)# R-squared 0.82/0.76
image


# 좀 더 선형에 가깝게 3번째 값 조절 -> R-squared 값이 올라간다.
year <- c(2000:2004)
value <- c(2.3, 3.2, 4.6, 5.4, 5.8)

par(mfrow=c(1,1))
plot(year, value)

fit <- lm(value ~ year)
abline(fit, col="red")

summary(fit)# R-squared 0.96/0.95
image


#### 2. plot(fit - lm()결과 ) ####
# *** 원래는 기본plot() 위 에다가  abline( lm결과 )으로 넣어주면 lm선으로 나왔음.
# 그래프 4개를 return한다. -> 콘솔에서 enter쳐야함
plot(fit)
# 4개를 par(mfrow)를 이용해 한번에 subplots처럼 그리기
par(mfrow = c(2,2))
plot(fit)

# 1번째 그래프 : 잔차그래프 -> 0에가깝에 수렴할 수록 좋은데 왔다갔다함
# 2번째 그래프 : QQplot( 정규분포의 정도를 보는 )
# 3번째 그래프 : 잔차에 루트씌운 그래프
# 4번째 그래프 : outlier처럼 영향을 크게 주는 데이터를 확인할 수 있다. -> Cook's distance에 가깝거나 포함되는 outlier 데이터
image


# 선형모델로 설명된다고 하지만,, 왔다갔다 패턴을 가진 예1
par(mfrow = c(1,1))
x=c(1, 2, 3, 4, 5, 7, 8, 9, 10)
y=c(2, 1, 4, 3, 6, 5, 8, 7, 9)
plot(x, y) #올라갔다가 내려갔다가 하는 패턴이 있음. # 어떤 변수를 놓쳤다는 것을 의미할 수도.. 날씨-계절변수
fit <- lm(y~x)
abline(fit, col="red")

summary(fit) # 별표있고, R-squared 높고, p-value가 낮으나 잔차가 왔다갔다하므로 < 좋은 모델이라고 할 수 없을 것이다.. >
image

# *** plot(fit)
# 잔차가 왔다갔다한다 -> 좋은그래프가 아니다.
# 이런식으로 패턴이 있는 데이터 -> 좋은 모델이 아니다.
# 그러나 확인할 수 있는 것에는 괜찮으니 --> 놓친 변수를 차자.

par(mfrow = c(2,2))
plot(fit)
image



# 선형모델로 설명된다고 하지만,, 왔다갔다 패턴을 가진 예2
par(mfrow = c(1,1))
x=c(1, 2, 3, 4, 5, 7, 8, 9, 10)
y=c(2, 3, 4, 5, 0, 2, 3, 4, 5)
plot(x, y) #올라갔다가 내려갔다가 하는 패턴이 있음. # 어떤 변수를 놓쳤다는 것을 의미할 수도.. 날씨-계절변수
image
fit <- lm(y~x)
abline(fit, col="red")
image

summary(fit)
# 별표 x
# 점이 퍼진정도가 심하여 R-squared가 매우 작다.
# p-value가 매우커서 선형모델로 설명x

par(mfrow = c(2,2))
plot(fit)
# 잔차가 왔다갔다 한다.
# QQ는 괜찮아보이지만,, 잔차때문에.. 이 선형모델은 버려야한다.


# iris데이터에서 1종의 Species만 뽑아  length에 따른 width의  선형모델 알아보기
data(iris)
head(iris)

length = iris[which(iris$Species=="setosa"), ]$Sepal.Length
witdh = iris[which(iris$Species=="setosa"), ]$Sepal.Width
par(mfrow = c(1,1))
plot(length, witdh, col="blue")
image

# ***overlab된 데이터를 살짝 흔들고 싶을 땐 x변수에 jitter()
plot( jitter(length), witdh, col="blue")

# 선형모델 만들기
fit <- lm(witdh ~ length)
abline(fit, col="red")

image

#확인하기
summary(fit)
par(mfrow=c(2,2))
plot(fit) # 완벽한 1자는 아니더라도 잔차가 0에 가까운 선을 보인다.
# ***4번째 그래프를 보니 42번째 데이터가 영향을 많이 준다 = outlier일 것이다.

image


# ***boxplot()로 y값 그려 outlier확인해보기
#참고 : outlier확인 시각화 / http://nittaku.tistory.com/353
par(mfrow=c(1,1))
boxplot(witdh) # boxplot에는 y값만 넣기***! 하나만 티어나와있다..
image

# *** 아웃라이어 제거해보기
length_new = length[-42]
witdh_new = witdh[-42]
boxplot(witdh_new)
image

plot(jitter(length), witdh, col="blue")
# 비교
plot( jitter(length_new), witdh_new, col="blue")
image
# lm라인 추가해보기
fit2 <-lm(witdh_new ~ length_new)
abline(fit2, col="red")

# 기존lm라인을 노란색으로 추가해보기
abline(fit, col="yellow")

image

# fit결과 전체 그리기 *** 원래는 abline으로 넣어주면 선으로 나왔음.
par(mfrow=c(2,2))
plot(fit2) # cook's distance에 다가가는 점없어짐.
image


#### 선형회귀모델 최종 확인 ####
# 변수에 별표 / R-Square / p-value  확인
# plot(fit)으로 잔차의 패턴 확인
# 왔다갔다한다면 , 선형모델로 나오더라도 다른 변수 집어넣기

#### *** 변수 추가해보기 *** ####
x=c(1, 2, 3, 4, 5, 7, 8, 9, 10)
y=c(2, 1, 4, 3, 12, 5, 8, 7, 9)
z=c(2, 1, 4, 3, 12, 5, 8, 7, 10)
# lm(z ~ x + y) 형태로 넣기 나머지 2개는 +로 연결해줌. 더하기는 아님 ****
fit3 <- lm(z~ x+y)
summary(fit3)  # y변수에만 별표 3개이다. x는 버려도 될 듯

par(mfrow=c(2,2))
plot(fit3)

# 별표없는 x를 지우고 해보자..
fit3 <- lm(z~ y)
plot(fit3) # 9번째 잔차만 많이 티어나와있다.

+ Recent posts