분류 전체보기 (321)

반응형

Collaborative Filtering 기초


/* 2017.7.5 by 3months */



 Movie

 Alice

 Bob

 Carol

 Dave

 x1(romance)

x2(action)

 Love at last

 5

 5

 0

 0

?

?

 Romance Forever

 5

 ?

 ?

 0

 ?

?

 Cute puppies of love

 ?

 4

 0

 ?

?

?

 Nonstop car chases

 0

 0

 5

 4

 ?

 ?

 Swords vs. karate

 0

 0

 5

?

 ?

 ?


앞서 contents based approach에서 movie와 user로 이루어진 위와 같은 평점 테이블에서 x1, x2를 알아내기 어렵다는 것을 알았다. (왜냐하면 이 영화가 얼마나 로맨틱한지 얼마나 액션 영화인지 일일이 보고 평가를 내리는 것은 어렵기 때문이다.) 그런데 각 유저들의 feature에 대한 파라미터들을 이미 알고있다고 가정하면 어떨까? 예를 들어 parameter(alice) = [0 5 0], parameter(bob) = [0 5 0], parameter(carol) = [0 0 5], parameter(dave) = [0 0 5] 라고 하자. 그러면 Love at last의 feature은 대략 x0=1, x1 = 1, x2 = 0 라는 것을 알 수 있다. Alice를 예로 들어보면 [0 5 0][1 1 0] = 5 이라서 love at last의 rating이 5가 된다. 이처럼 각 유저들의 parameter들을 안다면 같은 방식으로 다른 영화들의 feature 값을 알아낼 수 있다.





그러므로 위와 같은 optimization 과정을 통해 콘텐츠의 feature vector인 x(i)를 알아낼 수 있다.


정리하면 contents based approach는 콘텐츠의 feature를 통해 유저의 파라미터를 알아내서 이를 통해 rating을 예측하는 것이고, 앞서 설명한 방식은 이와 반대로 유저의 파라미터를 통해 콘텐츠의 feature를 알아내서 이를 통해 rating을 예측하는 것이다. 이는 마치 닭이먼저냐 달걀이 먼저냐와 같은 문제가 된다. 유저의 파라미터를 알면 콘텐츠의 feature를 알 수 있고, 콘텐츠의 feature를 알면 유저의 파라미터를 알 수 있다. 실제로 할 수 있는 것은, random 하게 유저의 파라미터(theta)를 설정하는 것이다. 그리고 이를 통해 콘텐츠의 feature (x)를 추정하고 이를 통해 다시 theta를 설정하고, 다시 x를 설정하는 과정을 반복적으로 수행한다. 이것이 바로 collaborative filtering의 기초적인 아이디어이다.



반응형
반응형
Recommendation System, Contents Based Approach


/* 2017.7.5 by 3months. */


앤드류 응 교수님의 Coursera 머신러닝 강의를 정리한 포스팅입니다.


예 : 영화 평점 예측하기


Movie 

 Alice

Bob

Carol

Dave

 Love at last

 5

 5

 0

 0

 Romance Forever

 5

 ?

 ?

 0

 Cute puppies of love

 ?

 4

 0

 ?

 Nonstop car chases

 0

 0

 5

 4

 Swords vs. karate

 0

 0

 5

 ?


Notation



출처: http://3months.tistory.com/141 [Data Science & Personalized Medicine]

예 : 영화 평점 예측하기


Movie 

 Alice

Bob

Carol

Dave

 Love at last

 5

 5

 0

 0

 Romance Forever

 5

 ?

 ?

 0

 Cute puppies of love

 ?

 4

 0

 ?

 Nonstop car chases

 0

 0

 5

 4

 Swords vs. karate

 0

 0

 5

 ?


Notation



출처: http://3months.tistory.com/141 [Data Science & Personalized Medicine]

예 : 영화 평점 예측하기


Movie 

 Alice

Bob

Carol

Dave

 Love at last

 5

 5

 0

 0

 Romance Forever

 5

 ?

 ?

 0

 Cute puppies of love

 ?

 4

 0

 ?

 Nonstop car chases

 0

 0

 5

 4

 Swords vs. karate

 0

 0

 5

 ?


Notation



출처: http://3months.tistory.com/141 [Data Science & Personalized Medicine]

예 : 영화 평점 예측하기


Movie 

 Alice

Bob

