오늘의 인기 글
최근 글
최근 댓글
Today
Total
04-29 01:41
관리 메뉴

우노

[R] D-optimal이란? 본문

Language/R

[R] D-optimal이란?

운호(Noah) 2020. 10. 16. 20:28

실험계획법(DOE, design of experiments)이란?

D-optimal Design 기본 개념

  • 전체 데이터셋에서 중요한 데이터만 가져와 효율적으로 실험하기 위해 쓰이는 실험계획법이다.

  • 데이터는 X로 표현되며

  • 정보행렬인 |X’X(대각행렬)|를 최대화하여, 추정 된 회귀 계수의 전체 분산을 최소화하도록 구성된다.

  • 자세한 설명

    • 선형모형

      • N : 데이터의 개수 (행개수)
      • k : 입력 데이터의 특성 개수 (열개수)
      • Y : N x 1 출력 벡터
      • X : N x k 입력 데이터 행렬
      • β : 미지의 회귀 계수 k x 1 벡터
      • ε : E(ε)=0, N x N 단위행렬인 공분산 행렬을 가진 실험오차 N x 1 벡터
    • 회귀 계수 β

      • 최소제곱법에 의해 추정하면 β는 다음과 같다.

      • 회귀 계수 β의 공분산 행렬

      • 회귀 계수 β의 분산 행렬

    • 즉, 회귀 계수 β의 분산을 줄이기 위해 |X'X|의 행렬식 det(X'X)를 최대화하는 계획법이 D-optimal이다.

D-optimal 지원 R 라이브러리

  • optFederov

    • reference : https://www.rdocumentation.org/packages/AlgDesign/versions/1.0-10/topics/optFederov

    • Federov의 교환 알고리즘을 사용하여 세 가지 최적화 방법(D, A, I) 중 하나에 대한 정확한 또는 대략적인 알고리즘 설계를 계산합니다.

    • 인자형태

        optFederov(frml,data,nTrials,center=FALSE,approximate=FALSE,criterion="D",
        evaluateI=FALSE,space=NULL,augment=FALSE,rows,nullify=0,
        maxIteration=100,nRepeats=5,DFrac=1,CFrac=1,args=FALSE)
      • 중요인자
        • data
          • 입력으로 넣을 데이터 행렬 또는 데이터 프레임입니다.
          • 데이터를 입력하고 열의 이름을 따로 지정하지 않은 경우, 열의 이름이 X1,X2 등으로 지정됩니다.
        • nTrials
          • 입력 데이터에서 중요한 데이터로 몇 개를 가져올 건지 정합니다.
        • criterion
          • 최적화 방법(D, A, I)중 무엇을 사용할 건지 정합니다.
        • nRepeats
          • 수치 계산을 위해 전체 프로세스가 반복되는 횟수입니다.
      • 결과
        • D, A, I, Ge, Dea
          • 각각의 계산 결과
        • design
          • 중요한 데이터로 추출 된 행렬
        • rows
          • 추출 된 행렬의 행 번호

R 예제 코드

  • 절차

    • 1) 입력 데이터를 준비한다.
    • 2) 중요한 데이터로 몇 개를 추출할지 정한다. (ex, nTrials=1000 )
    • 3) 수치 계산을 위해 전체 프로세스가 몇 번 반복할지 정한다. (ex, nRepeats=20 )
    • 4) 전체 데이터에서 중요한 nTrials개의 데이터를 뽑아내기 위해 nRepeats번 반복해 계산한다.
  • R 예제코드

      # AlgDesing이 설치 되어 있지 않다면 다음 명령어를 통해 설치해야한다.
      # install.packages("AlgDesign")
      library(AlgDesign)
    
      # 최적화 데이터를 뽑고자 하는 입력 데이터
      input = read.csv("/Users/bdlab/Desktop/Lab/Spmm scenario extraction/LHS/LHS before D-optimal.csv")
    
      # 입력 데이터 차원 확인
      cat("dimension of data : ", dim(input), "\n") 
    
      # data : 입력 데이터 , nTrials : 뽑을 데이터 개수, nRepeats : 전체 프로세스 반복 횟수, criterion : 사용할 최적화 방법
      output = optFederov(data=input, nTrials=1000, nRepeats=20,criterion = "D")
      # 전체 결과
      output
    
      # 추출된 행렬
      output$design
    
      # 출력제한 늘리기
      options(max.print=1000000)
    
      # 추출된 행렬의 행 번호
      output$rows
    
      # 추출된 행렬 csv로 저장, 작업 경로 변경 필요시 setwd("경로")로 변경
      write.csv(output$design, file="LHS after D-optimal.csv", row.names=FALSE) # row.names : 행 포함 여부

참고자료

Comments