1

私は持っている:

x = rnorm(100)
# Partie b
z = rbinom(100,1,0.60)
# Partie c
y = 1.4 + 0.7*x - 0.5*z
# Partie d
x1 = abs(x)
y1 = abs(y)
Don<-cbind(y1,x1,z)

Don1 <- data.frame(Don)
Reg <- glm(y1~x1+z,family=poisson(link="log"),Don1)

# Partie e
#Biais de beta
Reg.cf <- coef(Reg)
biais0 = Reg.cf[1] - 1.4
biais1 = Reg.cf[2] - 0.7
biais2 = Reg.cf[3] + 0.5

そして、異なる係数を持ち、バイアスを計算し、各バイアスの平均をテキスト ファイルに入れるために、このすべてを 100 回繰り返す必要があります。

私が教えた実装方法がわかりませんrepeat{if()break;}しかし、どうすればそれを行うことができますか? ループ for を試しましたが、うまくいきませんでした。

4

1 に答える 1

3

私はこのようにそれをする傾向があります。

get.bias <- function(i) {  # the argument i is not used
  x <- rnorm(100)
  z <- rbinom(100,1,0.60)
  y <- 1.4 + 0.7*x - 0.5*z
  df <- data.frame(y1=abs(y), x1=abs(x), z)
  coef(glm(y1~x1+z,family=poisson(link="log"),df)) - c(1.4,0.7,-0.5)
}

set.seed(1)   # for reproducible example; you may want to comment out this line  
result <- t(sapply(1:100,get.bias))
head(result)
#      (Intercept)         x1           z
# [1,]   -1.129329 -0.4992925 0.076027012
# [2,]   -1.205608 -0.5642966 0.215998775
# [3,]   -1.089448 -0.5834090 0.081211412
# [4,]   -1.206076 -0.4629789 0.004513795
# [5,]   -1.203938 -0.6980701 0.201001466
# [6,]   -1.366077 -0.5640367 0.452784690

colMeans(result)
# (Intercept)          x1           z 
#  -1.1686845  -0.5787492   0.1242588 

sapply(list,fun)リストを要素単位で関数に「適用」します。たとえば、リスト内の各要素に対して関数を 1 回呼び出し、結果を行列に組み立てます。したがって、ここでget.bias(...)は 100 回呼び出され、そのたびに返される結果が行列にまとめられます。この行列には、結果ごとに 1 つのがありますが、パラメーターごとに 1 つの列を持つ行に結果が必要なので、 で転置しt(...)ます。

于 2014-11-16T19:25:43.633 に答える