Carol

Dave

 Love at last

 5

 5

 0

 0

 Romance Forever

 5

 ?

 ?

 0

 Cute puppies of love

 ?

 4

 0

 ?

 Nonstop car chases

 0

 0

 5

 4

 Swords vs. karate

 0

 0

 5

 ?


이러한 영화 평점 테이블에서 missing value(?) 을 예측하는 것이 recommendation system의 목적이다. 그렇다면 어떻게 평점을 예측할 수 있을까? 한 가지 방법은 바로 Content Based Recommendation Approach이다.


 Movie

 Alice

 Bob

 Carol

 Dave

 x1(romance)

x2(action)

 Love at last

 5

 5

 0

 0

0.9

 0

 Romance Forever

 5

 ?

 ?

 0

 1.0

 0.01

 Cute puppies of love

 ?

 4

 0

 ?

 0.99

 0

 Nonstop car chases

 0

 0

 5

 4

 0.1

 1.0

 Swords vs. karate

 0

 0

 5

?

 0

 0.9


다음과 같이 영화에 대한 feature가 있다고 가정하자. x1은 romance 장르의 정도를 나타낸다. 그러면 Love at last에 대한 feature vector x_1 = [1 0.9 0] 이라고 하자. (첫번째 원소인 1은 interceptor feature이다.) Romance Forever의 feature vector을 x_2이라하면 x_2 = [1 1 0.01] 이라고 할수 있다.


그러면 이를 linear regression으로 풀 수 있다. 각 사람마다 parameter 3개가 있다고 보고 이 파라미터를 러닝하면된다. 그리고 종속변수는 rating이다. 만약 alice의 파라미터인 parameter(alice) = [0 5 0] 이라고 가정한다면, alice의 cute puppies of love에 대한 평점의 예측값은 [0 5 0][1 0.99 0] = 4.95이다. 지금은 그냥 파라미터값을 임의로 정한 것이지만 이 파라미터들을 러닝할 수 있을 것이다.


이렇게 Contents의 속성을 통해 rating을 예측하는 방법을 contents based recommendation system이라 한다. 이러한 contents의 속성별로 유저가 각각의 속성에 대응하는 파라미터를 가지고 있다고 보면 되는 것이다.




수식으로 표현하면 위와 같다. 우리의 목적은 데이터를 통해 유저마다 존재하는 파라미터를 학습하는 것이다. 이 파라미터와 영화 속성값과의 내적값을 통해 rating을 구할 수 있다.  또한 user j의 평가한 영화의 갯수 m(j)를 regulariztion term에 넣어서 활용할 수 있다. (데이터가 적은 사람은 overfitting을 방지하기 위해 더 regularization한다.)





파라미터 학습 방법은 위와같은 squared error을 최소화 시키면된다. 또한 overfitting을 방지하기 위해 regularization term을 넣어줄 수도있다. 이를 위해서 mle 같은 통계적인 모수 추정방법을 사용할 수 있지만 머신러닝에서는 gradient descent 방법을 일반적으로 사용하여 구하게 된다. gradient descent 방법에서는 iteration을 돌면서 파라미터들을 변경시켜 오차값을 줄이는 방식으로 동작한다.


contents based approach의 단점은 영화나 책에 대하여 feature를 알아내는 것이 어렵다는 것이다. 이 영화가 얼마나 로맨틱한지 얼마나 액션영화인지 그 정도를 수치화해서 feature로 정의하는 것은 간단하지 않다.


반응형
반응형

앤드류 응 교수님의 Coursera Machine Learning 강의를 정리한 포스팅입니다.


추천시스템은 머신러닝 분야의 중요한 응용 분야중의 하나이다. 많은 실리콘 밸리 회사들이 더 좋은 추천 시스템을 만들기 위해 노력하고 있다. 아마존, 넷플릭스 등등의 회사들이 웹 사이트에서 이러한 추천 시스템을 활용하고 있다. 이러한 추천 시스템은 이러한 회사들이 더 좋은 수익을 올릴 수 있도록 도와준다. 그러므로 추천 시스템의 성능을 개선하는 것은 기업의 이익에 큰 영향을 미친다. 추천 시스템 분야는 학계보다는 산업계에서 더 선호되는 분야라고 한다.


예 : 영화 평점 예측하기


Movie 

 Alice

Bob

Carol

