Here's the problematic situation:
통계 돌리는데 SPSS syntax 질문이 있습니다. 이게 좀 복잡해가지구 신택스를 짜기가 쉽지가 않네요.. 뭐냐면.. 60개의 소그룹이 있고 각 그룹은 1 - 10 명의 멤버를 가지고 있습니다. 지금 해야하는 일은 각 그룹 내에서의 멤버들간에 sum of absolute values of (differences between each pair of members)를 구해야하는 것입니다. 혹시 신택스 어떻게 해야하는지 SPSS 명령어 도움주실 수 있는 분 있어요? --우산
SP score (Sum of pairs) 를 말씀하시는 것 같습니다. 각 pair 마다 difference 의 절대값을 취하고, 이걸 모두 더한 값 아닌가요? 제가 방금 좀 보기로는 통계 프로그램에서 SP score를 다루는 예가 별로 없어서, 처리하는 함수가 없는 것 같은데요. 그리고 이게 치명적인 약점이 있는 걸로 알고 있는데, 한 상황에 대해서 overcount 하는... 우산님 처리하는 data가 어떤 것일지에 따라 틀릴 것 같습니다. 대부분 이거 대신 SP score 에다가 제곱을 해서 모두 더한 SS (Sum of square) 를 쓰잖아요. 만약 구하고자 하는 것이 이것이라면 chi-squre나 ANOVA 등을 잘 응용하면 비교적 쉽게 할 수 있을 것 같기도 한데... 그래도 좀 노가다가 필요할 지도...
근데 어떤 것이든, python 으로 프로그램하면 금방 될 것 같습니다. 만약 앞으로도 이런 걸 자주 하실 거라면, 프로그램을 하나 만들어 두시는 것이 좋을 듯 싶습니다. 김창준님께 부탁하시면, 금방 쌈빡하게 만들어 주실 것 같은데... --지상은
네 맞아요, 한 그룹 내의 각 페어마다의 차이의 절대값을 다 더한 값, 그것을 구해야하는 거 맞습니다. 그리고 네 맞아요, 그걸 한번에 처리해주는 함수 역시 패키지안에 없는 모양입니다. 무엇을 구해야하는지 토론할 때 '섬 오브 스퀘어' 얘기도 나왔는데 아무래도 절대값들의 합과는 개념이 좀 다르다고 해서 절대값을 합을 구하라는 쪽으로 일이 떨어졌거든요. '섬오브스퀘어'를 조작하면 절대값의 합과 비슷한 걸 구할 수가 있을까나..? 모르겠네요.. 암튼 절대값의 합 구하는 명령어가 딱히 따로 없는 것같으니까 논리적으로 조건명령어("if" 같은..)들을 잘 조합해서 할 수 있을까..생각해봤지만..것두 논리가 단박에 머릿속에 줄을 안서네요...-_- 근데 그 파이썬이라는 게 통계를 하는 데에도 쓰일 수 있는 것인 모양이군요.. 아 이거 통계학과에다가 물어보면 아는 사람이 있을라나.. 통계 전공한 경제학과생을 붙잡아서 물어볼까.. 고민고민.. --우산
고민하실 필요가 있을까요? SS (Sum of squares) 는 편차의 제곱의 합이고, SP (Sum of pairs) 는 편차의 절대값의 합인데, 둘 다 구해서 비교를 해 보시죠 뭐. 어려운 것도 아닌데.
일단 우산님께서 하셔야 할 것은, SPSS에서 data를 정리를 좀 해야 합니다. 데이터가 있는 파일을 다른 이름으로 저장하신 다음에, 그룹명 variable과 계산하기를 원하는 variable 만 남기고 다른 변수들은 모조리 지워버립니다. 원본은 따로 남아 있으니 상관 없겠죠. 그리고 그 파일을 text 로 저장을 하셔서 이렇게 편집합니다. 예를 들어 3 그룹에 각기 2명, 3명, 4명의 data 가 있다면
일단 우산님께서 하셔야 할 것은, SPSS에서 data를 정리를 좀 해야 합니다. 데이터가 있는 파일을 다른 이름으로 저장하신 다음에, 그룹명 variable과 계산하기를 원하는 variable 만 남기고 다른 변수들은 모조리 지워버립니다. 원본은 따로 남아 있으니 상관 없겠죠. 그리고 그 파일을 text 로 저장을 하셔서 이렇게 편집합니다. 예를 들어 3 그룹에 각기 2명, 3명, 4명의 data 가 있다면
3 1
4 5 6
4 2 2 4
4 5 6
4 2 2 4
이런 식으로 된 text 파일을 만들 수 있죠. 제대로 한다면 10분 이상 안 걸릴 겁니다. 60그룹이면 60줄이 되겠죠. 그룹 사이에는 엔터쳐서 break를 주고, 그룹안의 멤버 사이에는 스페이스만 주면 됩니다. 그 다음에는 노스모크의 훌륭한 프로그래머들에게 부탁하시면 될 것 같습니다. 유월님께 부탁해 보세요. 제 생각에 유월님이 핵심적인 함수를 코딩하는데 걸리는 시간은 5분이면 충분할 것 같습니다. 저는 너무 초보라 책 보고 문법 찾아 보고 그래야겠지만, 제가 해도 30분이면 해 낼 수 있지 않을까 싶은데... 제가 만든 코드는 reusuable 할 것 같지 않군요.
계산하는 알고리즘은 한 그룹을 읽어서 list 로 만든 다음에 함수에 넘겨 주고, 두개의 for 문으로 감싸서 안의 for 문이 밖의 것보다 하나 앞서 가도록 해서 계산하면 모든 조합에 대해서 중복 없이 될 것 같습니다. --지상은
우산님 이거 그대로 하시면 돼요. 파이썬 없으면 윈도우용 까시면 되구요. 파이썬 정보광장 자료실에 가셔서 Python 2.1 final (윈도우용) 다운 받으시고 클릭만 하면 설치될 겁니다. 그리고는 김창준님 쓰신 대로 하시면 되죠.
Sum of squares 는 생각해 보니, 좀 틀릴 것 같군요. 둘씩 비교한 것이 아니라 각각의 data에서 평균을 뺀 편차의 제곱의 합이니까. 하지만, 그것도 약간만 코드 변경하면 가능할 겁니다. --지상은
Sum of squares 는 생각해 보니, 좀 틀릴 것 같군요. 둘씩 비교한 것이 아니라 각각의 data에서 평균을 뺀 편차의 제곱의 합이니까. 하지만, 그것도 약간만 코드 변경하면 가능할 겁니다. --지상은
그러나..... 컴맹인 저에게 문제는... 이런 raw code of computer language를 어케 다루어야하는지 전혀 감이 없다는 것... --우산
내가 애초에 멀 설명을 잘못한 건지.. 위의 코드를 이용해서 아까 유월씨가 시범보여준 예에서 한가지 이상한 점이..이거 한 그룹당 결과값이 하나가 나오면 안되는데... 개념상 그 그룹안의 사람들이 원래 다른 수치를 가지고 있었다면 그 결과도 같은 그룹에 있다해도 각각의 사람들의 결과값이 다르게 나와야되는 거같은데... 구하고자 하는 개념은 "한 그룹 안에서 A라는 사람과 다른 모든 사람 각각과의 거리(distance)의 (절대값) 합"을 이 A라는 사람이 가지게 되고 이 과정을 각 멤버들에 대해 반복하는 것이거든요. 이런 개념이라면 원래의 값이 달랐던 사람들은 같은 그룹이라하더라도 다른 값의 합을 갖게 되는 게 아닌가 싶은데... 제가 말하는 거랑 유월씨가 짜준 프로그램이랑 개념이 지금 서로 다른 건가요?? --우산
{{|SOP2.py (Sum Of Distances)|}}