전체 글 (314)

반응형

SAS를 통한 비모수 검정


1. Paired Sample에 대한 Sign Test와 Signed Rank Test 



위 데이터셋은 특정 공군부대에 배치된 14명 신병들의 치주에서 부착상실을 보인 위치들에 대한 백분율을 비교한 자료이다.

치료전(before)과 치료후(after)의 변화를 보고 해당 치료법이 부착상실을 치료하는 효과가 있는지를 평가해보자. 이 경우 한 사람에 대해 Before과 After를 측정했으므로 해당 sample은 paired 되어있다고 말한다.


two-related sample에 대한 비모수 검정은 sign test signed-rank test가 있다. 이 두 가지 검정을 모두 하는 PROC UNIVARIATE 프로시져를 사용한다. 


proc import datafile = '/folders/myshortcuts/myFolders/data/attachment.txt' out=attachment replace;
run;
data attachment;
 set attachment;
 diff = before-after;
run;
proc univariate data=attachment normal;
 var diff;
run


proc univariate 의 normal 옵션을 주면 data에 대한 정규성 검정을 한다. 정규성 검정의 결과를 보면 p-value < 0.05로 매우 작으므로 유의수준 5% 내에서 정규분포를 따르지 않는다. (p-value가 낮다는 것은 그만큼 귀무가설을 기각하는 쪽으로 힘이 실린다.) 표본이 정규분포를 따르지 않으므로 모수적 검정보다는 비모수적 검정을 하는 것이 좋다.

two-related sample에 대한 비모수 검정은 sign test와 signed-rank test가 있다.


univariate 내부에 var diff; 를 입력하면 diff에 대한 비모수 검정을 하게된다. (diff = before-after)

'부호'라고 표시된 부분이 sign test이고 '부호 순위'라고 표시된 부분이 signed-rank test이다.


sign test와 signed-rank test의 귀무가설은 diff의 중위수 = 0 이다. 이 때의 p 값은 sign test에서 0.0923이고 signed-rank test에서 0.0942 이므로 두 개의 검정 모두 유의수준 5% 내에서 귀무가설을 기각하지 못한다.




반응형
반응형


Data set



위의 Data set에서 age가 0~10일 때는 1, 10~20일 때는 2 ... 90~100 일 때는 9인 새로운 범주형 변수를 생성하고자 한다.


Code


/* 연령 category */
data workshop.data3(replace=yes);
    set workshop.data3;
    do i = 0 to 9;
        if age >= i*10 & age < i*10+10 then cage = i;
    end;
    drop i;
run;




Do end문과 if then 문을 통하여 위와 같이 간단하게 구현할 수 있다. 마지막으로 SAS 는 임시변수도 Data set 내부에 변수로 저장하므로 drop i; 를 통해 임시변수를 없애준다.




반응형
반응형

Data set



Code


/* Get Age */
data workshop.data3;
    set workshop.data3;
    birth = input(substr(regnum,1,6), YYMMDD6.);
    today = today();
    age  = int((today-birth)/365.25);
    drop birth today;
run;


  • 우선 substr 함수를 사용해 주민등록번호의 앞자리만 자른 후, 이것을 input 함수를 이용해  YYMMDD6. Informat으로 읽어들여 Numeric으로 변환하여 birth 변수에 저장한다. 
  • today 함수는 오늘 날짜를 numeric으로 돌려준다. 이 숫자 변수는 1960년 1월 1일부터 현재까지의 날짜의 차이를 뜻한다.
  • age는 오늘 날짜에서 출생날짜를 뺀 후 365.25로 나누어준다. 그리고 만 나이이므로 int 함수를 통해 소숫점을 잘라내서 정수로 만들어 준다.
  • 마지막으로 사용한 임시변수 birth, today를 drop해준다.




반응형
반응형

titanic.csv


SAS - (4) PROC FREQ 빈도 분석


PROC FREQ는 빈도분석을 할 때 쓰인다. 


