FDA Ch.1 — 함수형 데이터 분석의 첫걸음

기저 전개, 표본 평균·공분산, 주성분 함수, BOA 수익률·DTI 응용

Kokoszka & Reimherr (2017) Ch.1을 기반으로, 함수형 데이터 분석(FDA)의 핵심 개념인 기저 전개(basis expansion), 표본 평균·공분산 함수, 추정 함수 주성분(EFPC)을 직관적 설명과 수식, R 코드와 함께 상세히 다룬다. BOA 주식 누적 수익률과 DTI 확산 텐서 영상 데이터를 실제 응용 사례로 포함한다.

Statistics
Functional Data Analysis
저자

Kwangmin Kim

공개

2026년 04월 29일

1 함수형 데이터란 무엇인가

함수형 데이터 분석(Functional Data Analysis, FDA)은 데이터의 관심 단위가 매끄러운 곡선(curve) 또는 함수(function)로 자연스럽게 간주될 수 있을 때 발생하는 통계 분석 분야이다 (Kokoszka & Reimherr, 2017, Ch.1). 전통적인 다변량 분석에서는 각 관측치가 유한차원 벡터 \((x_1, x_2, \ldots, x_p)\) 이지만, FDA에서는 각 관측치가 연속 구간 위에서 정의된 함수 \(x_n(t)\) 이다.

가장 단순한 형태의 함수형 데이터는 다음과 같다:

\[ x_n(t_{j,n}) \in \mathbb{R}, \quad t_{j,n} \in [T_1, T_2], \quad n = 1, 2, \ldots, N, \quad j = 1, \ldots, J_n \]

여기서 \(N\) 개의 곡선이 공통 구간 \([T_1, T_2]\) 위에서 관측된다. 중요한 점은 곡선의 값 \(x_n(t)\) 가 모든 \(t\) 에서 존재하지만, 실제로는 특정 시점 \(t_{j,n}\) 에서만 측정된다는 것이다. 이 관측 시점은 곡선마다 다를 수 있다.

1.1 희소 데이터와 밀집 데이터

관측점의 밀도에 따라 함수형 데이터는 두 극단으로 나뉜다:

  • 희소(sparse) 데이터: 곡선당 관측점이 적은 경우이다. 예를 들어, 환자의 혈중 단백질 농도를 연 2회 측정하는 종단 연구가 이에 해당한다. 개별 곡선 수준의 스무딩이 불가능하므로, 피험자 간 정보를 풀링(pooling)하는 별도의 방법론이 필요하다 (Ch.7에서 다룬다).
  • 밀집(dense) 데이터: 곡선당 관측점이 매우 많은 경우이다. 호놀룰루 자기장 관측소의 5초 간격 측정(하루 17,280점)이나, 1분 단위 주식 가격(하루 390점)이 대표적이다.

직관적으로 말하면, FDA는 “데이터 테이블의 한 행(row)이 숫자 하나가 아니라 곡선 하나”인 상황을 다루는 통계학이다. 키·몸무게·나이 같은 스칼라 변수 대신, 하루 동안의 주가 곡선이나 뇌의 신경섬유 프로파일 자체가 분석 단위가 된다.

1.2 FDA의 핵심 관심사: 형태(shape)

FDA에서는 개별 관측값보다 곡선의 형태가 핵심 분석 대상이다. 자기장 연구자는 5초마다의 값이 아니라 며칠에 걸친 곡선의 모양에 관심이 있고, 임상시험에서는 치료가 환자의 평균 단백질 수준 곡선을 어떻게 변화시키는지가 중요하다. 이처럼 “곡선 전체의 구조”를 다루는 것이 FDA의 고유한 특징이다.

2 기저 전개 (Basis Expansion)

함수형 데이터를 다루는 첫 번째 단계는 이산 관측값을 연속 함수로 변환하는 것이다. 이를 위해 기저 전개(basis expansion)를 사용한다:

\[ X_n(t) \approx \sum_{m=1}^{M} c_{nm} B_m(t), \quad 1 \leq n \leq N \]

여기서 \(B_m\) 은 미리 정해진 기저 함수(basis function)이고, \(c_{nm}\) 은 곡선 \(n\) 의 전개 계수이다. 기저 함수로는 B-spline, Fourier, wavelet 등이 사용된다.

2.1 왜 기저 전개가 필요한가

기저 전개는 세 가지 핵심 목적을 동시에 달성한다:

  1. 차원 축소: 자기장 데이터의 17,280개 관측점을 \(M\) 개(보통 수십 개)의 계수 \(c_{nm}\) 으로 압축한다. 이는 마치 고해상도 사진을 JPEG 압축하는 것과 유사하다 — 핵심 형태는 보존하면서 저장 공간을 줄인다.
  2. 공통 도메인 확보: 관측 시점 \(t_{j,n}\) 이 곡선마다 다르더라도, 기저 전개를 거치면 모든 곡선이 동일한 기저 함수의 선형 결합으로 표현되어 직접 비교할 수 있다.
  3. 평활화(smoothing): 기저 함수가 매끄러우면 전개 결과도 매끄러워진다. 측정 잡음이 포함된 원시 데이터를 부드러운 곡선으로 변환하는 예비 평활 효과가 있다.

각 곡선 \(x_n\)\(M\) 차원 벡터 \(\mathbf{c}_n = [c_{n1}, c_{n2}, \ldots, c_{nM}]^T\) 로 요약된다. 이렇게 하면 기존 다변량 통계 기법을 계수 벡터에 적용할 수 있다는 실용적 이점도 생긴다.

2.2 B-spline 기저

B-spline은 FDA에서 가장 널리 사용되는 기저 중 하나이다. 각 B-spline 함수는 구간의 일부에서만 0이 아닌 값을 가지는(국소 지지, local support) 매끄러운 조각 다항식이다. 이 국소성 덕분에 곡선의 특정 구간에서의 변화가 다른 구간에 영향을 주지 않으므로, 비주기적이고 국소적 특징이 중요한 데이터에 적합하다.

library(fda)
spline.basis <- create.bspline.basis(rangeval = c(0, 10), nbasis = 5)
plot(spline.basis, lty = 1, lwd = 2)

2.3 Fourier 기저

Fourier 기저는 상수 함수와 주기가 점차 짧아지는 사인/코사인 쌍으로 구성된다:

fourier.basis <- create.fourier.basis(rangeval = c(0, 10), nbasis = 5)
plot(fourier.basis, lty = 1, lwd = 2)

Fourier 기저는 주기적 데이터(기온, 계절 패턴 등)에 적합하다. 다만 구간의 시작과 끝에서 함수값이 비슷해야 한다는 제약이 있다 — Fourier 급수는 본질적으로 주기 함수를 근사하기 때문이다. 비주기적 데이터에 Fourier 기저를 쓰면 경계에서 인위적인 진동(Gibbs 현상)이 발생할 수 있다.

2.4 기저 선택의 직관

기저 적합한 데이터 핵심 특성
B-spline 비주기적, 국소 변화가 중요한 데이터 국소 지지, 유연한 매듭(knot) 배치
Fourier 주기적 데이터 (기온, 계절 패턴) 전역적 지지, 주파수 분해
Wavelet 불연속점이나 급격한 변화가 있는 데이터 국소 지지 + 다해상도 분석

2.5 예시: 위너 과정의 B-spline 전개

위너 과정(Wiener process, 브라운 운동)은 랜덤 워크의 연속 시간 극한이다. \(K = 10{,}000\) 단계의 랜덤 워크를 생성한 뒤, 25개의 B-spline 기저 함수로 전개하면 잡음이 많은 원래 경로가 매끄러운 곡선으로 근사된다:

Wiener <- cumsum(rnorm(10000)) / 100
plot.ts(Wiener, xlab = "", ylab = "")
B25.basis <- create.bspline.basis(rangeval = c(0, 10000), nbasis = 25)
Wiener.fd <- smooth.basis(y = Wiener, fdParobj = B25.basis)
lines(Wiener.fd, lwd = 3)

이 예시에서 핵심은, 10,000개의 숫자로 이루어진 시계열이 25개의 계수로 요약되면서도 곡선의 전체적인 추세를 충실히 포착한다는 것이다. 이것이 기저 전개의 힘이다.

3 표본 평균과 공분산

기저 전개를 통해 원시 데이터를 함수 객체로 변환했으면, 함수형 데이터의 가장 기본적인 요약 통계량을 계산할 수 있다.

3.1 점별 평균 함수 (Pointwise Mean)

