## 단순 선형회귀분석 모의실험
   # 미리 정해둔 모수( beta0, beta1, sigma )에 대해 생성한 데이터로 추정하고 맞는지 확인하기

beta0 = 2.5
beta1 = -3
sigma = 4
x = rnorm(100, 10, 4)
y <- beta0 + beta1 * x + rnorm(100, 0, sigma)
data <- data.frame( x,y )
plot(y~x, data)

 

 

# LSE
n=nrow(data)  # obs
Sxx = sum( (x-mean(x))^2)
Sxy = sum((x-mean(x))*(y-mean(y)))

Beta1H = Sxy/Sxx
Beta0H = mean(y)-Beta1H*mean(x)

yH = Beta0H + Beta1H*x
s = sqrt(sum((y-yH)^2)/(n-2))

SE_Beta1H = s/sqrt(Sxx)
SE_Beta0H = s*sqrt(1/n + mean(x)^2 / Sxx )

summary(lm(y~x, data))

  # 직접 구한 결과가 모델에서 구한 결과와 같음을 알 수 있다.
  # 실제 정한 모수와 추정값이 꽤 다른 이유는 표준편차가 크기 때문이다.(sigma=4)

 

 

# 분산분석 in reg
  # ANOVA table
SST = sum((y-mean(y))^2)
SSR = sum((yH-mean(y))^2)
SSE = SST-SSR
R2 = SSR/SST
cor(x,y)^2  # 단순선형회귀에서 R^2값은 상관계수의 제곱과 같음

MSR=SSR/1
MSE=SSE/(n-2)
F=MSR/MSE
pvalue=1-pf(F,1,n-2)

SS=c(SSR, SSE, SST)
df=c(1, n-2, n-1)
MS=c(MSR, MSE, 0)
F=c(F, 0, 0)
pvalue=c(pvalue, 0, 0)
AOV_table=cbind(SS, df, MS, F, pvalue)

summary(lm(y~x, data))

## 잔차 분석
e=y-yH
mean(e)
sd(e)
hist(e)
plot(y,e)


 

## plotting
mod <- lm(y~x, data)
plot(mod)

 

+ Recent posts