데이터 읽고 솔팅하기


FILENAME REFFILE '/folders/myfolders/titanic.csv';

PROC IMPORT DATAFILE=REFFILE
    DBMS=CSV
    OUT=WORK.titanic;
    GETNAMES=YES;
RUN;

proc sort data = titanic;
    by sex;
run;



PROC FREQ


문법은 아래와 같다.


PROC FREQ DATA = Dataset ;
TABLES Variable_1 ;
BY Variable_2 ;



예제 


proc FREQ data=titanic;
    tables survived; 
    by sex;
run;


결과


FREQ 프로시저

Survived빈도백분율누적
빈도
누적
백분율
08125.808125.80
123374.20314100.00

FREQ 프로시저

Survived빈도백분율누적
빈도
누적
백분율
046881.1146881.11
110918.89577100.00


참고


https://www.tutorialspoint.com/sas/sas_frequency_distributions.htm

반응형
반응형

Relative Risk 와 Odds Ratio의 정의


 

 disease

non-disease 

 

 smoker 

20 (a)

80 (b)

100 

 non-smoker 

5 (c)

95 (d)

100 

 

25 

175 

200 


 

Relative Risk는 Risk Ratio 라고도 부르며 줄여서 RR 이라고 부르기도 합니다. 이름에서 알 수 있듯 RR은 Risk의 '비' 를 뜻합니다. 예를 들어, 위 표에서 smoker의 disease에 대한 Risk는 20/100 = 0.2 입니다. 즉 smoker인 경우 질병에 걸릴 확률이 0.2라는 것입니다. 반면 non-smoker의 disease에 대한 Risk는 5/100 = 0.05 입니다. 따라서 smoking의 disease에 대한 Relative Risk는 0.2/0.05 = 4 라고 할 수 있습니다. 이를 식으로 표현하면 (a/a+b)/(c/c+d) 입니다. Relative Risk는 직관적입니다. 담배를 폈을 경우 4배 더 질병에 걸릴 확률이 높다. 라고 직관적으로 해석할 수 있습니다. 


odds ratio는 OR 이라고 부르며 odds의 '비율' 입니다. 따라서 odds ratio를 알기 전에 우선 odds가 무엇인지 알아야합니다. odds는 실패와 성공의 비입니다. 위의 경우에는 smoker의 질병에 대한 odds는  20/80 = 0.25 이고 non-smoker의 질병에 대한 odds는 5/95 = 0.052 입니다. 따라서 odds ratio는 0.25/0.052 는 약 4.8입니다. 이를 수식으로 표현하면 (a/b)/(c/d) = 4.8 입니다. 값을 구하는건 구하는 건데 odds ratio는 직관적으로 해석하기 어렵습니다.



왜 Odds Ratio를 쓸까?


위와 같은 상황 (어떠한 처리군들 간에 질병에 대한 비교를 할 경우) RR을 써도 OR을 써도 상관없습니다. 하지만 중요한 것은 case-control study에서는 relative risk를 쓸 수 없습니다. 즉, case-control study에서는 OR만 씁니다.



Case Control Study란 무엇인가?


Case Control Study는 사례대조연구라고 하는데 우선 네이버 백과에서 정의를 살펴보겠습니다.


연구대상군의 특성을 명확히 하고 그 기본적 구조를 명백히 하기 위해 몇가지 요인을 조절한 대상 control을 골라 제각기 거기에 대해서 동일내용 및 방법으로 조사ㆍ연구를 하는 일종의 비교연구 법이다. [네이버 백과]


말이 어렵게 되어있는데 예를 들어 다음과 같은 상황입니다. 위에서는 smoker 100명, non-smoker 100명을 뽑아서 이들간에 질병의 발생률을 비교했죠. 하지만 아래와 같은 경우에는 병에 걸린사람 100명, 병에 걸리지 않은 사람 100명을 뽑았습니다.  (위에서 병에 걸린 사람의 smoker와 non-smoker의 비가 4:1으므로 여기서도 4:1 정도일 것입니다.) 이렇게 환자군과 대조군을 뽑아서 비교하는 것을 case-control study라고 합니다. 질병의 발생률이 매우 낮은 경우에는 이러한 study가 위와 같은 코호트 연구보다 좋습니다. 


 

 disease

