29
認知情報基礎実習 2019.06.10 R programming 1

認知情報基礎実習 2019.06.10 R programming 1 · SIMULATION: RANDOM NUMBERS Normal Distribution(正規分布) norm Parameters: N(数), mean(平均), sd(標準偏差)

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 認知情報基礎実習 2019.06.10 R programming 1 · SIMULATION: RANDOM NUMBERS Normal Distribution(正規分布) norm Parameters: N(数), mean(平均), sd(標準偏差)

認知情報基礎実習2019.06.10 R programming 1

Page 2: 認知情報基礎実習 2019.06.10 R programming 1 · SIMULATION: RANDOM NUMBERS Normal Distribution(正規分布) norm Parameters: N(数), mean(平均), sd(標準偏差)

OUTLINEシミュレーション­ 乱数 (random number generation)

­ 正規分布 Normal distribution­ 一様分布 Uniform distribution

­ Random Samplingプログラムの流れのコントロール(Flow Control)

­ for­ while­ if­ repeat

応用例­ 中央極限定理 Central Limit TheoremRのスクリプトと関数(Script vs. Function)

Page 3: 認知情報基礎実習 2019.06.10 R programming 1 · SIMULATION: RANDOM NUMBERS Normal Distribution(正規分布) norm Parameters: N(数), mean(平均), sd(標準偏差)

SIMULATION: RANDOM NUMBERS

Normal Distribution(正規分布)­ norm ­ Parameters: N(数), mean(平均), sd(標準偏差)Uniform Distribution (一様分布)­ Unif­ Parameters: N(数), min(最小値), max(最大値)乱数の生成­ ‘r’を頭につける(rnorm, runifなど)

例> x=rnorm(n=1,mean=100,sd=15)> x[1] 113.7235> y=runif(n=3,min=1,max=10)> y[1] 2.422631 9.000905 5.476001

Page 4: 認知情報基礎実習 2019.06.10 R programming 1 · SIMULATION: RANDOM NUMBERS Normal Distribution(正規分布) norm Parameters: N(数), mean(平均), sd(標準偏差)

SIMULATION: RANDOM NUMBERSN = 10000# N = 1000random.data = rnorm(N, mean=0, sd=1)hist(random.data, nclass = 50, col = "navy", xlab = "Data",

probability = T, main = "Histogram of Random Data")

# density of generated datadens = density(random.data)lines(dens, col = "orange", lwd = 4)

# theoretical densityx = seq(-4,4,0.1) true.norm = dnorm(x, mean = 0, sd = 1)lines(x,true.norm, col = "green", lty = 3, lwd = 4)legend("topleft",c("empirical", "theoretical"), lty = c(1,3),

col = c('orange','green'),lwd=4)

Page 5: 認知情報基礎実習 2019.06.10 R programming 1 · SIMULATION: RANDOM NUMBERS Normal Distribution(正規分布) norm Parameters: N(数), mean(平均), sd(標準偏差)

SIMULATION: RANDOM NUMBERS

N = 10000 N = 1000

Page 6: 認知情報基礎実習 2019.06.10 R programming 1 · SIMULATION: RANDOM NUMBERS Normal Distribution(正規分布) norm Parameters: N(数), mean(平均), sd(標準偏差)

RANDOM SAMPLINGSAMPLE :­ ランダムに項目をn個選択する­ syntax: sample(vector, n)

例> sample(1:10,3) # 1 ~ 10 から 数値を3つランダムで取り出す[1] 4 3 8

> sample(c(“gu”,“choki”,“pa”),1) # グー、チョキ、パーから1つランダムで取り出す[1] "gu"

Page 7: 認知情報基礎実習 2019.06.10 R programming 1 · SIMULATION: RANDOM NUMBERS Normal Distribution(正規分布) norm Parameters: N(数), mean(平均), sd(標準偏差)

RANDOM PERMUTATIONSAMPLE :­ ランダムな順に並び替える­ syntax: sample(vector)

