トップ 差分 一覧 ソース 検索 ヘルプ PDF RSS ログイン

problems2016

練習問題の補足

  • 課題4の解答(訂正版) 6/11
  • 課題4のヒント
  • 課題3の解答 5/30
  • 課題2のヒント
  • 課題2の解答(Rプログラム)

課題4の解答(訂正版)

#---------
# 問題1
#---------

n <- 10^4
xi1 <- rnorm(n)

# cumsum()で累積和を計算
Xbar1 <- cumsum(xi1)/1:n

plot(Xbar1, typ = "l")

xi2 <- rt(n, 0.5)
Xbar2 <- cumsum(xi2)/1:n

plot(Xbar2, typ = "l")
#---------
# 問題2
#---------

# 2.1

rnd <- matrix(rnorm(600), 6, 100)

# 空のベクトル
mui <- c()
Si <- c()

# 繰り返し計算
for (i in 1:100) {
  mui[i] <- mean(rnd[, i]) # i列の平均
  Si[i] <- sum((rnd[, i]-mui[i])^2) # i列の平均からの乖離の二乗和
}

# 2.2

par(mfrow = c(2, 1))
hist(Si, freq = F)

dchisq5 <- function(x) dchisq(x, 5)
curve(dchisq5, 0, 15)

# 2.3

sigma_muS <- sum(mui*(Si-5))/100
print(sigma_muS)

# 2.4

zi <- mui/sqrt(Si/6/5)

par(mfrow = c(2, 1))
hist(zi , freq = F)

t5 <- function(x) dt(x, 5)
curve(t5 , -3, 3)

課題4のヒント

累積和は

cumsum()

で計算できる。

x <- cumsum(1:5)
y <- 1:5
x/y

の結果を試してみよ。

Siとカイ2乗分布の比較

par(mfrow = c(2, 1))
hist(Si, freq = F)

dchisq5 <- function(x) dchisq(x, 5)
curve(dchisq5, 0, 15)

ziとt分布の比較

par(mfrow = c(2, 1))
hist(zi , freq = F)

t5 <- function(x) dt(x, 5)
curve(t5 , -3, 3)

課題3の解答

#---------
# 問題2
#---------

X <- 1:6
P <- rep(1/6, 6)

mu <- sum(X*P)
print(mu)

sigma2 <- sum((X-mu)^2*P)
print(sigma2)

#---------
# 問題3
#---------

# 3.2

#平均
mux <- 1*0.5

# 分散
sigma2x <- (1-mux)^2*0.5 + (-mux)^2*0.5
print(sigma2x)

# 3.3

# 平均
muxy <- (1+1)/3 + (1+0)/6 + (0+1)/6 + (0+0)/3
print(muxy)

# 分散
sigma2xy <- (2-muxy)^2/3 + (1-muxy)^2/6*2 + (0-muxy)^2/3
print(sigma2xy)

# XとYは独立ではない。以下からも分かる:
# V(X+Y) < V(X) + V(Y)

課題2のヒント

問題1

確率分布のp分位数(全体をp : (1-p) に分割する閾値)を求めるには、分位関数(quantile function)を用いる。

標準正規分布の分位関数

qnorm()
curve(qnorm, 0, 1)

で、qnorm()の形状が確認できる。横軸は割合なので[0, 1]。縦軸がp分位数。

正規分布の0.05分位数

q(0.05)

正規分布の0.95分位数

q(0.95)

z = (x-mu)/sigmaの逆、つまりx=sigma*z+muを使って平均周りで対称に90% の人の身長が含まれる区間を求める。

以下のようなグラフを書いたとき、青線と赤線と黒線に囲まれた部分の面積が0.05になる。

curve(dnorm, -3, 3, col = "blue")
abline(h = 0)
abline(v = qnorm(0.025), col = "red")

問題2

Excelを使って定義どおりに計算するのが手っ取り早い。

問題3

R では、n 個の独立な一様乱数を

runif(n)

で生成できる(n には整数を入れる)。10 × 5 列に整形して\testdata31.csv" という名前でcsv ファイル(EXCEL で編集できるファイル)として出力するには

write.csv(matrix(runif(50), 10, 5), "testdata31.csv")

とすればよい。

課題2の解答(Rプログラム) 5/17

#---------
# 問題1
#---------

mu1 <- 170.9
sigma1 <- 5.8

c(qnorm(0.05)*sigma1+mu1, qnorm(0.95)*sigma1+mu1)

mu2 <- 157.9
sigma2 <- 5.5

c(qnorm(0.05)*sigma2+mu2, qnorm(0.95)*sigma2+mu2)

#---------
# 問題2
#---------

x <- c(700000000, 150000000, 100000, 10000000, 1000000, 50000, 3000, 300, 700000, 0)

z <- c(27, 54, 5373, 540, 5400, 54000, 5400000, 54000000, 10800, 480523806)

mu <- sum(x * z)/sum(z)
print(mu)

sigmasq <- sum((x-mu)^2 * z)/sum(z)
print(sigmasq)

sigma <- sqrt(sigmasq)
print(sigma)

#---------
# 問題3
#---------

# 3.1

rndmat <- matrix(runif(50), 10 ,5) 

mean5 <- c()
var5 <- c()

for(i in 1:5) {
  mean5[i] <- mean(rndmat[, i])
  var5[i] <- var(rndmat[, i])
}

print(mean5)
print(var5)

# 3.2

rndvec <- round(runif(100))

mean(rndvec)
var(rndvec)