인공지능관련/인공지능(AI)

적합도3

학위논문통계 2017. 5. 21. 00:16

 

 

 

2) 매개변수가 들어가는 구조방정식 모형에서 적합도와 모형선택

 

다음은 요새 박사논문에서 연구모형으로 가장 흔히 쓰는 구조방정식 모형입니다.

 

A변수가 독립변수이고, D 변수가 종속변수이고, B와 C는 A와 D변수 인과관계 속에서 중간에 걸쳐가는 매개변수입니다.

 

 

 

 

 

 

그래서 AMOS 등을 이용하여 이 연구모형을 돌렸습니다. 그 결과 다른 회귀계수, 경로계수는 전부 유의적이라 나왔는데, 즉 0이 아니라고 검증이 되었는데 bc 경로계수만 유의적이지 않다고, 즉 0이라고 검증 결과가 나왔다고 하죠. 그럼 앞에서 이야기한 절약의 법칙, 오캄의 면도날의 법칙을 적용하여 다음의 좀 더 간단한 모형을 제시할 수 있습니다.

 

 

 

 

 

이 모형을 현재 우리나라 박사논문에서는 수정모형, 대체모형, 경쟁모형이라는 이름을 붙이고 있습니다. 이 모형은 bc=0인 경우라 위 모형의 특수한 경우라고 할 수 있습니다.

 

이제 조금 감을 잡았죠. 위의 복잡한 모형을 M1이라 하고 아래 수정모형을 M0라고 하면 좀 간단한 모형 M0와 좀 더 복잡한 모형 M1중 어떤 것을 가장 좋은 모형, 최선의 모형인가를 결정하는 문제입니다.

 

당연히 복잡한 위의 원 연구모형 M1의 적합도가 수정모형 M0보다 좋습니다. 그러나 M0의 적합도와 M1의 적합도의 차이가 별로 크지 않는다면 좀 더 간단한 모형 M0을 우리의 최적모형으로 선택을 한다는 것이죠.

 

 

이걸 어떻게 결정하는가? 이건 점근적 방식(asymptotic), 즉 표본의 수 n이 무한대로 간다고 가정하는 방식을 사용하여 X2(카이제곱) 검증을 합니다. 이 X2 검증이 유의적이면 M0와 M1의 적합도 차이가 유의적이라 좀 더 복잡한 모형 M1을 선태갛고 유의적이자 않으면 M1의 적합도가 좀 더 좋지만 M0의 적합도와 별 차이가 없기 때문에 좀 더 간단한 모형 M0을 최적 모형으로 선택한다는 이야기입니다.

 

 

 

왜 점근적 방식으로 하는가? 가장 간단한 선형모형인 회귀분석 모형을 제외하고는 잘 풀어지지 않습니다. 즉 close한 수식으로 나오지 않습니다. 그래서 거의 대부분 표본수가 무한대로 간다고 가정합니다. 표본수가 무한대로 가면 통계 이론상 이건 또 대부분 정규분포로 가고 이 정규분포를 제곱하면 카이제곱이 된다는 이론이 있습니다. 이걸 이용하는 것입니다.

 

 

추상(abstract)수학이 어마어마하게 복잡하고 어렵게 발전했지만 실제 데이터에서 현실에 맞는 모형을 찾는 실중분석에서는 우리가 중고등학교때 배운 간단한 선형형식 아니면 이론을 제대로 전개해 나갈 수가 없습니다.

 

 

만약 원 모형을 돌린 결과 bc=0, ad=0, bd=0, 즉 bc 경로, ad 경로, bd 경로가 모두 유의적으로 나오지 않았다면 이럴 경우 가장 최적의 모형을 어떻게 찾을가요,

 

이럴 경우 원 모형 M1보다 간단한 모형은 무수히 많이 나옵니다. 그럼 완전히 노가다 작업이 됩니다. 그리고 nested 모형, 즉 한쪽 모형이 다른 한쪽 모형보다 간단하다, 복잡하다고 이야기 할 수 없는 모형들을 비교해야 하는 문제가 있습니다.

 

이럴 경우 위의 카이 제곱 검증은 사용할 수 없고 통상 AIC, BIC, 또는 NIC 등의 값들을 보고 결정을 합니다. AMOS에서 작동적으로 모든 가능한 모형의 AIC 값들을 구해 주지 않습니다. 가능한 모든 모형을 일일이 설정하고 각 설정된 모형을 돌려서 그 모형에서의 AIC 값들을 하나씩 구해 내어야 합니다. 이것 자체가 노가다 작업입니다.

 

교수님들 잘 모르면 이런 노가다 작업 시키지 마세요.

 

 

 