non-disease 

 

 smoker 

80 (a)

45 (b)

 125

 non-smoker 

20 (c)

55 (d)

 75

 

100

100

200


이 경우 smoker의 risk를 구해보면 80/125입니다. 그대로 해석하면 약 65%의 환자가 흡연자가 병에 걸린다는 것입니다. 이는 모순입니다. 왜냐하면 병에 걸린 사람 100명, 병에 걸리지 않은 사람을 100명을 대상으로 RR을 계산한 것이니 병에 걸릴 위험율이 높게 나올 수 밖에 없겠죠. 실제로 RR을 구하면 (80/125) / (20/75) = 2.4 입니다. 샘플이 바뀌면, RR도 바뀐다는 것을 알 수 있습니다. 따라서 이러한 경우에는 RR을 쓸 수 없습니다. 하지만 case-control study에서 OR은 유효합니다. (80/45)/(20/55) = 약 4.91이 나옵니다. 따라서 OR이 RR 보다 더욱 범용적이라고 할 수 있습니다. 


또한 OR은 RR의 근사치로 사용되기도 합니다. OR = (a/b)/(c/d)이고 RR = (a/(a+b))/(c/(c+d)) 입니다. 따라서 a, c가 매우 작은 값이라면 OR을 RR에 근사시킬 수 있습니다. 그러므로 이러한 근사를 사용하면 위와 같은 case-control study에서도 OR을 근사해 RR을 알아볼 수 있는 것입니다.



반응형
반응형

/*

(3) Standard Deviation 구하기

날짜 : 2017.3.8

*/



데이터 읽기


FILENAME REFFILE '/folders/myfolders/titanic.csv';

PROC IMPORT DATAFILE=REFFILE
    DBMS=CSV
    OUT=WORK.titanic;
    GETNAMES=YES;
RUN;



표준편차 구하기


표준편차도 PROC MEANS 프로시져로 구할 수 있다. 옵션으로 STD를 주면 되며, 산술 평균 구하는 것과 마찬가지로 그루핑 할 수도 있다.

 

PROC MEANS data=work.titanic STD MAXDEC=2;
RUN;



MEANS 프로시저

변수표준편차
PassengerId
Survived
Pclass
Age
Parch
Fare
257.35
0.49
0.84
13.00
0.81
49.69

SORTING


우선 SEX로 그루핑하여 AGE의 Standard Deviation을 구하기에 앞서 SORTING을 먼저한다. 


proc sort data=work.titanic;
    by sex;
run;




PROC SUVEYMEANS


조금 더 Advanced 된 것으로 PROC SURVEYMEANS 프로시져가 있다. 아래는 SEX로 Grouping하여 age의 Standard Deviation을 구하는 예제이다. ods output을 통해 결과를 table로 내보낼 수 있다.


proc surveymeans data=work.titanic STD;
var age;
BY sex; /* 이 때 sex로 sorting이 되어 있어야 한다. */
ods output statistics=rectangle;
run;

proc print data=rectangle;
run;


The SURVEYMEANS Procedure

Data Summary
Number of Observations314
Statistics
VariableStd Error
of Sum
Age228.303304

The SURVEYMEANS Procedure

Distribution of Age

The SURVEYMEANS Procedure

Data Summary
Number of Observations577
Statistics
VariableStd Error
of Sum
Age312.416021

The SURVEYMEANS Procedure

Distribution of Age

OBSSexVarNameStdDev
1femaleAge228.303304
2maleAge312.416021



참고


https://www.tutorialspoint.com/sas/sas_standard_deviation.htm

