코드 사이에 작업 시간을 측정하는 코드를 삽입하는 목적은 대개 코드의 실행 속도를 더 빠르게 하기 위해서입니다. 당연히 R에서도 이런 기능을 제공하는데, 통계 분석의 경우 코드 실행 속도를 더 빠르게 하는 건 만약 샘플 수가 작다면 큰 의미가 없고 흔히 쓰는 통계 기법의 경우 코드를 획기적으로 (?) 수정할 수 없기 때문에 빈번하게 사용하는 경우는 아니라고 하겠습니다. 아무튼 방법은 간단해서 start_time , end_time 두 코드 사이의 시간을 측정하게 만들 수 있습니다. 보통은 아래처럼 사용합니다.
start_time <- span="" sys.time="">->
(측정하고자 하는 코드)
end_time <- span="" sys.time="">->
end_time - start_time
여기서는 간단하게 다중 회귀 분석에서 결과와 잔차도를 그리는 데 걸리는 시간을 측정해 보겠습니다. 당연히 샘플 수가 많아야 시간이 좀 걸리므로 샘플 수는 20만개로 늘려보겠습니다.
set.seed(1234)
x1<-rnorm span="">-rnorm>
x2<-rnorm span="">-rnorm>
x3<-rnorm span="">-rnorm>
b<-rnorm span="">-rnorm>
y=3*x1+1.5*x2+1.7*x3+b
df1<-data .frame="" span="" x1="" x2="" x3="" y="">-data>
df1$x4="a"
set.seed(1234)
x1<-rnorm span="">-rnorm>
x2<-rnorm span="">-rnorm>
x3<-rnorm span="">-rnorm>
b<-rnorm span="">-rnorm>
y=2.8*x1+1.3*x2+1.6*x3+b
df2<-data .frame="" span="" x1="" x2="" x3="" y="">-data>
df2$x4="b"
df3<-rbind df1="" df2="" span="">-rbind>
start_time <- span="" sys.time="">->
model1=lm(y~x1+x2+x3+factor(x4), data=df3)
summary(model1)
par(mfrow=c(2,2))
plot(model1)
end_time <- span="" sys.time="">->
end_time - start_time
> model1=lm(y~x1+x2+x3+factor(x4), data=df3)
> summary(model1)
Call:
lm(formula = y ~ x1 + x2 + x3 + factor(x4), data = df3)
Residuals:
Min 1Q Median 3Q Max
-21.801 -3.436 -0.012 3.449 23.851
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 40.452963 0.297546 136.0 <2e-16 span="">2e-16>
x1 2.898333 0.002276 1273.5 <2e-16 span="">2e-16>
x2 1.400595 0.002286 612.8 <2e-16 span="">2e-16>
x3 1.653205 0.001131 1461.5 <2e-16 span="">2e-16>
factor(x4)b -38.487206 0.041031 -938.0 <2e-16 span="">2e-16>
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 5.086 on 199995 degrees of freedom
Multiple R-squared: 0.9913, Adjusted R-squared: 0.9913
F-statistic: 5.676e+06 on 4 and 199995 DF, p-value: < 2.2e-16
> par(mfrow=c(2,2))
> plot(model1)
>
> end_time <- span="" sys.time="">->
>
> end_time - start_time
Time difference of 9.320258 secs
두 코드 사이의 시간은 9.32초라는 결과가 나왔습니다. 일반적인 통계 분석에서 수십만개 이상의 관측치를 보는 경우는 분야에 따라 드물지 않을 수도 있지만, 아무튼 시간은 그렇게 많이 걸리지 않습니다. 참고로 이 컴퓨터의 사양은 라이젠 2700X이고 메모리는 DDR4 2666MHz 32GB를 사용합니다. 물론 싱글 쓰레드 작업입니다.
회귀 분석에서 결과를 보기 위한 summary와 잔차도를 보기 위한 plot 함수는 기본이라 사실 여기서 어떻게 코드를 수정해서 작업 속도를 빠르게 하기는 불가능합니다. 다만 내가 자주 하는 작업에서 해당 컴퓨터의 연산 속도를 알 수 있다는 장점이 있습니다. 이걸 모아서 나만의 벤치마크를 만들 수도 있을 것입니다. 제가 나중에 직접 한번 해보겠습니다.
댓글
댓글 쓰기