Dave

 Love at last

 5

 5

 0

 0

 Romance Forever

 5

 ?

 ?

 0

 Cute puppies of love

 ?

 4

 0

 ?

 Nonstop car chases

 0

 0

 5

 4

 Swords vs. karate

 0

 0

 5

 ?


Notation


n_u = no.users. (= 4)

n_m = no.move (= 5)

r(i,j) = 1 if user j has rate movie i (rating을 한 경우 1로 정의)

y(i,j) = rating given by user j to movie i (only if r(i,j) = 1) (movie i가 user j 에게 받은 평점)



?은 아직 영화를 보지 않고, 평점을 내리지 않은 것이다. 이를 예측하는 것이 바로 기본적인 추천 시스템의 목적이다.



반응형
반응형

/* 2017.7.2 */


Universal Approximation Theorem


Universal Approximation Theorem이란 1개의 히든 레이어를 가진 Neural Network를 이용해 어떠한 함수든 근사시킬 수 있다는 이론을 말합니다. (물론 활성함수는 비선형함수여야합니다.) 재미로 1개의 히든 레이어를 가진 신경망 모델로 실제 함수를 근사시킬 수 있는지 확인해보았습니다.


import numpy as np
%matplotlib inline
import matplotlib.pyplot as plt
from keras.models import Sequential
from keras.layers import Dense
from keras.optimizers import SGD
from keras import optimizers
import math

우선 필요한 라이브러리를 임포트합니다.


x = np.linspace(-10, 10, 100)
y = 3*np.sin(x)*np.cos(x)*(6*x**2+3*x**3+x**1)*np.tan(x)

제가 근사시키고 싶은 함수는 위와 같습니다.

y = 3sin(x)cos(x)(6x^2+3x^3+x)tan(x) 라는 함수인데 그냥 생각나는대로 만든 함수입니다.




이 함수의 모양은 이렇게 생겼습니다. Universal Approximation Theorem은 신경망 모델로 이러한 복잡한 함수도 근사시킬 수 있다는 이론인데 한 번 확인해보겠습니다.


우선 여러개의 히든 레이어를 가진 신경망 모델로 확인해보겠습니다.



Multi layer perceptron

model = Sequential()
model.add(Dense(10, input_shape=(1,), activation='relu'))
model.add(Dense(10, input_shape=(1,), activation='relu'))
model.add(Dense(10, input_shape=(1,), activation='relu'))
model.add(Dense(10, input_shape=(1,), activation='relu'))
model.add(Dense(1, activation='linear'))
rms = optimizers.RMSprop(lr=0.01, rho=0.9, epsilon=1e-08, decay=0.0)
model.compile(loss='mean_squared_error', optimizer=rms, metrics=['accuracy'])
model.fit(x, y, epochs=3000)


위와 같은 4개의 히든 레이어로 구성된 신경망 모델을 만들고 RMSProp optimizer을 통해 학습하였습니다. 학습된 모델로 구현된 함수는 아래와 같이 생겼습니다.


prediction = model.predict(x) plt.plot(x, prediction) plt.show()




조금 다른 부분도 있지만 잘 근사한 것을 확인할 수 있습니다. 사실 처음에는 adam optimizer을 사용하였는데, loss 한계점 아래로는 떨어지지가 않았습니다. 그래서 learning rate를 조절할 수 있는 rmsprop optimizer을 이용하였고, learning rate를 다양하게 변화시켜가면서 위와 같은 hyperparameter일 때 가장 잘 학습하는 것을 확인하였습니다.



Singlel hidden layer perceptron

model = Sequential()
model.add(Dense(10000, input_shape=(1,), activation='relu'))
model.add(Dense(1, activation='linear'))
rms = optimizers.RMSprop(lr=0.06, rho=0.9, epsilon=1e-08, decay=0.0)
model.compile(loss='mean_squared_error', optimizer=rms, metrics=['accuracy'])
model.fit(x, y, epochs=5000)


진짜 universal approximation theorem은 "단 한 개"의 히든레이어로도 이런 것을 할 수 있다는 것이기 때문에 한 개의 히든 레이어만 가지고 함수를 근사시켜보겠습니다. 무려 10000개의 node를 갖는 1개의 히든레이어를 5000 epochs 을 돌려서 다음과 같은 근사함수를 만들어냈습니다.