반응형
반응형

/*

개발환경 : SAS University Edition

날짜 : 2017. 3. 8

*/



(2) PROC SQL로 새로운 테이블 만들기


FILENAME REFFILE '/folders/myfolders/titanic.csv';

PROC IMPORT DATAFILE=REFFILE
    DBMS=CSV
    OUT=WORK.titanic;
    GETNAMES=YES;
RUN;

PROC SQL;
create table titanic_male as
    SELECT *
     FROM 
        work.titanic
            WHERE sex = 'male'
;
RUN;



PROC SQL 입력후 SQL 문으로 새로운 테이블을 생성하는 문장을 넣으면 된다. 위처럼 입력하면 타이타닉 예제에서 sex가 male인 row들만 모아서 새로운 테이블을 만든다. 컬럼을 선택하려면 SELECT column1, column2 처럼 넣으면 된다. 위 스크립트를 실행 후에 work 라이브러리에 가보면 titanic_male이라는 이름의 테이블이 새로 생성되었음을 확인할 수 있다.



출처


https://www.tutorialspoint.com/sas/sas_standard_deviation.htm

반응형
반응형

/*

개발 환경 : SAS University Edition

날짜 : 2017/3/8

*/


titanic.csv



SAS 에서 데이터의 산술 평균은 PROC MEANS 를 통해 구할 수 있다. 예제 데이터셋으로는 titanic 데이터셋을 사용하였다. 



데이터 읽기


/* 소스 파일: titanic.csv */
/* 소스 경로: /folders/myfolders */
/* 코드 생성일: 17. 3. 7. 오후 3:35 */
FILENAME REFFILE '/folders/myfolders/titanic.csv';

PROC IMPORT DATAFILE=REFFILE
    DBMS=CSV
    OUT=WORK.titanic;
    GETNAMES=YES;
RUN;



모든 변수의 평균 구하기


/* 모든 변수의 평균, 합 출력 */
PROC MEANS DATA = WORK.titanic Mean SUM MAXDEC=2;
RUN;



위와 같이 하면 모든 변수의 Mean과 Sum을 구한다. MAXDEC는 Max Decimal의 약자로 소숫점 둘째자리까지 출력하라는 의미이다.



MEANS 프로시저

변수평균합계
PassengerId
Survived
Pclass
Age
Parch
Fare
446.00
0.38
2.31
29.76
0.38
32.20
397386.00
342.00
2057.00
26515.17
340.00
28693.95


특정 변수의 평균 구하기


특정 변수의 평균만 구하고 싶을 때는 VAR 키워드에 지정해준다.


/* 특정 변수의 평균, 합 출력 */
PROC MEANS DATA = WORK.titanic Mean SUM MAXDEC=2;
VAR age;
RUN;


MEANS 프로시저

분석 변수 : Age
평균합계
29.7626515.17

그룹별로 평균 구하기


그룹별로 평균을 구하고 싶을 때는 CLASS 키워드에 지정해준다.

/* 특정 변수의 평균, 합 출력 */

PROC MEANS DATA = WORK.titanic Mean SUM MAXDEC=2; VAR age; CLASS sex; RUN;



MEANS 프로시저

분석 변수 : Age
Sex관측값 수평균합계
female31428.278876.00
male57730.5717639.17

참고



https://www.tutorialspoint.com/sas/sas_arithmetic_mean.htm

반응형

Tools/R

R - (10) 리스트(List)

2017. 3. 4. 01:49
반응형

(10) 리스트 (List)


List 만들기


List와 Vector의 차이점은 Vector는 한 가지 타입의 원소만 담을 수 있지만, List는 어떤 타입이든 담을 수 있다는 것이다.  List는 위와 같이 list() 키워드를 통해 만들 수 있다.


# Create a list containing strings, numbers, vectors and a logical values.
list_data <- list("Red", "Green", c(21,32,11), TRUE, 51.23, 119.1)
print(list_data)