표본 평균 함수는 각 시점 \(t\) 에서 \(N\) 개 곡선의 산술 평균을 취한 것이다:

\[ \bar{X}_N(t) = \frac{1}{N} \sum_{n=1}^{N} X_n(t) \]

직관적으로, 평균 함수는 “전형적인 곡선의 형태”를 나타낸다. 예를 들어 100명의 환자의 혈당 곡선의 평균을 구하면, 식후 혈당이 상승했다가 서서히 감소하는 전형적 패턴을 얻는다.

3.2 점별 표준편차 함수

\[ \text{SD}_X(t) = \left\{ \frac{1}{N-1} \sum_{n=1}^{N} \left( X_n(t) - \bar{X}_N(t) \right)^2 \right\}^{1/2} \]

표준편차 함수는 각 시점에서 곡선들이 평균으로부터 얼마나 흩어져 있는지를 보여준다. \(\text{SD}_X(t)\) 가 큰 시점은 곡선 간 변동이 큰 구간이고, 작은 시점은 곡선들이 비슷한 값을 가지는 구간이다.

N <- 50
W.mat <- matrix(0, ncol = N, nrow = 10000)
for (n in 1:N) { W.mat[, n] <- cumsum(rnorm(10000)) / 100 }
B25.basis <- create.bspline.basis(rangeval = c(0, 10000), nbasis = 25)
W.fd <- smooth.basis(y = W.mat, fdParobj = B25.basis)
plot(W.fd, ylab = "", xlab = "", col = "gray", lty = 1)
W.mean <- mean(W.fd$fd)
W.sd <- std.fd(W.fd$fd)
lines(W.sd, lwd = 3)
lines(W.mean, lty = 2, lwd = 3)

3.3 표본 공분산 함수

점별 표준편차만으로는 곡선의 서로 다른 시점 간 관계를 파악할 수 없다. 이를 위해 표본 공분산 함수를 사용한다:

\[ \hat{c}(t, s) = \frac{1}{N-1} \sum_{n=1}^{N} \left( X_n(t) - \bar{X}_N(t) \right) \left( X_n(s) - \bar{X}_N(s) \right) \]

이것은 다변량 분석의 공분산 행렬을 함수 공간으로 확장한 것이다. 공분산 행렬이 \(p \times p\) 행렬인 것처럼, 공분산 함수는 \([T_1, T_2] \times [T_1, T_2]\) 위의 이변량 함수(bivariate function)이다.

해석은 다변량 경우와 동일하다:

  • \(\hat{c}(t, s) > 0\): 시점 \(t\) 에서 평균보다 높은 곡선은 시점 \(s\) 에서도 평균보다 높은 경향이 있다 (양의 공변동).
  • \(\hat{c}(t, s) < 0\): 시점 \(t\) 에서 높은 곡선이 시점 \(s\) 에서는 낮은 경향이 있다 (음의 공변동).
  • \(\hat{c}(t, t) = \text{Var}(X(t))\): 대각선은 각 시점의 분산이다.

공분산 함수를 3차원 표면(perspective plot)이나 등고선도(contour plot)로 시각화하면 곡선 간 상관 구조를 한눈에 파악할 수 있다.

W.cov <- var.fd(W.fd$fd)
grid <- (1:100) * 100
W.cov.mat <- eval.bifd(grid, grid, W.cov)
persp(grid, grid, W.cov.mat, xlab = "s", ylab = "t", zlab = "c(s,t)")
contour(grid, grid, W.cov.mat, lwd = 2)

3.4 브라운 운동의 공분산 함수

50개의 랜덤 워크(브라운 운동의 이산 근사)로부터 추정한 공분산 함수는 이론적 결과 \(c(t, s) = \min(t, s)\) 에 근사한다. 이 결과는 직관적으로도 이해할 수 있다: 브라운 운동에서 시점 \(t\)\(s\) (단, \(t < s\))의 공분산은 두 시점 중 이른 시점 \(t\) 까지의 “공유된 이력”에 의해 결정되기 때문에 \(\min(t, s) = t\) 이다.

4 주성분 함수 (EFPC)

FDA에서 가장 유용하고 빈번하게 사용되는 도구 중 하나가 함수 주성분 분석(Functional Principal Component Analysis, FPCA)이다.

4.1 핵심 아이디어