이런 생각은 할 수 있습니다. bc 경로 계수를 지워 간단한 모형을 만들어 다시 돌리지 않고 원래 원 모형에서 bc만 0으로 하고 그 결과를 사용하면 되지 않는가 하는 의문입니다.

 

왜 다시 돌려야 하는가 하면 일단 모형의 모양이 달라지면 원래 모형 M1에서 나온 회귀계수, 경로계수 값이 다시 다 변합니다. 또 만약 bc=0, bd=0으로 유의하지 않았다고 나왔다면 bc=0으로 한 간단한 모형에서는 재수 좋게 bd가 0이 아닌 유의적으로 나올 가능성도 있습니다.

 

그래서 모형이 단순해지면 이전의 복잡한 모형에서 유의적하지 않은 인과관계가 단순한 모형에서는 유의적인 인과관계로 나올 수 있습니다. 이건 간단한 논리입니다. 모형이 복잡해진다는 이야기는 인과관계 설정이 많다는 이야기와 같습니다.

 

그럼 인과관계의 영향력이 분산이 되어 버립니다. 그래서 독립변수, 또는 구조방정식 모형에서 매개변수들을 많이 넣어 매우 복잡한 모형을 만들면 영향력들이 서로 분산이 되어 버려 유의적인 인과관계가 생각보다 많이 나오지 않아 곤란한 경우가 자주 생깁니다. 회귀분석에서도 독립변수를 많이 넣으면 영향력이 분산되어 극단적으로 영향력이 있는 독립변수가 하나도 안 나올 수도 있습니다. 상관관계에서는 모두 종속변수와 상관관계가 있다고 나와도요.

 

 

 

3. 실제 회귀분석 결과

 

다음의 표즌 키와 허리둘레가 몸무게에 미치는 영향을 분석하기 위해 가공의 데이터를 만들어 회귀분석을 한 결과이다.

 

id

상수

허리둘레

몸무게

모형1(M1)

(y-M1)2

1

1

160

25

45

47.10

4.42

2

1

170

34

68

65.06

8.66

3

1

165

30

58

56.53

2.16

4

1

185

28

76

74.36

2.68

5

1

180

35

72

75.78

14.30

 

 

다섯명의 사람의 키와 허리둘레, 몸무게 데이터입니다. 가공의 데이터입니다. 두 번째 칸의 1들의 변수는 실제 데이터에서는 없는 데이터입니다. 그러나 이론이나 통계프로그램안에서는 상수항의 구하기 위해서 실제로 들어갑니다. 그래서 독립변수가 하나인 단순회귀분석에서도 상수항을 나타내는 1 벡터가 들어가서 실제 이론이나 통계프로그램안에서는 독립변수가 2개인 회귀분석이 됩니다.

 

그래서 통계 전문가들은 단순회귀분석, 다중회귀분석 이라는 용어를 구별하지 않습니다. 그냥 간단히 회귀분석이라 합니다. 독립변수가 하나인 단순회귀분석도 이론이나 실제 구현에서는 독립변수가 2개인 다중회귀분석이 되기 때문입니다.

 

 

위에 데이터에서 여러분이 칸을 두 개 더 만들어 값을 마음대로 줘 보세요. 그리고 키, 허리둘레, 그리고 적당한 만든 2개의 새 변수로 전부 4개의 변수를 독립변수로 하고 몸무게를 종속변수로 해서 회귀분석을 한번 해 보세요. 그리고 결정계수는 정확하게 1이 됩니다. 즉 이 4개의 변수가 몸무게의 변동을 완전히 설명합니다. 즉 이 4개의 변수의 값만 알면 그 사람의 몸무게를 정확하게 예측할 수 있다는 것이죠.

 

말이 안되는 이야기죠. 몸무게와 아무런 관계가 없는 제멋대로인 변수 2개를 더 집어 넣으니 우리가 신들린 점쟁이가 되어 버리는 것이죠.

 

정확하게는 표본 수 n=독립변수 k+1 이 되면 이런 현상이 일어납니다. 여기서 +1은 두 번째 칸의 상수항을 나타내는 1백터 변수를 말합니다.

 

 

그래서 표본수가 많으면 현상을 설명할 수 있는 독립변수, 인과관계 설정을 많이 해도 괜찮지만 표본 수가 적으면 이에 반해 독립변수, 인과관계 설정이 많으면 황당한 경우가 생겨납니다. 이런 문제가 과적합(over fitting) 문제이고 뉴럴넷에서 표본 수가 많은 big data가 중요한 이유입니다.

 

 

 

하여간 통계 프로그램을 돌려 보니 회귀계수의 값들이 이렇게 나왔습니다.

 

b0=-132.617, b1=0.982, b2=0.904,

 