위의 multi layer perceptron 보다는 못하지만 어느정도 근사할 수 있다는 것을 확인할 수 있었습니다. 노드수, learning rate, optimizer 등을 바꿔가면서 해보면 더 잘 함수를 근사시킬 수 있을 것입니다.



반응형
반응형

오늘 모 워크샵에서 강의를 듣던 중 아래 github의 가상환경이 굉장히 잘 되어있어서 공유합니다. zero_to_deep_learning 이라는 외국 강의가 있는데 이곳에서 사용하는 것이라고 합니다. 이외에도 다양한 예제파일이 있는데 매우 유용하네요.


https://github.com/Dataweekends/zero_to_deep_learning_udemy


방법은 해당 깃허브 폴더를 clone한 후, yaml 파일에 정의된 아나콘다 가상환경을 만들고 이 가상환경을 activate 시킨다음에 파이썬을 사용하시면 됩니다.

반응형
반응형

Keras에서는 Theano Backend와 Tensorflow Backend 둘 중 하나를 골라서 사용할 수 있습니다. 둘 중 어느것을 Backend로 사용하더라도 별 차이는 없습니다. 아주 약간의 차이가 있는데 예를 들어 이미지를 input으로 줄 때 차원값의 순서가 바뀌기도 합니다.


Windows를 사용하는 유저의 경우, Keras를 설치하였다면 사용자 폴더 아래에 .keras 폴더가 있습니다. 이 폴더 아래에 keras.json 파일이 있는데 이것을 수정하시면 Backend를 바꿀 수 있습니다. 물론 Backend도 설치가 되어있어야합니다. 즉 Theano나 Tensorflow를 설치하여야합니다.


파일 경로

C:\Users\(사용자이름)\.keras\keras.json


Theano

{
    "image_dim_ordering": "th",
    "epsilon": 1e-07,
    "floatx": "float32",
    "backend": "theano"
}


Tensorflow

{
    "image_dim_ordering": "channels_last",
    "epsilon": 1e-07,
    "floatx": "float32",
    "backend": "tensorflow"
}


keras.json 파일을 위와같이 수정하면 각각 Theano backend와 tensorflow backend로 구동되어집니다.

반응형
반응형

/* 2017.6.29

파이썬 선형회귀분석 

by 3개월

*/


파이썬 선형회귀분석 (sklearn 라이브러리 사용)



필요한 라이브러리 임포트

import pandas as pd
from sklearn import datasets, linear_model
import matplotlib.pyplot as plt
import numpy as np


데이터 모양 출력

birth = pd.read_csv("C:/workspace/python/data/birth.csv")
print birth.head()
   case  gram  weeks  smoke
0     1  3147     40      0
1     2  2977     41      0
2     3  3119     38      0
3     4  3487     38      0
4     5  4111     39      0


데이터를 간단히 설명하면 산모의 임신주차(weeks)와 흡연여부(smoke)변수를 통해 태아의 몸무게(gram)을 예측하기 위한 예제 데이터입니다. 관측치(row)는 100개가 있습니다.



데이터 나누기

# split data
print len(birth)
birth_train = birth[0:90]
birth_test = birth[91:100]


90%의 데이터를 트레이닝 데이터, 10%의 데이터를 테스트 데이터로 쓰겠습니다.


# basic linear regression
model1 = linear_model.LinearRegression()
x_vars1 = ["weeks", "smoke"]
model1.fit(birth_train[x_vars1], birth_train["gram"])
print model.coef_, model.intercept_

x = np.linspace(25,50,100)

plt.scatter(birth_train['weeks'], birth_train['gram'], c=birth_train["smoke"])
plt.plot(x, x*model.coef_[0]+model.coef_[1]+model.intercept_)
plt.plot(x, x*model.coef_[0]+model.intercept_)
plt.show()


첫 번째 모델 : gram = W1*weeks + W2*smoke + Intercept



우선 교호작용을 고려하지 않은 첫번째 모델입니다. smoke는 0, 1만 갖는 이진 변수이므로 smoke=1 일 때만, W2*smoke는 하나의 상수가 됩니다. smoke=0 인 경우 W2*smoke는 0입니다. 그러므로 smoke=1일 때 W2 값만큼 회귀식의 절편이 이동합니다.


[ 123.76004061 -283.69489986] -1504.60207489