기저 전개에서 사용한 기저 함수 \(B_m\) 은 데이터와 무관하게 미리 정해진 것이었다. 반면, 추정 함수 주성분(Estimated Functional Principal Components, EFPC) \(\hat{v}_j\) 는 데이터로부터 학습된 기저로서, 중심화된 곡선 \(X_n - \bar{X}_N\) 을 최소 개수의 기저로 최적 근사한다:

\[ X_n(t) - \bar{X}_N(t) \approx \sum_{j=1}^{p} \hat{\xi}_{nj} \hat{v}_j(t) \]

여기서:

  • \(\hat{v}_j(t)\): \(j\) 번째 EFPC (주성분 함수). 변동의 \(j\) 번째로 중요한 패턴을 나타낸다.
  • \(\hat{\xi}_{nj}\): 곡선 \(X_n\)\(j\) 번째 주성분에 대한 점수(score). 곡선 \(n\) 이 패턴 \(\hat{v}_j\) 를 얼마나 강하게 따르는지를 수량화한다.
  • \(p\): 사용하는 주성분 수. 기저 전개의 \(M\) 보다 훨씬 작다.

이것이 기저 전개와 근본적으로 다른 점이다: B-spline이나 Fourier 기저는 수학적으로 편리하도록 설계된 “범용 기저”이지만, EFPC는 이 데이터의 변동 구조에 최적화된 맞춤 기저이다.

다변량 통계의 주성분 분석(PCA)과의 대응 관계를 보면 직관이 명확해진다:

다변량 PCA FPCA
공분산 행렬 \(\mathbf{S}\) 공분산 함수 \(\hat{c}(t,s)\)
고유벡터 \(\mathbf{e}_j \in \mathbb{R}^p\) 고유함수 \(\hat{v}_j(t) \in L^2\)
고유값 \(\lambda_j\) 고유값 \(\hat{\lambda}_j\)
주성분 점수 \(z_{nj} = \mathbf{e}_j^T \mathbf{x}_n\) 주성분 점수 \(\hat{\xi}_{nj} = \int \hat{v}_j(t) X_n(t) \, dt\)
\(\lambda_j / \sum \lambda_k\): 설명 분산 비율 \(\hat{\lambda}_j / \sum \hat{\lambda}_k\): 설명 분산 비율

4.2 직교성과 해석

EFPC들은 직교정규(orthonormal) 조건을 만족한다:

\[ \int \hat{v}_j(t) \hat{v}_i(t) \, dt = \begin{cases} 0 & \text{if } j \neq i \\ 1 & \text{if } j = i \end{cases} \]

이 직교성은 해석에 중요한 의미를 가진다. 첫 번째 EFPC \(\hat{v}_1\) 은 변동의 가장 주요한 패턴이고, 두 번째 EFPC \(\hat{v}_2\)\(\hat{v}_1\) 과 직교하면서 그 다음으로 중요한 패턴이다. “직교”란 두 패턴이 서로 독립적인 방향의 변동을 포착한다는 뜻이다.

4.3 분산 설명 비율

전체 변동 중 각 EFPC가 설명하는 비율은 해당 고유값의 크기로 결정된다. 50개 랜덤 워크 예시에서:

  • \(\hat{v}_1\): 전체 변동의 약 81% 설명
  • \(\hat{v}_2\): 약 10%
  • \(\hat{v}_3\): 약 4%
  • \(\hat{v}_4\): 약 2%

처음 4개 EFPC만으로 96% 이상의 변동을 설명한다. 이는 \(p = 4\) (또는 심지어 \(p = 2\))로 차원 축소해도 곡선의 핵심 형태를 충분히 포착할 수 있음을 의미한다.

EFPC의 형태가 삼각함수(사인/코사인)와 유사한 것은 우연이 아니다. 이론적으로, 브라운 운동의 공분산 함수 \(c(t,s) = \min(t,s)\) 의 고유함수는 정확히 특정 삼각함수이며 (Ch.11에서 닫힌 형태가 유도된다), 랜덤 워크의 EFPC는 이 이론적 고유함수의 추정량이다.

W.pca <- pca.fd(W.fd$fd, nharm = 4)
plot(W.pca$harmonics, lwd = 3)
W.pca$varprop
# [1] 0.80513155 0.09509154 0.04099496 0.02119239

5 응용: BOA 주식 누적 수익률

Bank of America(BOA) 주식의 분 단위 데이터(1997년 4월 9일 ~ 2007년 4월 2일)를 함수형 데이터로 분석한다. 각 거래일은 9:30 AM ~ 4:00 PM (6.5시간, 390개 관측)으로 구성되며, 하루를 하나의 함수 관측으로 간주한다.

5.1 누적 로그수익률

관심 변수는 개장 시점 대비 누적 로그수익률이다:

\[ R_n(t) := \log(P_n(t)) - \log(P_n(0)) \approx \frac{P_n(t) - P_n(0)}{P_n(0)} \]

여기서 \(P_n(t)\)\(n\) 일 시점 \(t\) 에서의 주가이다. \(R_n(t)\) 는 개장 시점에 투자했을 때 시간 \(t\) 까지의 수익률이 어떻게 변하는지를 나타내는 곡선이다. 매일 \(R_n(0) = 0\) 에서 시작하므로, 2,511일의 곡선이 공통 출발점을 가진다.

5.2 평균 함수와 신뢰 구간

BOA <- read.table("BOA.txt", header = TRUE)
Dates <- dimnames(BOA)[[1]]
BOA <- data.matrix(BOA)
Outlier <- which(Dates == "08/26/2004")
BOA <- BOA[-Outlier, ]
N <- dim(BOA)[1]; M <- dim(BOA)[2]
Times <- seq(0, 6.5, length = M)
log_BOA <- log(BOA) - matrix(log(BOA)[, 1], nrow = N, ncol = M)
bspline_basis <- create.bspline.basis(rangeval = c(0, 6.5),
                                       norder = 4, nbasis = 200)
log_BOA_f <- Data2fd(Times, t(log_BOA), basisobj = bspline_basis)

muhat <- mean.fd(log_BOA_f)
sdhat <- sd.fd(log_BOA_f)
SE_hat_U <- fd(basisobj = bspline_basis)
SE_hat_L <- fd(basisobj = bspline_basis)
SE_hat_U$coefs <- 2 * sdhat$coefs / sqrt(N) + muhat$coefs
SE_hat_L$coefs <- -2 * sdhat$coefs / sqrt(N) + muhat$coefs
plot.fd(SE_hat_U, ylim = c(-0.002, 0.002), col = "red", lty = 2,
        xlab = "", ylab = "")
plot.fd(SE_hat_L, add = TRUE, col = "red", lty = 2)
plot.fd(muhat, add = TRUE)

평균 수익률 함수는 하루 초반에 급격히 상승한 뒤 평탄해지는 패턴을 보인다. 주주가 투자 수익을 기대하지만 매일 \(R_n(0) = 0\) 에서 다시 시작하는 구조를 감안하면 합리적인 결과이다. 신뢰 구간은 \(\bar{X}_N(t) \pm 2N^{-1/2}\text{SD}_X(t)\) 로 구성되며, 기저 전개의 계수에 대한 조작으로 구현된다. 이처럼 많은 FDA 조작은 기저 계수에 대한 연산으로 환원된다는 것이 실무적 핵심이다.

5.3 주성분 분석 결과

BOA 누적 수익률의 처음 4개 EFPC는 브라운 운동의 이론적 고유함수와 형태가 거의 동일하다. 이는 금융에서 로그수익률을 브라운 운동으로 모형화하는 기본 가정과 정합한다 — FDA가 데이터 기반으로 이론적 가정의 타당성을 검증하는 도구가 될 수 있음을 보여준다.

공분산 표면의 히트맵에서도 브라운 운동의 이론적 공분산 \(c(t,s) = \min(t,s)\) 과 유사한 삼각형 패턴이 관찰되며, 이는 PCA 결과와 일관된다.

6 응용: 확산 텐서 영상 (DTI)

확산 텐서 영상(Diffusion Tensor Imaging, DTI)은 뇌 내 수분의 확산 방향을 측정하는 MRI 기법이다. 백질(white matter)에서는 수분이 비등방적(anisotropically)으로 확산하므로, 이 특성을 이용해 뇌의 신경섬유 구조를 영상화할 수 있다.

6.1 데이터 구조

분석 대상은 뇌량(corpus callosum)의 부분 비등방성(fractional anisotropy, FA) 트랙 프로파일이다. 376명의 환자에 대해 각 트랙이 93개의 등간격 위치에서 측정된다. 여기서 \(t_{j,n}\) 은 시간이 아닌 공간적 위치를 나타낸다는 점이 BOA 예시와 다르다. FA 값은 0~1 사이로, 해당 위치의 비등방성(즉 백질의 양)을 정량화한다.