즉 우리는 최소제곱법을 적용하여 회귀분석 모형의 모수들을 추정했습니다.

 

그럼 다음에 해야 할 문제가 각 데이터에서

 

거리(y, 모형)=(y-(b0+b1*키+b2*허리둘레))2

 

구해야 합니다. 그게 6번째와 7번째 칸에 있는 값입니다. 즉, 예를 들어 첫 번째 사람의 경우 모형에서 나온 추정값은

 

y예측(y hat)=-132.617+0.982*160+0.904*25=47.10

 

그럼 잘못 예측한 오차는

 

거리(y, 모형)=오차=(45-47.10)^2=4.42

 

id

상수

허리둘레

몸무게

모형1(M1)

(y-M1)2

1

1

160

25

45

47.10

4.42

2

1

170

34

68

65.06

8.66

3

1

165

30

58

56.53

2.16

4

1

185

28

76

74.36

2.68

5

1

180

35

72

75.78

14.30

 

 

그럼 데이터에서 있는 표본의 모든 경우, 즉 표본의 모두 사람들의 이 거리를 전부 다 구해서(7번째 칸) 합을 구하면 우리가 원하는 진짜 거리(y-모형)을 구하게 됩니다. 이 값은 SSE=32.209가 나옵니다.

 

그래서 일반적인 원칙은 다음과 같습니다.

 

 

Y의 변동(분산)=독립변수가 설명하는 변동+독립변수가 설명할 수 없는 변동

                      =적합도+거리(y, 모형)

                      =SSR+SSE

 

 

이 됩니다. 이게 회귀분석이나 분산분석에서 나오는 가장 중요한 공식입니다. 흔히 통계책이나 통계 프로그램의 결과에서 나오는 분산분석표가 이것들을 구하는 것입니다.

 

 

 

다음은 S와 R에서 제가 사용하는 회귀분석 코드입니다. 표에 바로 집어 넣을 수 있는 결과물이 나오도록 코드를 짠 것입니다. S에서는 SPSS에서 구해주는 표준회귀계수를 구해주지 않기 때문에 이 코드 안에서는 독립변수와 종속변수를 표준화해서 표준회귀계수도 나오게끔 했습니다. 독립변수가 2개인 경우입니다. 잘 짜는 것이 목적이 아니기 때문에 좀 지저분한 코드입니다. 그러나 S나 R 초보자들은 이 코드를 보면서 S나 R에 나오는 명령어들을 익히기는 좋을 겁니다.

 

 

myreg2<-function(data,dep,ind){

len1<-length(dep);

regsum<-vector("list",len1);

len2<-length(ind);

sdep<-scale(data[,dep]);

sindep<-scale(data[,ind]);

regm<-matrix(NA,len2+3,5);

regm<-as.data.frame(regm);

for ( i in 1:len1){

reg<-lm(data[,dep[i]]~data[,ind[1]]+data[,ind[2]], na.action=na.exclude);

reg<-summary(reg);

sreg<-lm(sdep[,i]~sindep[,1]+sindep[,2], na.action=na.exclude);

sreg<-summary(sreg);

regm[1:(len2+1),1:2]<-as.character(round(reg[[4]][,1:2],3));

regm[1:(len2+1),3]<-as.character(round(sreg[[4]][,1],3));

regm[1:(len2+1),4:5]<-as.character(round(reg[[4]][,3:4],3));

regm[len2+3,2]<-as.character(round(reg[[7]],3));

regm[len2+3,1]<-as.character(round(sqrt(reg[[7]]),3));

regm[len2+3,3]<-as.character(round(adjr(reg[[7]],dim(data)[1],len2),3));

regm[len2+3,4]<-as.character(round(reg[[8]][1],3));

regm[len2+3,5]<-as.character(round((1-pf(reg[[8]][1],reg[[8]][2],reg[[8]][3])),3));

regsum[[i]]<-regm;

}

reg2<-ltom(regsum);

reg2;

}

 

 

ltom은 list를 matrix로 바꾸는 제가 만든 함수입니다.


ltom<-function(dat){

k<-length(dat);
m<-dim(dat[[1]])[1];
n<-dim(dat[[1]])[2];

mat<-matrix(NA,k*m,n);
mat<-as.data.frame(mat);
for (i in 0:(k-1)){
mat[(m*i+1):(m*(i+1)),]<-dat[[i+1]];

}

mat;
}

 

'인공지능관련 > 인공지능(AI)' 카테고리의 다른 글

적합도4  (0) 2017.07.09
적합도3  (0) 2017.06.12
적합도2  (0) 2017.05.20
적합도1, 모형 선택  (0) 2017.05.11
연관분석3  (0) 2017.03.15