다음 결과를 통해 W1 = 123.76004, W2 = -283.69, Intercept = -1504.60임을 알 수 있습니다.




따라서 결과 플롯은 위와 같습니다. smoke=1일때가 밑에있는 주황색 선입니다. 또한 보라색 점은 smoke=0인 사람을 나타낸 것이고 노란색 점은 smoke=1 인 사람을 나타낸 것입니다.



교호작용을 고려한 모델


# with interaction term
birth["weekssmoke"] = birth["weeks"]*birth["smoke"]
birth_train = birth[0:90]
birth_test = birth[91:100]
model2 = linear_model.LinearRegression()
x_vars2 = ["weeks", "smoke", "weekssmoke"]
model2.fit(birth_train[x_vars2], birth_train["gram"])
print model.coef_, model.intercept_

x = np.linspace(25,50,100)

plt.scatter(birth_train['weeks'], birth_train['gram'], c=birth_train["smoke"])
plt.plot(x, x*(model.coef_[0]+model.coef_[2])+model.coef_[1]+model.intercept_)
plt.plot(x, x*model.coef_[0]+model.intercept_)
plt.show()


교호작용은 effect modification 이라고도 불리며, 한 변수에 의해 다른 변수의 효과가 변하는 것을 말합니다. 이 경우 모델의 식은 아래와 같습니다.



두 번째 모델 : gram = W1*weeks + W2*smoke + W3*(weeks*smoke) + Intercept


왜 weeks*smoke를 곱한 텀을 넣어주나면 이를 통해 weeks의 gram에 대한 effect를 변화시킬 수 있기 때문입니다. smoke=1인경우 (W1+W3)*weeks가 되기 때문에 smoke에 의한 weeks의 effect의 변화를 고려할 수 있게 됩니다.



[  132.01926109  1316.00125169   -41.03706632] -1820.91949297

위 결과를 통해 coefficient와 intercept를 알 수 있습니다.




Mean Squared Error 구하기

print "Model1 Training Mean squared error: %.2f" % np.mean((model1.predict(birth_train[x_vars1]) - birth_train['gram']) ** 2)
print "Model2 Training Mean squared error: %.2f" % np.mean((model2.predict(birth_train[x_vars2]) - birth_train['gram']) ** 2)

print "Model1 Test Mean squared error: %.2f" % np.mean((model1.predict(birth_test[x_vars1]) - birth_test['gram']) ** 2)
print "Model2 Test Mean squared error: %.2f" % np.mean((model2.predict(birth_test[x_vars2]) - birth_test['gram']) ** 2)

마지막으로 Training MSE와 test MSE를 구하는 코드입니다.


Model1 Training Mean squared error: 227136.45
Model2 Training Mean squared error: 223972.58
Model1 Test Mean squared error: 220233.22
Model2 Test Mean squared error: 226638.72


반응형
반응형

Word Embedding


Word Embedding이란 Deep Learning 분야, 이 중에서도 특히 자연어처리에서 필수적으로 알아야할 개념이다. Word Embedding은 Word를 R차원의 Vector로 매핑시켜주는 것을 말한다.



예를 들어 위와 같이 cat이나 mat같은 단어를 특정 차원의 벡터로 바꾸어주는 것이다. 이렇게 단어를 벡터로 바꾸어주는 것은 하나의 Matrix이다. 이를 W라 부른다. W 함수는 매우 중요하다. 이를 통해 단어가 의미 있는 벡터로 변한다. 비슷한 두 개의 단어는 비슷한 벡터로 바뀐다던지 하는 식으로 말이다. W는 Learning을 통해 학습할 수 있다.


예를 들어, 5000개의 단어로 이루어진 단어 세트가 있으면 각각의 단어는 [0,0,0,1,0 ... 0,0,0] (5000열) 과 같이 나타낼 수 있다. 이 때 각각의 단어를 Word Embedding을 통해 32차원 벡터로 나타내고자 하면 W의 차원은 5000*32이다. 이를 학습하여 [0.2,0,4,0.5 ... 0.8,8] 과 같은 32차원의 벡터를 형성해낸다.


Word Embedding은 다음과 같은 놀라운 특성도 가질 수 있다.



woman을 나타내는 벡터와 man을 나타내는 벡터의 차이는 남녀의 차이를 나타내는 벡터이다. 이것이 aunt와 uncle의 차이를 만들어낸다. 예를 들어 he is a man는 옳은문장 she is a man은 틀린 문장을 구분하는 classifier에서 aunt와 uncle에 대해서도 똑같은 일을 할 수 있게 만든다.