library(refund)
data(DTI)
Y <- DTI$cca
Y <- Y[-c(126, 130, 131, 125, 319, 321), ]
N <- dim(Y)[1]; M <- dim(Y)[2]
argvals <- seq(0, 1, length = M)
data_basis <- create.bspline.basis(c(0, 1), nbasis = 10)
Y.f <- Data2fd(argvals, t(Y), data_basis)
plot(Y.f, lty = 1, col = "gray", xlab = "", ylab = "", ylim = c(0.1, 0.9))
lines(mean(Y.f), lwd = 2)
lines(mean(Y.f) + std.fd(Y.f), lwd = 2, lty = 2, col = "green")
lines(mean(Y.f) + 2 * std.fd(Y.f), lwd = 2, lty = 2, col = "yellow")
lines(mean(Y.f) + 3 * std.fd(Y.f), lwd = 2, lty = 2, col = "red")
lines(mean(Y.f) - std.fd(Y.f), lwd = 2, lty = 2, col = "green")
lines(mean(Y.f) - 2 * std.fd(Y.f), lwd = 2, lty = 2, col = "yellow")
lines(mean(Y.f) - 3 * std.fd(Y.f), lwd = 2, lty = 2, col = "red")

6.2 해석

개별 트랙 프로파일을 회색 곡선으로, 평균 함수를 검은 실선으로, 1/2/3 표준편차를 각각 녹색/노란색/빨간색 점선으로 표시한다. 이 데이터는 피험자 간 상관이 높아, 거의 모든 곡선이 3 표준편차 경계(빨간선) 안에 들어가는 — 스칼라 데이터의 “3-시그마 규칙”과 유사한 패턴을 보인다.

이 예시는 FDA가 시간 영역뿐 아니라 공간 영역에서도 동일하게 적용됨을 보여준다. 곡선의 인덱스 \(t\) 가 시간이든 공간이든, 기저 전개 \(\to\) 평균·공분산 \(\to\) FPCA의 절차는 동일하다.

7 코드 예시: Python 구현

R의 fda 패키지가 표준이지만, Python의 scikit-fda로도 동일한 분석이 가능하다.

7.1 Step 1: 순수 Python 구현 (기저 전개 원리)

import numpy as np

np.random.seed(42)
N, K, M = 50, 1000, 25

walks = np.cumsum(np.random.randn(N, K), axis=1) / np.sqrt(K)
t_grid = np.linspace(0, 1, K)
knots = np.linspace(0, 1, M - 2)

def bspline_basis_manual(t, knots, order=4):
    """B-spline 기저 행렬을 de Boor 재귀로 직접 계산한다."""
    from scipy.interpolate import BSpline
    n_basis = len(knots) + order - 2
    augmented = np.concatenate([
        np.repeat(knots[0], order - 1), knots, np.repeat(knots[-1], order - 1)
    ])
    B = np.zeros((len(t), n_basis))
    for i in range(n_basis):
        coeffs = np.zeros(n_basis)
        coeffs[i] = 1.0
        spl = BSpline(augmented, coeffs, order - 1)
        B[:, i] = spl(t)
    return B

B = bspline_basis_manual(t_grid, knots)
coeffs = np.linalg.lstsq(B, walks.T, rcond=None)[0].T
smoothed = coeffs @ B.T

mean_func = smoothed.mean(axis=0)
cov_func = np.cov(smoothed, rowvar=True)

print(f"원시 데이터 차원: {walks.shape}")
print(f"계수 차원: {coeffs.shape}")
print(f"차원 축소 비율: {K} -> {M}")

7.2 Step 2: scikit-fda 구현 (실무 활용)

import skfda
from skfda.representation.basis import BSplineBasis
from skfda.preprocessing.dim_reduction import FPCA
import numpy as np

np.random.seed(42)
N, K = 50, 1000
walks = np.cumsum(np.random.randn(N, K), axis=1) / np.sqrt(K)
t_grid = np.linspace(0, 1, K)

fd = skfda.FDataGrid(data_matrix=walks, grid_points=t_grid)

basis = BSplineBasis(n_basis=25, domain_range=(0, 1))
fd_basis = fd.to_basis(basis)