[[1]]
[1] "Red"

[[2]]
[1] "Green"

[[3]]
[1] 21 32 11

[[4]]
[1] TRUE

[[5]]
[1] 51.23

[[6]]
[1] 119.1


출력해보면 위와 같이 첫 번째 원소는 String, 세 번째 원소는 Vector, 네 번째 원소는 진릿값인 것을 알 수 있다.



List에 이름 붙이기 


# Create a list containing a vector, a matrix and a list.
list_data <- list(c("Jan","Feb","Mar"), matrix(c(3,9,5,1,-2,8), nrow = 2),
   list("green",12.3))

# Give names to the elements in the list.
names(list_data) <- c("1st Quarter", "A_Matrix", "A Inner list")

# Show the list.
print(list_data)


$`1st Quarter`
[1] "Jan" "Feb" "Mar"

$A_Matrix
     [,1] [,2] [,3]
[1,]    3    5   -2
[2,]    9    1    8

$`A Inner list`
$`A Inner list`[[1]]
[1] "green"

$`A Inner list`[[2]]
[1] 12.3



위와 같은 문법을 통해 List의 각각의 원소에 이름을 붙일 수 있다. 



리스트 원소 접근


리스트에는 기본적으로 index를 통해 접근할 수 있고, 이름이 붙어져 있으면 이름으로도 접근할 수 있다. 이름으로 접근할 때는 $키워드를 통해 리스트의 이름을 명시해주면 된다.


# Create a list containing a vector, a matrix and a list.
list_data <- list(c("Jan","Feb","Mar"), matrix(c(3,9,5,1,-2,8), nrow = 2),
   list("green",12.3))

# Give names to the elements in the list.
names(list_data) <- c("1st Quarter", "A_Matrix", "A Inner list")

# Access the first element of the list.
print(list_data[1])

# Access the thrid element. As it is also a list, all its elements will be printed.
print(list_data[3])

# Access the list element using the name of the element.
print(list_data$A_Matrix)


$`1st Quarter`
[1] "Jan" "Feb" "Mar"

$`A Inner list`
$`A Inner list`[[1]]
[1] "green"

$`A Inner list`[[2]]
[1] 12.3


     [,1] [,2] [,3]
[1,]    3    5   -2
[2,]    9    1    8



리스트 원소 조작하기 (Manipulating)


리스트 원소 조작은 아래와 같이 <- 키워드를 통해 새로운 값을 넣어주면 된다.


# Create a list containing a vector, a matrix and a list.
list_data <- list(c("Jan","Feb","Mar"), matrix(c(3,9,5,1,-2,8), nrow = 2),
   list("green",12.3))

# Give names to the elements in the list.
names(list_data) <- c("1st Quarter", "A_Matrix", "A Inner list")

# Add element at the end of the list.
list_data[4] <- "New element"
print(list_data[4])

# Remove the last element.
list_data[4] <- NULL

# Print the 4th Element.
print(list_data[4])

# Update the 3rd Element.
list_data[3] <- "updated element"
print(list_data[3])

[[1]]
[1] "New element"

$<NA>
NULL

$`A Inner list`
[1] "updated element"


리스트 합치기


아래와 같이 c() 키워드를 통해 리스트를 합칠 수 있다. 


# Create two lists.
list1 <- list(1,2,3)
list2 <- list("Sun","Mon","Tue")

# Merge the two lists.
merged.list <- c(list1,list2)

# Print the merged list.
print(merged.list)


[[1]]
[1] 1

[[2]]
[1] 2

[[3]]
[1] 3

[[4]]
[1] "Sun"

[[5]]
[1] "Mon"

[[6]]
[1] "Tue"


리스트를 벡터로 변환하기


List 상태에서는 벡터 상태에서 보다 조작의 자유도가 떨어진다. 예를 들어 산술 연산을 한다거나 할 수 없다. 다양한 조작을 위해 리스트를 벡터로 변환할 때는 아래와 같이 unlist() 키워드를 이용하면 된다. 