참고


http://colah.github.io/posts/2014-07-NLP-RNNs-Representations/

반응형
반응형

윈도우 1주년 업데이트(레드스톤 버전)부터 지원되는 윈도우 bash shell 기능을 통해 윈도우 우분투에 gatk를 설치하여보겠습니다.


1. 윈도우 커맨드를 열고 "bash" 명령어 입력을 통해 윈도우 bash shell 실행


윈도우 우분투를 이용하는 방법은 https://blogs.msdn.microsoft.com/eva/?p=7633 참고해주세요.


2. oracle java 1.8 버전 설치

sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-installer


설치 후 java -version을 입력하고 아래와 같은 문구가 나오면 제대로 설치된 것입니다.


java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)



3. GATK jar 파일 다운로드


https://software.broadinstitute.org/gatk/download/



4. 위의 jav 파일이 있는 곳으로 cd를 통해 이동 후, 아래 명령어 입력


java -jar GenomeAnalysisTK.jar -h



반응형

'Domains > Bioinformatics' 카테고리의 다른 글

platypus 설치  (0) 2017.08.07
samtools 설치시 에러 해결  (0) 2017.07.16
non-coding RNA는 어떻게 만들어지나?  (0) 2017.05.28
tRNA란 무엇인가?  (0) 2017.05.25
의료 영상 - PACS, DICOM이란?  (2) 2017.01.20
반응형

임상실험은 사람을 대상으로하는 실험이며, 특정 집단을 대상으로 임의로 그룹을 나누고(Randomization), 그룹별로 처치를 다르게 하여, 그룹별 결과의 차이를 살펴 보는 실험이다. 임상실험은 스터디 디자인 중 메타분석을 제외하면 가장 결과의 타당도가 높은 실험이며, 인과성 추론(causal inference)의 강한 증거가 된다.


예를 들어 10명을 대상으로 임상실험을 한다고 하면


실험 참여자 : {1,2,3,4,5,6,7,8,9,10}


이들 중에 5명은 A그룹으로 A약을 처치하고 5명은 B그룹으로 위약을 처치한다고 하자. 그러면 5명을 임의추출 하여 A 그룹으로 그 이외의 5명을 B 그룹으로 나누게 된다. (일반적인 임의 추출법을 사용하는 경우) 예를 들어,


A : {2,3,7,8,10}

B: {1,4,5,6,9}

(randomization이 잘 됐다면 두 그룹에서 confounder의 분포는 기대적으로 같다.)


임상실험의 장점은 다른 관찰 실험들에 비해 Randomization을 통해 많은 바이어스를 제거할 수 있다는 것이다. Randomization을 잘 한다면, 바이어스의 3가지 종류(selection bias, information bias, confounding bias) 모두 감소시킬 수 있다.


하지만 randomization이 잘 안되었을 경우, RCT에도 바이어스가 생길 수 있는데 그 예는 아래와 같다.


  • Selection bias & confounding bias : randomization이 제대로 되지 않았다면, 그룹별로 기본적인 특성이 달라서 생길 수 있다.
  • Information bias
    • Performance bias : 연구자가 그룹별로 다르게 대우한다면 결과에 바이어스가 있을 수 있다. 예를 들어, 신약 임상실험에서 신약을 섭취한 대상의 예후를 좋게하기 위해 더 케어를 해준다면 이런 바이어스가 나타날 수 있다.
    • Reporting bias : 결과가 좋은 환자만을 대상으로 리포팅한다면 바이어스가 생길 수 있다.
    • Attrition bias : 중도 탈락자에 의해 생길 수 있는 바이어스.

이 때, selection bias와 confounding bias는 눈가림법(bliding method)을 사용하고 표본의 수를 늘린다면 어느정도 해결 할 수 있을 것이다. 하지만 Information bias는 사람에 의해 일어나서 막기가 힘든 바이어스이다. (물론 중도 탈락자한테 돈을 지급해 줄테니 실험에 참여해달라고 할 수도 있다.) 이처럼 여러가지 스터디 디자인 중에 증거력이 좋은 임상실험이라 할지라도 결과에 어느정도 바이어스가 있을 수 있다.






반응형
반응형