mean_fd = fd_basis.mean()

fpca = FPCA(n_components=4)
fpca.fit(fd_basis)
scores = fpca.transform(fd_basis)

var_explained = fpca.explained_variance_ratio_
print("분산 설명 비율:", var_explained)
print("누적:", np.cumsum(var_explained))

8 왜 FDA가 필요한가

전통적 다변량 분석 대신 FDA를 사용해야 하는 근본적 이유를 정리한다.

8.1 유한차원 접근의 한계

곡선 데이터를 \(J\) 개 시점의 벡터로 취급하여 기존 다변량 기법을 적용할 수도 있다. 그러나 이 접근은 세 가지 문제를 가진다:

  1. 매끄러움 무시: 곡선이 매끄럽다는 사전 지식을 활용하지 못한다. 인접 시점의 값은 강하게 상관되어 있지만, 다변량 분석은 이를 독립 변수처럼 취급한다.
  2. 미분 정보 손실: FDA에서는 곡선의 기울기(1차 도함수), 곡률(2차 도함수) 등을 직접 분석할 수 있다. 이는 스칼라 데이터에는 없는 FDA 고유의 도구이다 (Ch.2에서 다룬다).
  3. 불규칙 관측 처리 불가: 곡선마다 관측 시점이 다르면 다변량 분석은 결측치 문제로 귀결되지만, FDA는 기저 전개를 통해 자연스럽게 공통 도메인을 확보한다.

8.2 FDA의 위치

관점 다변량 분석 FDA
관측 단위 유한차원 벡터 \(\mathbf{x} \in \mathbb{R}^p\) 함수 \(x(t) \in L^2[T_1, T_2]\)
공분산 \(p \times p\) 행렬 이변량 함수 \(c(t,s)\)
차원 축소 PCA (고유벡터) FPCA (고유함수)
매끄러움 활용하지 않음 기저 전개 + 벌점 평활로 활용
미분 해당 없음 곡선의 도함수를 직접 분석

9 응용 분야

분야 함수형 데이터 인덱스 \(t\) 분석 목표
금융 일중 주가 곡선 거래 시간 수익률 패턴, 변동성 구조
신경과학 뇌 신경섬유 FA 프로파일 공간 위치 질환(다발성 경화증) 진단
분자 진단 RT-PCR 증폭 곡선 PCR 사이클 양성/음성 판별, 정량
기상학 일별 기온/자기장 곡선 시간 기후 패턴, 우주 날씨
성장 연구 아동 키 성장 곡선 나이 성장 패턴, 사춘기 시점
교통 일별 교통량 곡선 시간 혼잡 패턴, 이상 탐지

10 핵심 R 패키지

패키지 역할 주요 함수
fda 기저 생성, 평활, 함수 객체 조작 create.bspline.basis(), smooth.basis(), pca.fd()
refund 함수 회귀, 유연한 모형 적합 pfr(), pffr()
fdapace 희소 함수 데이터 분석 (PACE) FPCA()

fda 패키지의 smooth.basis() 함수가 원시 데이터를 함수 데이터 객체(fd)로 변환하는 핵심 관문이며, 이후의 모든 분석(평균, 공분산, FPCA, 회귀 등)은 이 fd 객체를 입력으로 받는다.

11 이후 장과의 연결

이 장에서 도입한 개념은 이후 장의 기초가 된다:

  • Ch.2: 미분, 벌점 스무딩, 곡선 정렬 — FDA 고유의 탐색 도구
  • Ch.3: \(L^2\) 공간, Karhunen-Loeve 전개 — FPCA의 수학적 기반
  • Ch.4-6: 함수 회귀 (스칼라-on-함수, 함수-on-스칼라, 함수 GLM)
  • Ch.7: 희소 함수 데이터 (종단 데이터와의 접점)
  • Ch.10-12: 힐베르트 공간 이론, 점근 성질 — 이론적 보강

12 관련 주제

선행 지식

FDA 시리즈

후속 주제

  • FDA Ch.2 — 미분, 벌점 스무딩, 곡선 정렬
  • FDA Ch.3 — 함수형 데이터의 수학적 프레임워크 (\(L^2\) 공간, KL 전개)
  • FDA Ch.4 — 스칼라-on-함수 회귀

Subscribe

Enjoy this blog? Get notified of new posts by email: