오래동안 SAS를 즐겨 사용하여 왔습니다.

그러다가 R을 접한지도 벌써 7년이 지났습니다.

예전에는 SAS강의를 했었는데, R 강의를 한지도 벌써 7년째가 되네요.

예전에 "SAS연습과 활용"에서 SAS 를 활용한 연습문제를 책으로 발간한 적이 있습니다.

이제는 이런 SAS 문제를 R로 해결해 보려고 합니다.

 

SAS에서 R로 전환하려는 분들에게 조금이나마 도움이 되었으면 합니다.

궁금하신 부분이나 추가하고 싶은 부분이 있으면 댓글을 달아주시면 보완하도록 하겠습니다.

 

  1. SAS 설치하기  
  2. SAS OnDemand for Academics
  3. R 다운로드
  4. R 설치하기
  5.  

 

행렬(Matrix)

숫자난 문자의 정돈된 사각형배열

보통은 행렬의 모든 원소가 실수인 경우를 다룹니다.

 

전치행렬 transpose matrix

행과 열을 바꿈

A=np.arange(1,7).reshape(2,3)   

1 2 3

4 5 6

A.T

1 4

2 5

3 6

 

정방행렬 square matrix

행과 열의 크기가 같은 행렬, 정사각형 행렬

 

대칭행렬

정방행렬 중에서 원래 행렬과 전치행렬이 같은 행렬

2  5

5  2  

 

단위행렬(unit matrix) 또는 항등행렬(Identity matrix) I

행과 열 개수가 같고, 대각요소가 모두 1인 행렬

대각행렬의 특수한 형태

np.eye(5)

 

대각행렬, 대각선행렬(diagonal matrix)

정방행렬 중에서 대각요소만 가지는 행렬

2 0 0

0 5 0

0 0 3

 

주대각선

정방행렬에서 대각선항향의 요소들 akk

 

멱등행렬(idempotent matix)

정방행렬 A가 AA=A 인 경우, 행렬 A를 멱등행렬

