x <- c(58, 78, 77, 65, 87, 66, 45, 66, 100)
var_x <- sum((x - mean(x))^2) / (length(x) - 1)
# 간단히 var(x)로도 계산 가능하다.
var_x
[1] 264
이 자료는 R 언어를 사용한 임상 데이터 과학(Clinical Data Science) 교육 자료를 정리하여 공유하기 위해 만들었다.
무엇보다 R 언어는 통계학의 세계 공용어로 자리잡았으며, 자신의 연구 결과를 발표하기 위해 또는 새로운 정보를 얻기 위해 논문을 읽어야 하는 의료인에게는 통계는 늘 따라다니는 존재이다.
R 언어 세계는 넓어, 넓은 세계에서 처음 시작하는 사람들은 한참을 헤매고 나서야 길을 찾는 경우가 많다. 물론 그런 행위도 가치가 없는 것은 아니지만, 바쁜 의료인에게는 지레 포기하게 만드는 원인이 될 수 있다. 따라서 바로 사용할 수 있고, 늘 찾아볼 수 있도록 정리하는 것이 이 사이트의 목적이다.
요즘에는 AI coding assistant가 발전하여 이런 작업을 하기에도 편리해졌다. 기초 개념을 소개하는 예시 등을 만들 때는 이런 도구들이 큰 도움이 되었으며, 이 사이트의 콘텐츠 역시 그런 결과물을 다수 포함시켰다.
자모비(Jamovi)는 R 언어를 기반으로 하는 통계 소프트웨어로, R 언어를 처음 접하는 사용자에게 친숙한 인터페이스를 제공한다. 코딩에 익숙하지 않은 사용자들을 위해서 자모비로 통계 분석을 하는 방법도 함께 소개하려고 한다.
Python 언어를 사용한 임상 데이터 과학 교육 자료 링크
임상 데이터 과학 교육 자료는 데이터 과학에서 핵심적 역할을 하는 R, Python, SQL(DuckDB) 등 3개의 언어를 사용하여 데이터 분석을 수행하는 방법을 소개한다. 이 사이트에서는 R 언어를 중심으로 설명한다.
통계학
R 언어
이제 본격적으로 R 프로그래밍 언어를 학습할 것이다. 처음 시작하는 사용자들을 위해 다음과 같은 조언을 하고 싶다.
코드는 읽기만 해서는 내 것이 되지 않는다.
프로그래밍 언어도 일종의 언어라서 읽기만 해서는 자기 것으로 만들 수 없다. “항상 손으로 써보고, 실제로 입력해서 결과를 확인”하는 습관을 들이는 것이 좋다. 나는 컴퓨터 코드는 그림과 텍스트 중간에 있다는 생각을 많이 한다. 텍스트처럼 읽히기는 하지만 실제로 그런 문장을 써 보면 잘 안된다. 이런 것은 누구가 그러하다. 극복하는 방법은 끊임없는 연습이다.
코드는 할당 연산자를 기준으로 오른쪽을 먼저 읽고, 안에서 밖으로 읽는다.
다음을 간단한 R 함수를 사용하여 분산을 계산한 예이다. 분산의 공식은 다음과 같은데, 이걸 R 코드로 작성해 보면 다음과 같다. \[ \frac{\sum{(x- \bar{x})^2}}{n - 1} \]
x <- c(58, 78, 77, 65, 87, 66, 45, 66, 100)
var_x <- sum((x - mean(x))^2) / (length(x) - 1)
# 간단히 var(x)로도 계산 가능하다.
var_x
[1] 264
이 경우 할당 연산자 <-
오른쪽을 먼저 읽는데, 이처럼(이렇게 중첩시키는 코드는 좋은 코드가 아니다) 중첩된 코드는 안쪽에서 밖으로 읽는다. 이 경우에는 x - mean(x)
를 마음 속으로 읽고, 그 다음 이것을 제곱하고, 제곱한 것들은 sum()
하고, 이것은 length(x) - 1
값으로 나눈다고 읽는다. 그렇게 계산된 값을 var_x
변수에 할당한다.
때론 중간 과정을 풀어서 차례로 확인할 필요가 있다.
R 언어에서 계산은 하나의 값이 아니라 값들을 모은 벡터(vector)를 대상으로 하는 경우가 많아 처음 읽을 때 직관적으로 파악되지 않을 수 있다. 이런 경우에는 중간 과정을 풀어서 읽어 보자. 앞에 본 코드를 풀어서 실행해 보면 이해가 더 잘 될 수도 있다.
코드가 눈에 들어오기 시작하면 도움말(help page)을 자주 볼 필요가 있다. 하지만 또 너무 자세히 매달릴 필요가 없다.
R 도움말 페이지는 간결하고 정리가 잘 되어 있지만, 초보자들은 처음에 읽기 어려울 수 있다. 하지만 어느 정도 공부하고 나면 자주 찾아보는 습관을 들이는 것이 좋다.
마스터하기 보다 끊임없는 학습이 필요하다.
R 언어의 세계는 방대해서 실제로 이것을 마스터하기는 불가능하다. 그래서 지엽적인 문제에 너무 집착하면 앞으로 나갈 수가 없다. 어느 정도 이해하고 앞으로 나가고, 어떤 문제를 만나거나 잘 이해가 안 되는 부분이 있으면 좀 더 깊게 들어 가는 방법을 취한다.
니즈(needs)을 찾아라.
니즈는 우리에게 앞으로 나갈 동기를 부여한다. 나는 이전에 오피스 프로그램 없이 살아가기가 컴퓨터 공부의 중요한 니즈였다.
난 주변 의료인들에게 페이지 아래에서 소개하는 Quarto를 사용해 볼 것을 권고한다. 논문, 저술, 프레젠테이션, 블로그, 책 등 생각하는 모든 것을 같은 원리로 만들 수 있다. R이든 Python이든 이것만 있어도 오피스 프로그램 없이도 살아가는 것이 가능하고, 그래서 늘 사용하고 배우는 기회를 가질 수 있다.
프로그래밍 언어는 단순한 도구가 아니다. 언어를 사랑하자.
우린 항상 뭔가를 해결해야 하고 항상 바쁘다. 인공지능 시대에 프로그래밍 언어를 배워야 살아남을 것 같고 그렇지 않으면 뒷처지는 느낌을 가지게 된다. 그래서 프로그래밍 언어를 배울 때도 숙제를 하듯 할 수 있다. 그럴 필요가 없다고 생각한다. 마음을 열고 이 사랑스런 존재를 대하면 좋을 것 같다. 새로운 세상을 만들어 내는 이 위대한 존재를 어떻게 사랑하지 않을 수 있을까?
프로그래밍 언어 학습은 어떤 앱 사용법을 배우는 것과 완전히 다르다. 언어는 쓰고 버리는 것이 아니라 우리 뇌 안에서 영원히 존재할 것이기 때문이다.
언어마다 그 언어가 추상화하여 세상을 표현하는 방법과 세상의 문제를 해결하는 방법이 있다. 그리고 그 세상을 확장해 나가가는 사람들이 있다는 것을 알 필요가 있다. 그런 사람들을 존중하고 그 열정을 배우는 것이 프로그래밍 언어 학습의 중요한 부분이라 생각한다.
사용 도구
이 사이트는 오픈 소스 과학기술 출판 시스템 Quarto를 사용하여 제작했다. 이것은 재현가능한 방식(computational reproducibility)으로 데이터 분석과 과학기술 관련 저술 작업을 하는 데 최적의 환경을 제공한다. 마크다운 텍스트와 코드를 적절히 혼합하여 article, book, website, presentation 등을 만들 수 있다.
시작일
이 사이트는 2025년 3월에 시작하였다.