> sample(1:10)[1] 3 5 7 4 2 6 8 10 9 1

> sample(1:10)[1] 5 4 7 9 8 6 1 2 3 10

> sample(c("a","b","c","d","e","f","g"))[1] "b" "d" "e" "c" "a" "f" "g"

Page 8: 認知情報基礎実習 2019.06.10 R programming 1 · SIMULATION: RANDOM NUMBERS Normal Distribution(正規分布) norm Parameters: N(数), mean(平均), sd(標準偏差)

SAMPLINGSAMPLE :­ ランダムな列を生成する­ syntax: sample(vector, n, replace=T, prob=vector)

­ replace: 差し替え­ prob: 選択される確率

> sample(0:1, 10, replace=T)

[1] 1 1 0 0 1 1 0 1 1 1

> sample(c("Head","Tail"), 10, replace=T)

[1] "Tail" "Tail" "Tail" "Tail" "Tail" "Tail" "Tail" "Head" "Head" "Tail"

> sample(c("Head","Tail"), 10, replace=T, prob=c(0.9,0.1))

[1] "Head" "Head" "Head" "Head" "Tail" "Head" "Head" "Head" "Head" "Head"

Page 9: 認知情報基礎実習 2019.06.10 R programming 1 · SIMULATION: RANDOM NUMBERS Normal Distribution(正規分布) norm Parameters: N(数), mean(平均), sd(標準偏差)

R PROGRAMMINGFlow Control

FOR: 決められた回数だけ繰り返すWHILE: 条件が満たされている限り繰り返すIF: 条件が満たされたら実行するREPEAT: 条件が満たされるまで繰り返す

Page 10: 認知情報基礎実習 2019.06.10 R programming 1 · SIMULATION: RANDOM NUMBERS Normal Distribution(正規分布) norm Parameters: N(数), mean(平均), sd(標準偏差)

R PROGRAMMING: FORFOR­ FOR loop - 決められた回数だけ繰り返すsyntax: for (counter in vector){ R commands }­ 例:> for (i_loop in 1:5){print(i_loop)}[1] 1..[1] 5> for (i_loop in 1:5){print(c(i_loop,2^i_loop))}[1] 1 2..[1] 5 32

Page 11: 認知情報基礎実習 2019.06.10 R programming 1 · SIMULATION: RANDOM NUMBERS Normal Distribution(正規分布) norm Parameters: N(数), mean(平均), sd(標準偏差)

R PROGRAMMING: WHILEwhile­ WHILE loop - 条件が満たされている限り繰り返す

syntax: while (expression) { R commands }

counter <- 1while(counter<=10){print(counter)counter<-counter+1

}

counter <- 1while(counter^2 <= 10){print(c(counter, counter^2))counter<-counter+1

}

Page 12: 認知情報基礎実習 2019.06.10 R programming 1 · SIMULATION: RANDOM NUMBERS Normal Distribution(正規分布) norm Parameters: N(数), mean(平均), sd(標準偏差)

R PROGRAMMING: IFIF controlsyntax: if (expression) { R commands }

if (expression) { R commands } else {R commands}

affil<-"cogsci"if (affil=="cogsci") {

print("you are wonderful")}[1] "you are wonderful"

affil<-"phil"if (affil=="cogsci") {

print("you are wonderful")} else {print("still, you are wonderful")

}[1] "still, you are wonderful"

Page 13: 認知情報基礎実習 2019.06.10 R programming 1 · SIMULATION: RANDOM NUMBERS Normal Distribution(正規分布) norm Parameters: N(数), mean(平均), sd(標準偏差)

R PROGRAMMING: REPEATREPEAT loop - ある条件が満たされるまで繰り返す。­ WHILE と似ているが、repeat は最低でも1回は遂行されるようにできるが、while はそうとも限らない。Syntax: repeat { R commands; if (expression) break } # 最低でも1回は遂行される

repeat { if (expression) break; R commands;} # whileとほぼ同じ

v1=1633;v2=355;repeat {

r=v1%%v2print(paste('v1 =',v1,v2 = ',v2, remainder = ',r))v1=v2;v2=rif (r==0){ break}

}

Page 14: 認知情報基礎実習 2019.06.10 R programming 1 · SIMULATION: RANDOM NUMBERS Normal Distribution(正規分布) norm Parameters: N(数), mean(平均), sd(標準偏差)

R PROGRAMMING: REPEATREPEAT loop - ある条件が満たされるまで繰り返す。­ WHILE と似ているが、repeat は最低でも1回は遂行されるが、while はそうとも限らない。Syntax: repeat { R commands; if (expression) break } OR

repeat { if (expression) break; R commands;}

counter=6repeat{ print(counter)counter = counter + 1if(counter>5){break}

}[1] 6

counter=6repeat{if(counter>5){break}print(counter)counter+counter+1

}

Page 15: 認知情報基礎実習 2019.06.10 R programming 1 · SIMULATION: RANDOM NUMBERS Normal Distribution(正規分布) norm Parameters: N(数), mean(平均), sd(標準偏差)

実習:大数の法則大数の法則の検証実験手続き1.繰り返し回数Nを定義2.1~6をN回サンプル3.6が出てきたら+1カウント

0 200 400 600 800 1000

12

34

56

results of 1000 rolls of a die

rolls

outcome

0 200 400 600 800 1000

0.0

0.2

0.4

Cumulative probability that rolls of a die come out SIX

rolls

probability

Page 16: 認知情報基礎実習 2019.06.10 R programming 1 · SIMULATION: RANDOM NUMBERS Normal Distribution(正規分布) norm Parameters: N(数), mean(平均), sd(標準偏差)

実習:大数の法則大数の法則の検証実験手続き1.繰り返し回数Nを定義 → forを使用2.1~6を無作為に発生 → sampleを使用3.6が出てきたら+1カウント → ifを使用

Page 17: 認知情報基礎実習 2019.06.10 R programming 1 · SIMULATION: RANDOM NUMBERS Normal Distribution(正規分布) norm Parameters: N(数), mean(平均), sd(標準偏差)

実習:大数の法則大数の法則の検証実験手続き1. 繰り返し回数Nを定義 → forを使用2. 1~6を無作為に発生 → sampleを使用3. 6が出てきたら+1カウント → ifを使用

six.counter=0for (i_loop in 1:1000) {die<-sample(1:6,1)if (die==6) {six.counter=six.counter+1}

}> six.counter/1000[1] 0.164

Page 18: 認知情報基礎実習 2019.06.10 R programming 1 · SIMULATION: RANDOM NUMBERS Normal Distribution(正規分布) norm Parameters: N(数), mean(平均), sd(標準偏差)

実習:大数の法則 その2大数の法則の検証実験手続き (確率の推移を見たい)1. 繰り返し回数Nを定義 → forを使用2. 1~6を無作為に発生 → sampleを使用3. 6が出てきたら+1カウント → ifを使用

N=1000; six.counter=rep(0,N);for (i_loop in 1:N) {die<-sample(1:6,1)if (die==6) {six.counter[i_loop]=1}

}plot(1:N,cumsum(six.counter)/(1:1000),type='l',ylim=c(0,1),lwd=2)

Page 19: 認知情報基礎実習 2019.06.10 R programming 1 · SIMULATION: RANDOM NUMBERS Normal Distribution(正規分布) norm Parameters: N(数), mean(平均), sd(標準偏差)

実習:大数の法則 その3大数の法則の検証実験手続き (確率の推移を見たい)1. 繰り返し回数Nを定義 →2. 1~6を無作為にN回発生 → sampleを使用3. 6が出た場所を同定 → ==を使用

N = 1000die.all <- sample(1:6,N,replace=T)six.index <- die.all==6par(mfrow = c(2,1))par(oma=c(2,2,0,0),mar=c(4,4,1,1),mfrow=c(2,1))plot(1:N, die.all, pch=20, col = 'red', ylim = c(0,7),

ylab = "Result", xlab = "trial")plot(1:N,cumsum(six.index)/(1:1000), type='l', ylim=c(0,1), lwd=2,

ylab = "P(die = 6)", xlab = "trial")

Page 20: 認知情報基礎実習 2019.06.10 R programming 1 · SIMULATION: RANDOM NUMBERS Normal Distribution(正規分布) norm Parameters: N(数), mean(平均), sd(標準偏差)

実習:大数の法則 その3

Page 21: 認知情報基礎実習 2019.06.10 R programming 1 · SIMULATION: RANDOM NUMBERS Normal Distribution(正規分布) norm Parameters: N(数), mean(平均), sd(標準偏差)

SIMULATION: SAMPLINGCentral Limit Theorem (中央極限定理)­ 同一の分布に従う変数の独立したサンプルの平均値は、サンプル回数を増やすと、漸進的に正規分布に従う

­ 平均=オリジナルの分布の平均­ 標準偏差は=σ/√N

Distribution of Means of Uniform Distribution

Means

Density

0.2 0.4 0.6 0.8

01

23

4

Density of Actual MeansNormal Distribution

Page 22: 認知情報基礎実習 2019.06.10 R programming 1 · SIMULATION: RANDOM NUMBERS Normal Distribution(正規分布) norm Parameters: N(数), mean(平均), sd(標準偏差)

実習:中央極限定理 その1中央極限定理の検証実験(一様分布の平均値の分布)手続き1. 一回のサンプル数Nと、サンプリング回数nRepを定義 → for2. サンプル数Nの一様分布に従う乱数を生成 → runif3. 平均値を求め記録する → mean4. 2をnRep回繰り返す5. 平均ペクトルのhistgramをplot6. Densityを計算&plot

Histogram of 100000 randomly generated numbers

x

Density

-4 -2 0 2 4

0.0

0.1

0.2

0.3

0.4

actualtheoretical

Page 23: 認知情報基礎実習 2019.06.10 R programming 1 · SIMULATION: RANDOM NUMBERS Normal Distribution(正規分布) norm Parameters: N(数), mean(平均), sd(標準偏差)

実習:中央極限定理 その1中央極限定理の検証実験(一様分布の平均値の分布)手続き1. 一回のサンプル数Nと、サンプリング回数nRepを定義 → for2. サンプル数Nの一様分布に従う乱数を生成 → runif3. 平均値を求め記録する → mean4. 2をnRep回繰り返す5. 平均ペクトルのhistgramをplot6. Densityを計算&plot

N=10;nRep=10000;means<-rep(0,nRep)for (i_rep in 1:nRep) { dat<-runif(N) means[i_rep]=mean(dat)

}hist(means,nclass=50,probability=T)dens<-density(means)lines(dens,col='skyblue',lwd=3) xs=seq(-0,1,0.01)theo.dens<-dnorm(xs,mean=0.5,sd=sqrt((1/12)/N))lines(xs,theo.dens,col='orange',lwd=3,lty=2)

Page 24: 認知情報基礎実習 2019.06.10 R programming 1 · SIMULATION: RANDOM NUMBERS Normal Distribution(正規分布) norm Parameters: N(数), mean(平均), sd(標準偏差)

実習:中央極限定理 その2中央極限定理の検証実験(一様分布の平均値の分布)手続き1. 一回のサンプル数Nと、サンプリング回数nRepを定義2. N x nRepの一様分布に従う乱数を含む行列を作成 → runif, matrixを使用3. 列ごとに平均を求める → colMeansを使用4. 平均ペクトルのhistgramをplot5. Densityを計算&plot