예 A=X(X'X)-1X'

[X(X'X)-1X'][X(X'X)-1X']=X(X'X)-1X'

 

역행렬

정사각행렬 A에 대하여 어떤 행렬 B를 곱했을때 단위행렬이 되면 

행렬 B를 행렬A의 역행렬이라 함

AA-1 = A-1 A= I

 

정칙행렬 nonsingular matrix

행렬 A가 역행렬을 갖고 있다면 행렬 A를 정칙행렬이라 함

 

행렬의 연산

행렬의 덧셈, 뺼셈, 곱셈

np.dot(A,B)

 

트레이스(trace)

정방행렬에서 대각선 요소들의 합

 

행렬식 determinant  | A |

 

소행렬식 minor

A13 은 1행과 3을 제외한 행렬의 determinant

 

분할행렬

 

 

행렬의 응용

회귀계수  b=(X'X)^-1 XY

'수학 이야기' 카테고리의 다른 글

벡터  (0) 2022.01.21
엔트로피  (0) 2021.11.02
시그모이드 함수 관련 - 미분  (0) 2021.05.17
엔트로피  (0) 2021.05.07
고유치와 고유벡터  (0) 2021.05.07

벡터 norm

벡터의 크기, L1노름, L2 노름

L2 노름 : 피타고라스 거리

L1 노름: 맨해튼 거리

 

단위벡터

크기가 1인 벡터

벡터를 norm 으로 나누면 됨

 

벡터의 내적

a.b= sum( a1 bi)

a.b= |a| |b| cos theta

 

두 벡터가 직교하면 내적은 0이 됩니다.

높은 차원의 벡터는 눈으로는 직교하는지 구분할 수 없고, 내적공식을 이용하여 0 이면

직교하는 것으로 판단합니다.

 

고유벡터와 고유치

고유벡터는 선형변환을 했을 때 방향은 변하지 않고 크기만 변하는 벡터

? 그래서

크기만 변한다고 했는데 그 크기를 고유값이라고 합

정방행렬(열과 행의 개수가 같은 행렬) A 에 대하여 다음을 만족하는 벡터 x

$ A \vec{x} = \lambda \vec{x} $ ( $ \lambda $ 는 상수)

$ \begin{bmatrix} 4 & 1 \\ 2 & 3 \end{bmatrix}$

 

$ \begin{bmatrix} 4 & 1 \\ 2 & 3 \end{bmatrix}  \begin{bmatrix} x_1 \\ x_2 \end{bmatrix} $

= $ \lambda \begin{bmatrix} x_1 \\ x_2 \end{bmatrix} $

$ 4 x_1 +  x_2 = \lambda x_1 $

$ 2 x_1 + 3 x_2 = \lambda x_2 $

$ (4-\lambda) x_1 +  x_2=0 $

$ 2 x_1 + (3- \lambda) x_2 = 0 $

$ $

$ A x = \lambda x $

$ A x - \lambda x =0 $

$ A x  \lambda I x = 0 $

$ (A - \lambda I) x =0 $

 

특성행렬(characteristic matrix), 특성행렬식

$ (A - \lambda I) x =0 $의 식이 x=0 아닌 해를 가지려면

$ (A - \lambda I) =0 $ 가 되어야 하고 $ (A - \lambda I) =0 $ 를 특성방정식(characteristic eauation)이라고 함

$ (A - \lambda I) $ 특성행렬이라고 함

$ D(\lambda) $는 행렬 A의 특성행렬식(cjaracteristic determinant)

 

 

'수학 이야기' 카테고리의 다른 글

행렬  (0) 2022.01.31
엔트로피  (0) 2021.11.02
시그모이드 함수 관련 - 미분  (0) 2021.05.17
엔트로피  (0) 2021.05.07
고유치와 고유벡터  (0) 2021.05.07

노트북으로 파이썬 파일을 테스트하기에 참 편리합니다.

그런데 ipynb 파일을 인쇄를 하는 등 작업을 할 경우에는 py파일로 변환하면 편리합니다.

ipynb 파일을 py파일로 변환하는 변환툴인 npconvert를 pip 를 이용하여 설치해 봅니다.

pip install nbconvert

ipynb 파일을 py 파일로 변환

jupyter nbconvert --to script filename.ipynb

 

 

다음과 같은 메세지가 나타나면서 변환이 완료됩니다.

[NbConvertApp] Converting notebook filename.ipynb to script
[NbConvertApp] Writing 1981 bytes to filename.py

한꺼번에 여러 파일을 동시에 변환하려면

jupyter nbconvert --to script filename1.ipynb filename1.ipynb


출처: https://beyonddata.tistory.com/entry/ipynb-to-py-변환-방법주피터-노트북-to-파이썬 

[데이터 날개달기]

확률분포에서 가장 많이 쓰이는 정규분포는 가우스(Gauss) 분포라고 합니다.

독일의 수학자 가우스의 이름을 따른 것입니다.

이 분포를 처음 발견한 사람을 프랑스 수학자 드무아브르(Abraham de Moivre)입니다.

1733년 그의 논문에서 처음 정규분포 밀도함수 공식의 특수 형식 제시했음

1774년 프랑스 수학자 라플라스(Pierre Simon Laplace) 정식으로 정규뷴포 밀도함수 공식 발표

1809년 가우스가 정규분포 공식을 이용하여 오차의 분포를 표현함, 큰 파장을 일으켜

          가우스의 이름으로 정규분포를 몀명함

예전에 SAS를 사용할 때, SAS의 가장 큰 강점은 파일 핸들링이었습니다.

R 도 SAS 못지않게 (아니면 더 훌륭한) 파일 핸들링 기능을 갖고 있습니다.

다만 R 에는 여러 패키지들이 있고, 패키지들마다 특징이 있어서, 파일핸들링을 위해 조금 어려운 점이 있었습니다.

패키지 dplyr 을 사용함으로써 SAS에서의 파일 핸들링을 거의 구현할 수 있었습니다.

패키지 dplyr 기능을 엄청 많지만 그 중에서 필수적인 것만을 나열하였습니다.

 

# 1. 변수추출하기 - select( ) 함수

mtcars %>% select(mpg)

mtcars %>% select(mpg, hp, wt)

mtcars %>% select(-mpg)

mtcars %>% select(-mpg,-hp)

# 2. 조건에 맞는 관측치 추출하기 - filter( ) 함수

mtcars

library(plyr)

mtcars %>% filter(am == 0)

mtcars %>% filter(am != 0)

mtcars %>% filter(wt >= 3)

`

# *** 조건에 관측치와 변수 추출하기

mtcars %>% filter(am == 0) %>% select(am, mpg, hp, wt)

mtcars %>% filter(am == 0) %>% select(am,mpg,hp, wt) %>% head

 

# 3. 새로운 변수 만들기 - mutate( ) 함수

mtcars %>% mutate(total = cyl + gear) %>% head

mtcars %>% mutate(tot1 = cyl + gear, tot2= cyl+carb) %>% head

 

# *** 조건에 따른 변수 만들기

mtcars %>% mutate(grade = ifelse(wt >= 3, "big", "small")) %>% head

mtcars %>% mutate(grade = ifelse(wt >= 3,"big","small")) %>% arrange(grade)

# 4. 그룹별 요약하기 - summarise( ) 함수, summarize( ) 함수

mtcars

mtcars %>% summarise(mean_wt =mean(wt))

 

# 5. 그룹별 요약하기 - group_by( ) 함수

mtcars %>% group_by(am) %>% summarise(mean_wt =mean(wt))

m <- mtcars %>% group_by(am) %>% summarise(mean_wt =mean(wt))

class(m)

mtcars %>% group_by(am) %>%

summarise(mean_wt =mean(wt),

sum_mpg =sum(mpg),

n=n())

 

mtcars %>% group_by(am, vs) %>%

summarise(mean_wt =mean(wt),

sum_mpg =sum(mpg),

n=n())

 

# 6. 정렬하기 - arranage( ) 함수

mtcars %>% arrange(wt)

mtcars %>% arrange(desc(wt))

mtcars %>% arrange(am, desc(wt))

+ Recent posts