전산통계학, 2019 기말고사

코딩 공부/R-전산 통계학 2020. 2. 25. 01:47
반응형

해당 답에 있는 이름은 지정되어 있는 답안이 아닌,

다양한 여러가지의 답들 중에 가장 깔끔한 답을 적어주셨던 당시의 선배님들 이름이니, 따로 크게 연연해하지 않으시길 바랍니다.


1번) 지정한 영역에 대해서 삼중적분을 실행한 값을 구하세요, f:x*y^2*z^3 ,C:0<x<y<z<1 (5점)

# 1
library(pracma)


sg=function(x,y,z) x*y^2*z^3
xmin=0
xmax=1
ymin=function(x) x
ymax=1
zmin=function(x,y) y
zmax=1


integral3(sg,xmin,xmax,ymin,ymax,zmin,zmax)


2번) 교재의 주어진 데이터를 이용해서 "y=Beta0 + Beta1*x (x : fixed)" 에 대해서 x=1.7 일 때의 다음 값들을 구하세요 (5점)

(beta 0 , beta 1, s^2, "C.I for y=Beta0 + Beta1*(1.7)", "C.I for Y|x=1.7") 이 값들을 프로그래밍의 값으로만 나오게 하면 됩니다

# 2
x=c(1.35,1.9,1.7,1.8,1.3,2.05,1.6,1.8,1.85,1.4)
y=c(17.9,16.5,16.4,16.8,18.8,15.5,17.5,16.4,15.9,18.3)
#beta0+beta1x (x:fixed) - CI
yj=function(x,alpha,x0){
  n=length(x)
  sxx=sum((x-mean(x))^2)
  b1=((n*sum(x*y))-(sum(x)*sum(y)))/(n*sum(x^2)-(sum(x))^2)
  b0=mean(y)-b1*mean(x)
  syy=sum((y-mean(y))^2)
  sxy=sum(x*y)-n*mean(x)*mean(y)
  sse=syy-b1*sxy
  s2=sse/(n-2)
  s=sqrt(s2)
  df=n-2
  
  L1=(b0+b1*x0)-qt(alpha/2,df,lower.tail = F)*s*sqrt(1/n+((x0-mean(x))^2)/sxx)
  L2=(b0+b1*x0)+qt(alpha/2,df,lower.tail = F)*s*sqrt(1/n+((x0-mean(x))^2)/sxx)
  CI=c(L1,L2)
  
  L3=(b0+b1*x0)-qt(alpha/2,df,lower.tail = F)*s*sqrt(1/n+((x0-mean(x))^2)/sxx+1)
  L4=(b0+b1*x0)+qt(alpha/2,df,lower.tail = F)*s*sqrt(1/n+((x0-mean(x))^2)/sxx+1)
  PI=c(L3,L4)
  
  cat("b0=",b0,"b1=",b1,"s^2=",s2,"CI for beta0+beta1*1.7=",CI,"CI for Y|x=1.7",PI)
}
yj(x,0.1,1.7)


3번) 문제는 두 개입니다

(a). 주어진 데이터를 이용해서 "Friedman Test" 를 직접 코딩하여서 p-값을 도출하고, "aov (R 자체함수)" 를 이용해서 p-값을 도출하세요, 따라서 두 개의 p-값을 구하면 됩니다 (7점)

(b). 위에서 구한 "p-값(Friedman) 에서 p-값(aov) 을 뺀 값"을 구하세요 (3점)

# 3
x<-c(9.1,13.4,15.6,11.0,12.7,
     17.1,20.3,24.6,18.2,19.8,
     20.8,28.3,23.7,21.4,25.1,
     11.8,16.0,16.2,14.1,15.8)
A<-gl(4,5)
B<-factor(rep(1:5,len=20))
Sj<-function(x){
  a<-length(levels(A))
  b<-length(levels(B))
  n<-length(x)
  s<-c();g<-matrix(nrow=b,ncol=a);m<-c()
  s<-tapply(x,B,rank)
  for(i in 1:b){
    for(j in 1:a){
      g[i,j]<-s[[i]][j] 
    }
  }
  m<-apply(g,2,sum)
  sstar<-(12/(b*a*(a+1)))*sum(m^2)-3*b*(a+1)
  pvalue1<-pchisq(sstar,(a-1),lower.tail = F)
  pvalue2<-summary(aov(x~A+B))[[1]][[5]][[1]]
  cat("pvalue1(friedman test) is",pvalue1,"pvalue2(aov) is ",pvalue2,"\n So pvalue1 - pvalue2 is ",pvalue1-pvalue2)
}
Sj(x)


4번) 제시된 categorical 데이터를 'chi-squared goodness test' 혹은 'independent test' 혹은 'homogeneity' 중에서 올바른 테스트를 통해 p-값을 도출하세요 (5점)

# 4
# DATA
data <- matrix(c(75, 160, 100, 15, 60, 115, 65, 10, 65, 175, 135, 25), nrow = 4, byrow = F,
               dimnames = list("Injury" = c("None", "Minor", "Major", "Death"),
                                "Restraint" = c("seat belt","both", "None")) )

indi <- function (x) {
  r <-nrow(x) ; c <- ncol(x)
  
  # df
  df <- (r-1)*(c-1)
  ni. <- c() ; n.j <- c()
  for (i in 1:r) {ni.[i] <- sum(x[i,])}
  for (j in 1:c) {n.j[j] <- sum(x[,j])}
  
  # expected
  E <- matrix(nr=r, nc=c)
  for (i in 1:r) {
    for (j in 1:c) {
      E[i,j] <- (ni.[i]*n.j[j])/sum(x)
    }
  }
  # t.s
  su <- 0
  for (i in 1:r) {
    for (j in 1:c) {
      su <- su+ (x[i,j]-E[i,j])^2 /E[i,j]
    }
  }
  chistar <- sum(su)
  pv <- pchisq(chistar,df=df,lower.tail = F)
  cat ("p-value =",pv)
}
indi(data)

TAG