# Create lists.
list1 <- list(1:5)
print(list1)

list2 <-list(10:14)
print(list2)

# Convert the lists to vectors.
v1 <- unlist(list1)
v2 <- unlist(list2)

print(v1)
print(v2)

# Now add the vectors
result <- v1+v2
print(result)


[[1]]
[1] 1 2 3 4 5

[[1]]
[1] 10 11 12 13 14

[1] 1 2 3 4 5
[1] 10 11 12 13 14
[1] 11 13 15 17 19



아래 튜토리얼을 참고한 포스팅입니다.


https://www.tutorialspoint.com/r/r_lists.htm

반응형
반응형



기술적 특이점이란 무엇인가?


레이 커즈와일이 2006년에 「특이점이 온다」 라는 책을 출간했을 때 많은 사람들이 그의 말도 안되는 예측을 비웃었습니다. 하지만 되돌아보면 커즈와일은 iPhone이 등장하기 1년전에 iPhone과 같은 기계가 나올 것을 예측하였습니다. 그리고 그는 가까운 미래에 인간과 컴퓨터가 본질적으로 융합하여 공상 과학 영화에 나올법한 엄청난 능력을 가질 수 있다고 말했습니다. 시간이 지날 수록 그가 예측했던 많은것들이 현실에서 실제로 일어나고 있습니다.


커즈와일이 주장하는 것은 사실 매우 간단합니다. 바로 "기술의 발전 속도는 지수적" 이라는 것입니다. (책에서는 "수확 체증의 법칙" 이라고도 말합니다.) 그리고 기술의 발전속도가 나중에는 거의 무한대에 가까워지게 되는데 이를 "특이점" (Singularity) 이라고 합니다. 그는 특별히 미래에 컴퓨터 기술이 엄청난 속도로 발전해 특히 3가지 분야와 융합하여 엄청난 가치를 창출할 것이라고 예측합니다. 그 3가지 분야는 바로 유전체학 (genomics), 나노기술(nanotechnology), 로보틱스(robotics) 분야입니다.


최근 일어나는 일들을 보면 커즈와일이 했던 예측이 그렇게 허황된 것이 아니라는 것을 알 수 있습니다. 얼마전 Deep mind의 Alphago가 바둑 챔피언 이세돌을 꺾었고, IBM Watson은 의학, 금융, 심지어 요리 분야에까지 점점 발을 넓혀가고 있습니다. 자율주행차는 2020년에 도로에 나올 것으로 예측되고 있습니다. 커즈와일의 예측대로 현재 기술의 발전 속도는 그 어느 때와도 비교할 수 없을 정도로 빠릅니다.



왜 특이점이 오는가?


1. 컴퓨터 연산 속도의 기하급수적 증가


