User Tools

Site Tools


sampling_distribution_in_r

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
sampling_distribution_in_r [2023/11/13 08:51] hkimscilsampling_distribution_in_r [2024/03/20 14:15] (current) – [Sampling distribution in R e.g. 1] hkimscil
Line 1: Line 1:
 ====== Sampling distribution in R e.g. 1 ====== ====== Sampling distribution in R e.g. 1 ======
 <code> <code>
-n.ca <- 100000 +n.ajstu <- 100000 
-mean.ca <- 70 +mean.ajstu <- 100 
-sd.ca <- 15 +sd.ajstu <- 10
-set.seed(2020) +
-ca <- rnorm(n.ca, mean=mean.ca, sd=sd.ca) +
-ca <- round(ca, 0) +
-hist(ca, xlab="ca", main="ca index", freq=F) +
-curve(dnorm(x, mean=mean(ca), sd=sd(ca)), add=TRUE, col="blue"+
-abline(v=mean.ca,lwd=3,lty=2, col="red"+
-summary(ca) +
-mu <- round(mean(ca)) +
-sigma <- round(sd(ca)) +
-mu +
-sigma +
-</code>+
  
-<code> +set.seed(1024
-rnorm2 <- function(n,mean,sd) { mean+sd*scale(rnorm(n)) } +ajstu <- rnorm2(n.ajstu, mean=mean.ajstu, sd=sd.ajstu)
-n.ca <- 100000 +
-mean.ca <- 70 +
-sd.ca <- 15 +
-set.seed(101+
-ca <- rnorm2(n.ca, mean=mean.ca, sd=sd.ca) +
-ca <- round(ca, 0) +
-hist(ca, xlab="ca", main="ca index", freq=F) +
-curve(dnorm(x, mean=mean(ca), sd=sd(ca)), add=TRUE, col="blue"+
-abline(v=mean.ca,lwd=3,lty=2, col="red"+
-summary(ca) +
-mu <- round(mean(ca)) +
-sigma <- round(sd(ca)) +
-mu +
-sigma +
-</code>+
  
-<code> +mean(ajstu) 
-> summary(ca+sd(ajstu
-   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.  +var(ajstu)
-   7.00   60.00   70.00   69.96   80.00  132.00  +
->  +
-</code>+
  
-최소값 70 +iter <- 10000 # # of sampling 
-최대값 132+
  
-대강의 아이디어+n.4 <- 4 
 +means4 <- rep (NA, iter) 
 +for(i in 1:iter){ 
 +  means4[i] = mean(sample(ajstu, n.4)) 
 +}
  
-  * 위의 점수가 전국 고등학교 2년생의 (모집단) 수학점수라고 가정을 하자그리고, 이 모집단의 수학점수 평균은 70, 표준편차는 15임을 알고 있으며 최소값과 최대값 또한 알고 있다 (각각 70132+n.25 <- 25 
-  * 그런데 내가 수학을 학생들에게 (25명가르치는데 그 방법이 남달라서 효과가 좋다는 것을 확신한고 있다고 하자.  +means25 <- rep (NAiter
-  * 이를 증명하는데 가장 확실하게 느낄수 있는 (?) 방법은 내 학생의 점수가 위의 모집단 점수의 최대값인 132점을 넘는 것이다. +for(i in 1:iter){ 
-  * 132점을 넘는 학생은 모집단에 속한 학생이 아니라 다른 모집단에 (나의 교육방법을 교수받은 모집단속한 학생이라고 생각할 수 있는 것이다.  +  means25[i] = mean(sample(ajstu, n.25)
-  * 내가 가르친 학생들의 평균점수가 132점을 모두 넘는다면 한 학생이 아니라 나의 집단이 (샘플이) 모집단에 속하지 않는 특별한 집단이라고 생각할 수 있다. +}
  
-  * 그러나 현실적으로 이렇게 판단하기에는 넘어야 할 점수가 너무 크다+n.100 <- 100 
 +means100 <- rep (NA, iter) 
 +for(i in 1:iter){ 
 +  means100[i] = mean(sample(ajstu, n.100)) 
 +}
  
- +n.400 <- 400 
-{{:pasted:20200412-121855.png}} +means400 <- rep (NA, iter)
-===== n=4 ===== +
- +
-<code> +
-iter <- 10000 +
-<- 4 +
-means <- rep (NA, iter)+
 for(i in 1:iter){ for(i in 1:iter){
-  means[i] = mean(sample(ca, n))+  means400[i] = mean(sample(ajstu, n.400))
 } }
-m <- mean(means) 
-sd1 <- sd(means) 
-se <- sigma/sqrt(n) 
  
-sd2 <- 2*sd1 +n.900 <- 900 
-sd3 <- 3*sd1 +means900 <- rep (NA, iter)
- +
-+
-sd1 +
-se +
- +
-sd2 +
-sd3 +
-max(means) +
-min(means) +
- +
-h4 <- hist(means) +
-hist(means, main="Dist. of means, n=4", xlim=c(40,100), freq=F) +
-curve(dnorm(x, mean=m, sd=sd1), col="blue", add=TRUE) +
-abline(v = m, lty=2, lwd=3, col="blue"+
-abline(v = mean(ca), lty=2, lwd=3, col="red"+
-abline(v = (m - sd1), lty=2, lwd=1, col="blue"+
-abline(v = (m - sd2), lty=2, lwd=1, col="blue"+
-abline(v = (m - sd3), lty=2, lwd=1, col="blue"+
-abline(v = (m + sd1), lty=2, lwd=1, col="blue"+
-abline(v = (m + sd2), lty=2, lwd=1, col="blue"+
-abline(v = (m + sd3), lty=2, lwd=1, col="blue"+
-</code> +
-{{:pasted:20200414-213112.png}} +
-<code> +
-> sd(means) +
-[1] 7.495025 +
- +
-> s.ca <- sd(ca)/sqrt(n) +
-> s.ca +
-[1] 7.477513 +
-</code> +
- +
-===== n = 36 ===== +
- +
-<code> +
-iter <- 10000 +
-<- 36 +
-means <- rep (NA, iter)+
 for(i in 1:iter){ for(i in 1:iter){
-  means[i] = mean(sample(ca, n))+  means900[i] = mean(sample(ajstu, n.900))
 } }
-m <- mean(means) 
-sd1 <- sd(means) 
-se <- sigma/sqrt(n) 
  
-sd2 <- 2*sd1 +n.1600 <- 1600 
-sd3 <- 3*sd1 +means1600 <- rep (NA, iter)
- +
-+
-sd1 +
-se +
- +
-sd2 +
-sd3 +
-max(means) +
-min(means) +
- +
-h36 <- hist(means) +
-hist(means, main="Dist. of means, n=36", xlim=c(60,80), freq=F) +
-curve(dnorm(x, mean=m, sd=sd1), col="blue", add=TRUE) +
-abline(v = m, lty=2, lwd=3, col="blue"+
-abline(v = mean(ca), lty=2, lwd=3, col="red"+
-abline(v = (m - sd1), lty=2, lwd=1, col="blue"+
-abline(v = (m - sd2), lty=2, lwd=1, col="blue"+
-abline(v = (m - sd3), lty=2, lwd=1, col="blue"+
-abline(v = (m + sd1), lty=2, lwd=1, col="blue"+
-abline(v = (m + sd2), lty=2, lwd=1, col="blue"+
-abline(v = (m + sd3), lty=2, lwd=1, col="blue"+
- +
-</code> +
- +
-{{:pasted:20200414-211706.png}} +
-===== n = 100 ===== +
-<code> +
-iter <- 10000 +
-<- 100 +
-means <- rep (NA, iter)+
 for(i in 1:iter){ for(i in 1:iter){
-  means[i] = mean(sample(ca, n))+  means1600[i] = mean(sample(ajstu, n.1600))
 } }
-m <- mean(means) 
-sd1 <- sd(means) 
-se <- sigma/sqrt(n) 
  
-sd2 <- 2*sd1 +n.2500 <- 2500 
-sd3 <- 3*sd1 +means2500 <- rep (NA, iter)
- +
-+
-sd1 +
-se +
- +
-sd2 +
-sd3 +
-max(means) +
-min(means) +
- +
- +
-h100 <- hist(means) +
-hist(means, main="Dist. of means, n=100", xlim=c(60,80), freq=F) +
-curve(dnorm(x, mean=m, sd=sd1), col="blue", add=TRUE) +
-abline(v = m, lty=2, lwd=3, col="blue"+
-abline(v = mean(ca), lty=2, lwd=3, col="red"+
-abline(v = (m - sd1), lty=2, lwd=1, col="blue"+
-abline(v = (m - sd2), lty=2, lwd=1, col="blue"+
-abline(v = (m - sd3), lty=2, lwd=1, col="blue"+
-abline(v = (m + sd1), lty=2, lwd=1, col="blue"+
-abline(v = (m + sd2), lty=2, lwd=1, col="blue"+
-abline(v = (m + sd3), lty=2, lwd=1, col="blue"+
-</code> +
-{{:pasted:20200414-211931.png}} +
-===== n = 400 ===== +
-<code> +
-iter <- 10000 +
-<- 400 +
-means <- rep (NA, iter)+
 for(i in 1:iter){ for(i in 1:iter){
-  means[i] = mean(sample(ca, n))+  means2500[i] = mean(sample(ajstu, n.2500))
 } }
-m <- mean(means) 
-sd1 <- sd(means) 
-se <- sigma/sqrt(n) 
  
-sd2 <- 2*sd1 +h4 <- hist(means4) 
-sd3 <- 3*sd1+h25 <- hist(means25) 
 +h100 <- hist(means100) 
 +h400 <- hist(means400) 
 +h900 <- hist(means900) 
 +h1600 <- hist(means1600) 
 +h2500 <- hist(means2500)
  
-m 
-sd1 
-se 
  
-sd2 +plot(h4, ylim=c(0,3000), col="red") 
-sd3 +plot(h25, add = T, col="blue"
-max(means+plot(h100, add = T, col="green") 
-min(means)+plot(h400, add = T, col="grey"
 +plot(h900, add = T, col="yellow")
  
-h400 <- hist(means) 
-hist(means, main="Dist. of means, n=400", xlim=c(60,80), freq=F) 
-curve(dnorm(x, mean=m, sd=sd1), col="blue", add=TRUE) 
-abline(v = m, lty=2, lwd=3, col="blue") 
-abline(v = mean(ca), lty=2, lwd=3, col="red") 
-abline(v = (m - sd1), lty=2, lwd=1, col="blue") 
-abline(v = (m - sd2), lty=2, lwd=1, col="blue") 
-abline(v = (m - sd3), lty=2, lwd=1, col="blue") 
-abline(v = (m + sd1), lty=2, lwd=1, col="blue") 
-abline(v = (m + sd2), lty=2, lwd=1, col="blue") 
-abline(v = (m + sd3), lty=2, lwd=1, col="blue") 
-</code> 
-{{:pasted:20200414-212039.png}} 
-===== n = 900 ===== 
  
-<code> +sss <- c(4,25,100,400,900,1600,2500) # sss sample sizes 
-iter <- 10000 +ses <- rep (NA, length(sss)# std errors 
-<- 900 +for(i in 1:length(sss)){ 
-means <- rep (NA, iter+  ses[i] = sqrt(var(ajstu)/sss[i])
-for(i in 1:iter){ +
-  means[i] = mean(sample(ca, n))+
 } }
-m <- mean(means) 
-sd1 <- sd(means) 
-se <- sigma/sqrt(n) 
  
-sd2 <- 2*sd1 +ses 
-sd3 <- 3*sd1+se.1 <- ses 
 +se.2 <- ses 
  
-+lower.s2 <- mean(ajstu)-se.2 
-sd1 +upper.s2 <- mean(ajstu)+se.2 
-se+data.frame(cbind(sss, ses, lower.s2, upper.s2))
  
-sd2 
-sd3 
-max(means) 
-min(means) 
- 
- 
-hist(means, main="Dist. of means, n=900", xlim=c(60,80), freq=F) 
-curve(dnorm(x, mean=m, sd=sd1), col="blue", add=TRUE) 
-abline(v = m, lty=2, lwd=3, col="blue") 
-abline(v = mean(ca), lty=2, lwd=3, col="red") 
-abline(v = (m - sd1), lty=2, lwd=1, col="blue") 
-abline(v = (m - sd2), lty=2, lwd=1, col="blue") 
-abline(v = (m - sd3), lty=2, lwd=1, col="blue") 
-abline(v = (m + sd1), lty=2, lwd=1, col="blue") 
-abline(v = (m + sd2), lty=2, lwd=1, col="blue") 
-abline(v = (m + sd3), lty=2, lwd=1, col="blue") 
 </code> </code>
-{{:pasted:20200414-212154.png}} 
  
 <code> <code>
-xmin <- 40 +# n =1600 일 경우에  
-xmax <- 100 +# sample의 평균이 100.15보다 작을  
-ymax <- 2500 +# 확률은 어떻게 구해야 할까? 
-plot(h4, col=rgb(0,0,1,1/4), xlim=c(xmin,xmax), ylim=c(0,ymax))  first histogram + 
-plot(h36col=rgb(1/5,1,0,1/4), xlim=c(xmin,xmax), ylim=c(0,ymax), add=T second +# n 1600 일 경우에  
-plot(h100, col=rgb(2/5,0,1,1/4), xlim=c(xmin,xmax), ylim=c(0,ymax), add=T)  +sampling distribution은  
-plot(h400, col=rgb(3/5,1,0,1/4), xlim=c(xmin,xmax), ylim=c(0,ymax), add=T+# Xbar ~ N(100var(ajstu)/n.1600) 
-plot(h900col=rgb(4/5,0,1,1/4), xlim=c(xmin,xmax), ylim=c(0,ymax), add=T   +# 그리고위에서 standard error값은  
 +# sqrt(var(ajstu)/n.1600) 
 +이것을 standard error라고 부른다 
 +# 따라서 
 +se.1600 <- sqrt(var(ajstu)/n.1600
 +pnorm(100.15mean(ajstu), se.1600)
 </code> </code>
-{{:pasted:20200414-213151.png}} 
  
 +{{:pasted:20240319-120709.png}}
 ===== Sampling distribution in proportion in R ===== ===== Sampling distribution in proportion in R =====
  
Line 350: Line 185:
  
  
- 
- 
- 
-====== Sampling distribution in R e.g. 2 ====== 
-아주대학교 학생의 나이에 대한 모집단 정보가 있다고 하자. 아주대학교 학생의 학생 수는 모두 10,000명이라고 한다 (N = 10000). 데이터는 다음과 같이 구하여 r에 저장한다. 
-<code> 
-n.ajstu <- 100000 
-mean.ajstu <- 24.6 
-sd.ajstu <- 2 
-set.seed(1024) 
-ajstu <- rnorm(n.ajstu, mean=mean.ajstu, sd=sd.ajstu) 
-hist(ajstu,xlab="age", main="dist. of ajou stu", freq=F) 
-abline(v=mean(ajstu), lwd=3, lty=2, col="red") 
-curve(dnorm(x, mean=mean(ajstu), sd=sd(ajstu)), add=TRUE, col="blue") 
-</code> 
-{{:pasted:20200414-205807.png?800}} 
-===== n = 4 ===== 
-<code> 
-iter <- 10000 
-n <- 4 
-means <- rep (NA, iter) 
-for(i in 1:iter){ 
-  means[i] = mean(sample(ajstu, n)) 
-} 
- 
-mean(ajstu) 
-m <- mean(means) 
-sd1 <- sd(means) ## sdev of the dist. of sample means 
-sd1 
-sd(ajstu)/sqrt(4) 
-sd2 <- 2*sd(means)  
-sd3 <- 3*sd(means)  
-max(means) 
-min(means) 
- 
-h4 <- hist(means) 
-hist(means, main="Dist. of means, n=4", xlim=c(21,29), freq=F) 
-curve(dnorm(x, mean=m, sd=sd1), col="blue", add=TRUE) 
-abline(v = m, lty=2, lwd=3, col="blue") 
-abline(v = mean(ajstu), lty=2, lwd=3, col="red") 
-abline(v = (m - sd1), lty=2, lwd=1, col="blue") 
-abline(v = (m - sd2), lty=2, lwd=1, col="blue") 
-abline(v = (m - sd3), lty=2, lwd=1, col="blue") 
-abline(v = (m + sd1), lty=2, lwd=1, col="blue") 
-abline(v = (m + sd2), lty=2, lwd=1, col="blue") 
-abline(v = (m + sd3), lty=2, lwd=1, col="blue") 
-</code> 
- 
-{{:pasted:20200414-205926.png}} 
-===== n = 36 ===== 
-<code> 
-n <- 36 
-means <- rep (NA, iter) 
-for(i in 1:iter){ 
-  means[i] = mean(sample(ajstu, n)) 
-} 
- 
-mean(ajstu) 
-m <- mean(means) 
-m 
-sd1 <- sd(means) ## sdev of the dist. of sample means 
-sd1 
-sd(ajstu)/sqrt(n) 
-sd2 <- 2*sd(means)  
-sd3 <- 3*sd(means)  
-max(means) 
-min(means) 
- 
-h36 <- hist(means) 
-hist(means, main="Dist. of means, n=36", xlim=c(21,29), freq=F) 
-curve(dnorm(x, mean=m, sd=sd1), col="blue", add=TRUE) 
-abline(v = m, lty=2, lwd=3, col="blue") 
-abline(v = mean(ajstu), lty=2, lwd=3, col="red") 
-abline(v = (m - sd1), lty=2, lwd=1, col="blue") 
-abline(v = (m - sd2), lty=2, lwd=1, col="blue") 
-abline(v = (m - sd3), lty=2, lwd=1, col="blue") 
-abline(v = (m + sd1), lty=2, lwd=1, col="blue") 
-abline(v = (m + sd2), lty=2, lwd=1, col="blue") 
-abline(v = (m + sd3), lty=2, lwd=1, col="blue") 
-</code> 
-{{:pasted:20200414-210501.png}} 
-===== n = 100 ===== 
-<code> 
-n <- 100 
-means <- rep (NA, iter) 
-for(i in 1:iter){ 
-  means[i] = mean(sample(ajstu, n)) 
-} 
- 
-mean(ajstu) 
-m <- mean(means) 
-m 
-sd1 <- sd(means) ## sdev of the dist. of sample means 
-sd1 
-sd(ajstu)/sqrt(n) 
-sd2 <- 2*sd(means)  
-sd3 <- 3*sd(means)  
-max(means) 
-min(means) 
- 
-h100 <- hist(means) 
-hist(means, main="Dist. of means, n=100", xlim = c(20, 30), freq=F) 
-curve(dnorm(x, mean=m, sd=sd1), col="blue", add=TRUE) 
-abline(v = m, lty=2, lwd=3, col="blue") 
-abline(v = mean(ajstu), lty=2, lwd=3, col="red") 
-abline(v = (m - sd1), lty=2, lwd=1, col="blue") 
-abline(v = (m - sd2), lty=2, lwd=1, col="blue") 
-abline(v = (m - sd3), lty=2, lwd=1, col="blue") 
-abline(v = (m + sd1), lty=2, lwd=1, col="blue") 
-abline(v = (m + sd2), lty=2, lwd=1, col="blue") 
-abline(v = (m + sd3), lty=2, lwd=1, col="blue") 
-</code> 
-<code> 
-> mean(ajstu) 
-[1] 24.60763 
-> m <- mean(means) 
-> m 
-[1] 24.60779 
-> sd1 <- sd(means) ## sdev of the dist. of sample means 
-> sd1 
-[1] 0.1983636 
-> sd(ajstu)/sqrt(n) 
-[1] 0.1997546 
-> sd2 <- 2*sd(means)  
-> sd3 <- 3*sd(means)  
-> max(means) 
-[1] 25.29987 
-> min(means) 
-[1] 23.8735 
-</code> 
- 
-{{:pasted:20200414-210432.png}} 
-===== n = 400 ===== 
-<code> 
-n <- 400 
-means <- rep (NA, iter) 
-for(i in 1:iter){ 
-  means[i] = mean(sample(ajstu, n)) 
-} 
- 
-mean(ajstu) 
-m <- mean(means) 
-m 
-sd1 <- sd(means) ## sdev of the dist. of sample means 
-sd1 
-sd(ajstu)/sqrt(n) 
-sd2 <- 2*sd(means)  
-sd3 <- 3*sd(means)  
-max(means) 
-min(means) 
- 
-h400 <- hist(means) 
-hist(means, main="Dist. of means, n=400", xlim = c(21,29), freq=F) 
-curve(dnorm(x, mean=m, sd=sd1), col="blue", add=TRUE) 
-abline(v = m, lty=2, lwd=3, col="blue") 
-abline(v = mean(ajstu), lty=2, lwd=3, col="red") 
-abline(v = (m - sd1), lty=2, lwd=1, col="blue") 
-abline(v = (m - sd2), lty=2, lwd=1, col="blue") 
-abline(v = (m - sd3), lty=2, lwd=1, col="blue") 
-abline(v = (m + sd1), lty=2, lwd=1, col="blue") 
-abline(v = (m + sd2), lty=2, lwd=1, col="blue") 
-abline(v = (m + sd3), lty=2, lwd=1, col="blue") 
-</code> 
-<code> 
-> mean(ajstu) 
-[1] 24.60763 
-> m <- mean(means) 
-> m 
-[1] 24.60927 
-> sd1 <- sd(means) ## sdev of the dist. of sample means 
-> sd1 
-[1] 0.09943006 
-> sd(ajstu)/sqrt(n) 
-[1] 0.09987731 
-> sd2 <- 2*sd(means)  
-> sd3 <- 3*sd(means)  
-> max(means) 
-[1] 24.95824 
-> min(means) 
-[1] 24.28413 
-</code> 
-{{:pasted:20200414-210359.png}} 
- 
-===== n = 900 ===== 
-<code> 
-n <- 900 
-means <- rep (NA, iter) 
-for(i in 1:iter){ 
-  means[i] = mean(sample(ajstu, n)) 
-} 
- 
-mean(ajstu) 
-m <- mean(means) 
-m 
-sd1 <- sd(means) ## sdev of the dist. of sample means 
-sd1 
-sd(ajstu)/sqrt(n) 
-sd2 <- 2*sd(means)  
-sd3 <- 3*sd(means)  
-max(means) 
-min(means) 
- 
-h900 <- hist(means) 
-hist(means, main="Dist. of means, n=900", xlim = c(21,29), freq=F) 
-curve(dnorm(x, mean=m, sd=sd1), col="blue", add=TRUE) 
-abline(v = m, lty=2, lwd=3, col="blue") 
-abline(v = mean(ajstu), lty=2, lwd=3, col="red") 
-abline(v = (m - sd1), lty=2, lwd=1, col="blue") 
-abline(v = (m - sd2), lty=2, lwd=1, col="blue") 
-abline(v = (m - sd3), lty=2, lwd=1, col="blue") 
-abline(v = (m + sd1), lty=2, lwd=1, col="blue") 
-abline(v = (m + sd2), lty=2, lwd=1, col="blue") 
-abline(v = (m + sd3), lty=2, lwd=1, col="blue")</code> 
- 
-{{:pasted:20200414-210310.png}} 
- 
-<code> 
-xmin <- 21 
-xmax <- 28 
-ymax <- 3000 
-plot(h4, col=rgb(0,0,1,1/4), xlim=c(xmin, xmax), ylim=c(0,ymax))  # first histogram 
-plot(h36, col=rgb(1/5,1,0,1/4), xlim=c(xmin, xmax), ylim=c(0,ymax), add=T)  # second 
-plot(h100, col=rgb(2/5,0,1,1/4), xlim=c(xmin, xmax), ylim=c(0,ymax), add=T)  
-plot(h400, col=rgb(3/5,1,0,1/4), xlim=c(xmin, xmax), ylim=c(0,ymax), add=T) 
-plot(h900, col=rgb(4/5,0,1,1/4), xlim=c(xmin, xmax), ylim=c(0,ymax), add=T)     
-</code> 
- 
-{{:pasted:20200414-210634.png}} 
- 
- 
-<code> 
-n <- 10000 
-means <- rep (NA, iter) 
-for(i in 1:iter){ 
-    means[i] = mean(sample(ajstu, n)) 
-} 
-h10000 <- hist(means) 
-hist(means, main="Dist. of means, n=100000") 
-abline(v = mean(means), lty=2, lwd=3, col="blue") 
-abline(v = mean(ajstu), lty=2, lwd=3, col="red") 
-mean(ajstu) 
-mean(means) 
-max(means) 
-min(means) 
-</code> 
  
  
sampling_distribution_in_r.1699833085.txt.gz · Last modified: 2023/11/13 08:51 by hkimscil

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki