# 계량경제학 강의 R 코드

# 제10장 다중효과 모형에서 가설검정

# 10.1 하나의 선형 제약으로 이루어진 가설의 t검정

# 예제 10.1 2년제 대학과 4년제 대학

datadir <- "http://econ.korea.ac.kr/~chirokhan/book/data"
Twoyear <- read.csv(file.path(datadir,"twoyear.csv"))
nrow(Twoyear)
names(Twoyear)
summary(lm(lwage~jc+univ+exper,data=Twoyear))
Twoyear$totcoll <- with(Twoyear, jc+univ)
summary(lm(lwage~jc+totcoll+exper,data=Twoyear))
ols <- lm(lwage~jc+univ+exper,data=Twoyear)
b <- coef(ols)
v <- vcov(ols)
se <- sqrt(v[2,2]+v[3,3]-2*v[2,3])
se
tstat <- (b[2]-b[3])/se
tstat
n <- nrow(Twoyear)
pval <- 2*(1-pt(abs(tstat),n-4))
pval

# 10.2 잔차제곱합을 비교하여 검정하는 방법

qf(.95,5,85)

# 예제 10.2 2년제 대학과 4년제 대학 예제에서 수동 F검정

n <- nrow(Twoyear)
u1 <- lm(lwage~jc+univ+exper,data=Twoyear)$resid
u0 <- lm(lwage~I(jc+univ)+exper,data=Twoyear)$resid
ssr1 <- sum(u1^2)       # SSR_U
ssr0 <- sum(u0^2)       # SSR_R
Fstat <- ((ssr0-ssr1)/1)/(ssr1/(n-4))
Fstat
pval <- 1-pf(Fstat,1,n-4)
pval

# 예제 10.3 2년제 대학과 4년제 대학 예제에서 자동화된 F검정

#install.packages('car')
library(car)
ols <- lm(lwage~jc+univ+exper,data=Twoyear)
lht(ols,"jc=univ")
#install.packages('lmtest')
library(lmtest)
ols1 <- lm(lwage~jc+totcoll+exper,data=Twoyear)
ols0 <- lm(lwage~totcoll+exper,data=Twoyear)
waldtest(ols1,ols0)
library(lmtest)
ols1 <- lm(lwage~jc+univ+exper,data=Twoyear)
ols0 <- lm(lwage~totcoll+exper,data=Twoyear)
waldtest(ols1,ols0)
library(lmtest)
ols1 <- lm(lwage~jc+totcoll+exper,data=Twoyear)
waldtest(ols1,"jc")
waldtest(ols1,1)
waldtest(ols1,.~.-jc)

# 예제 10.4 병원 방문

library(lmtest)
data(Doctor,package="Ecdat")
ols1 <- lm(doctor~children+access+health,data=Doctor)
coeftest(ols1)
library(car)
lht(ols1,"access")
library(lmtest)
waldtest(ols1,"access")
ols0 <- lm(doctor~children+health,data=Doctor)
waldtest(ols1,ols0)

# 10.3 여러 선형제약으로 이루어진 가설의 검정

# 예제 10.5 복잡한 제약들의 F검정

ols1 <- lm(lwage~jc+univ+exper,data=Twoyear)
lht(ols1, c("jc=univ","univ=exper"))

# 예제 10.6 복잡한 제약들의 F검정(계속)

datadir <- "http://econ.korea.ac.kr/~chirokhan/book/data"
Twoyear <- read.csv(file.path(datadir,"twoyear.csv"))
ols1 <- lm(lwage~jc+univ+exper,data=Twoyear)
library(car)
lhs <- rbind(c(0,1,-1,0),c(0,0,1,-1))
lht(ols1,lhs)

# 10.4 함수형태 설정 오류의 검정

# 예제 10.7 RESET 검정

library(lmtest)
set.seed(1)
n <- 100
x1 <- rnorm(n)
x2 <- exp(rnorm(n))
y <- 1+x1-log(x2)+rnorm(n)
ols <- lm(y~x1+x2)
resettest(ols,power=2:3)
yhat <- lm(y~x1+x2)$fit
aux <- lm(y~x1+x2+I(yhat^2)+I(yhat^3))
coeftest(aux)
waldtest(aux,ols,test='F')
resettest(y~x1+log(x2),power=2:3)

# 10.5 라그랑지 승수 검정

# 예제 10.8 라그랑지 승수(LM) 검정

n <- nrow(Twoyear)
ols0 <- lm(lwage~I(jc+univ+exper),data=Twoyear)
Twoyear$resid <- ols0$resid
ols1 <- lm(resid~jc+univ+exper,data=Twoyear)
lmstat <- n*summary(ols1)$r.sq
n <- nrow(Twoyear)
n
ols0 <- lm(lwage~I(jc+univ+exper),data=Twoyear)
Twoyear$resid <- ols0$resid
ols1 <- lm(resid~jc+univ+exper,data=Twoyear)
R2aux <- summary(ols1)$r.sq
R2aux
lmstat <- n*R2aux
lmstat
qchisq(.95,2)
1-pchisq(lmstat,2)