최근 50년간 기술 산업은 "무어의 법칙" (Moore's Law)이라는 유명한 법칙에 의해 견인되어 왔습니다. 인텔의 공동 창업자 고든 무어의 예측인 무어의 법칙은 마이크로칩에 있는 트랜지스터의 숫자가 18개월에 2배씩 증가한다는 법칙입니다. 이러한 기술적 발전으로 초창기의 냉장고만한 컴퓨터를 점점 소형화시켜 현재의 손바닥만한 크기로 만들 수 있었던 것입니다. 


하지만 무어의 법칙은 이론적인 한계가 있죠. 아무리 작아져도 원자만큼 작아질 수는 없습니다. 무어의 법칙이 자연을 거스를 수는 없을 것입니다. 그래서 최근에는 무어의 법칙의 진행속도가 점점 느려지고 있습니다. 무어의 법칙은 2020년쯤에 멈출 것이라고 예상되고 있습니다. 


하지만 커즈와일은 마이크로프로세서가 정보처리의 새로운 패러다임이라고 말하며 진공관, 트랜지스터 등의 옛기술을 대체하고 있다고 말합니다. 즉, 정보처리 속도를 결정하는 것이 트랜지스터의 수 뿐만이 아니라는 것입니다. 양자 컴퓨팅(quantum computing), 뉴로모픽 칩(neuromorphic chips), 3D Stacking 과 같은 새로운 기술이 연산 속도를 빠르게 하고 있습니다. 커즈와일에 따르면 연산 속도(MIPS)는 실제로 기하급수적으로 증가해왔으며, 2045년 경에는 컴퓨터의 연산 속도가 모든 인간의 뇌의 연산 속도를 합친 속도보다 빨라질 것으로 예측됩니다.


2. 로봇 기술의 발전


1962년 GM 생산공정에 산업용 로봇 Unimate 가 등장한 이후, 자동화는 우리의 일상으로 침투해왔습니다. 1970년대의 ATM기계 2000년도의 자동 청소 로봇 등. 로봇은 점점 인간의 일을 대신 해왔습니다. 최근에는 "단순 반복 작업" 뿐만 아니라 인간만이 할 수 있다 믿었던 "창의적인 영역" 까지 침범하고 있습니다. 로봇에 의해 쓰여진 한 책은 얼마 전 일본의 Hoshi Shinichi Literary Award 에 정식으로 제출되었고 accept 되기까지 했습니다.


앞으로는 이러한 로봇의 발전은 더욱 가속화될 것입니다. 미국 국방부는 군인의 머리에 삽입하는 칩을 실험하고 있고, 일론 머스크는 이와 비슷한 기술을 상업화 하겠다고 말했습니다. 기술력이 기하급수적으로 증가함에 따라 기술력은 향후 20년간 수천배 이상 증가할 것으로 예상되고 로봇은 점점 더 많은 일을 해나갈 것입니다.



3. 유전자 공학의 발전

 

2003년, 과학자들이 인간 유전자의 전체 염기서열을 해독하였습니다. 비로소 생명체의 언어인 DNA를 분석할 수 있는 시대가 열린 것입니다. 이제 인간은 유전자가 DNA 상에 어디에 위치해있는지 알 수 있었고 그것의 기능을 추적할 수 있었습니다.  그로부터 2년 뒤, 과학자들은 CRISPR 라는 유전자를 싸고 쉽게 수정할 수 있는 기술을 만들었습니다. 이 기술을 통해 인간은 DNA를 수정하여 바이러스를 비활성화 시킨다거나, 유전자 변형 작물을 만들어낼 수 있었습니다.


미래에는 DNA의 수정을 통해 태어나기 전부터 아기의 지능, 외모, 눈 색깔을 변형시킬 수 있을 것입니다. 물론 이러한 것들에 대한 윤리적인 논쟁은 있겠지만요. 이렇게 공상영화에서나 볼법한 것들이 특이점에서는 "현실"이 될 것입니다. 커즈와일은 컴퓨터 기술과 유전자 기술이 발전함에 따라 인간은 영생을 누릴 수 있다고 말합니다. 심지어 불의의 사고로 죽어도 업로드한 기억을 복원하여 인간을 "소생" 시킬 수 있다고 합니다.



끝으로 


특이점이라는 개념은 흥미롭기도 무섭기도 합니다. 과연 현재 기술력보다 수천배 이상 발전한 시대는 어떤 모습일까요? 우리는 이러한 세상을 과연 상상할 수 있을까요? 우리는 얼마만큼 로봇을 '용인' 해야할 것이며, 어떤 유전자 조작을 허용하거나 막아야할까요? 특이점은 우리에게 어마어마한 가능성을 열어두고 있습니다. 하지만 한 가지 중요한 사실은 기술은 인간에 의해 창조되었고 소유된다는 것입니다. 특이점의 시대에 인간이 기술을 어떻게 활용하느냐에 따라 디스토피아가 될 수도 유토피아가 될 수도 있을 것입니다.



참고


반응형
반응형