N=10nRep=10000dat<-matrix(runif(N*nRep),nrow=N)means<-colMeans(dat)hist(means,nclass=50,probability=T)dens<-density(means)lines(dens,col='skyblue',lwd=3) xs=seq(-0,1,0.01)theo.dens<-dnorm(xs,mean=0.5,sd=sqrt((1/12)/N))lines(xs,theo.dens,col='orange',lwd=3,lty=2)

Page 25: 認知情報基礎実習 2019.06.10 R programming 1 · SIMULATION: RANDOM NUMBERS Normal Distribution(正規分布) norm Parameters: N(数), mean(平均), sd(標準偏差)

実習:最大公約数の算出Whileの例題:最大公約数(2つの数値の場合)手続き1. 2つ数値を比較する1. 大きい値をv1、小さい値をv2とする2. r=v1/v2の余りとする3. V1をV2で置き換える4. V2をrで置き換える5. rが0になるまで続ける → while

Page 26: 認知情報基礎実習 2019.06.10 R programming 1 · SIMULATION: RANDOM NUMBERS Normal Distribution(正規分布) norm Parameters: N(数), mean(平均), sd(標準偏差)

実習:最大公約数の算出Whileの例題:最大公約数

r=-99;v1=1633;v2=355while (r!=0){r=v1%%v2print(paste('v1 =',v1,', v2 = ',v2,',remainder = ',r))v1=v2v2=r

}[1] "v1 = 1633 , v2 = 355 ,remainder = 213”[1] "v1 = 355 , v2 = 213 ,remainder = 142”[1] "v1 = 213 , v2 = 142 ,remainder = 71”[1] "v1 = 142 , v2 = 71 ,remainder = 0"

Page 27: 認知情報基礎実習 2019.06.10 R programming 1 · SIMULATION: RANDOM NUMBERS Normal Distribution(正規分布) norm Parameters: N(数), mean(平均), sd(標準偏差)

SCRIPT VS. FUNCTION•Script •再利用が「面倒」•変数・定数を変更するのが面倒•すべての変数・定数がworkspaceに残る• Errorのチェックがしやすい(簡単なscriptでは)

•Function•再利用が簡単•変数・定数をinput argにすると変更が簡単•出力のみがworkspaceに残る• Error のチェックには工夫が必要•特に理由がない限りはfunctionの方がいい

Fun_name <- function(inp_args ..) {rcmd

}

Page 28: 認知情報基礎実習 2019.06.10 R programming 1 · SIMULATION: RANDOM NUMBERS Normal Distribution(正規分布) norm Parameters: N(数), mean(平均), sd(標準偏差)

SCRIPT VS. FUNCTIONx1=1x2=5x.sum=x1+x2> x1[1] 1> x2[1] 5> x.sum[1] 6

summation<-function(y1,y2){y.sum=y1+y2return(y.sum)

}y.sum <- summation(y1=1,y2=5)> y1Error: object 'y1' not found> y2Error: object 'y2' not found> y.sum[1] 6

Page 29: 認知情報基礎実習 2019.06.10 R programming 1 · SIMULATION: RANDOM NUMBERS Normal Distribution(正規分布) norm Parameters: N(数), mean(平均), sd(標準偏差)

R PROGRAMMING: FUNCTIONFunction: 入力引数、出力引数をとり、出力以外の内部で使用されて変数はローカル変数となる(出力されない)。Script: 入力引数、出力引数をとらなく、スクリプト内で使用・更新された変数はそのままR上に残される。Function&入力引数→柔軟性、再利用性が高いSyntax: fun_name<-function(arg1… ){RCOMMAND}rGCD<-function(v1,v2){ real.v1=max(c(v1,v2)) real.v2=min(c(v1,v2))repeat{

r=real.v1%%real.v2;real.v1=real.v2;real.v2=r if (r==0){

print(paste('GCD is',real.v1)); return(real.v1);break}

}}

> res<-GCD(1633,355)[1] "GCD is 71"