R中的模拟

时间:2014-03-31 05:23:54

标签: r simulation

我正在尝试编写一个函数,例如为10个模拟的大小为n的向量获取测试统计量。我写了下面的代码,但是我没有得到我需要的结果,我该如何解决?

skw=function(n,nsims){
 t=numeric(nsims)
for (i in 1:nsims) {
     x=rnorm(n)
     t[i]=skwness(x)
     zscore=t/(6/n)
return(zscore)
}
}

其中:

skwness=function(x){
  n=length(x)
  skew.stat=(1/(n))*(1/(sd(x)^3))*(sum((x-mean(x))^3))
return(skew.stat)
}

谢谢!

1 个答案:

答案 0 :(得分:1)

你有几个问题。主要的一点是return应该在for循环之外。此外,您应将tzscore定义为矢量,并将x定义为列表。

我认为这会奏效。

旁注t在此功能中似乎是不必要的。你可以逃避使用
zscore[i] <- skwness(x[[i]])/(6/n)并一起摆脱t

skwness <- function(x){
  n <- length(x)
  skew.stat <- (1/(n))*(1/(sd(x)^3))*(sum((x-mean(x))^3))
  return(skew.stat)
}

skw <- function(n, nsims){
  t <- zscore <- numeric(nsims)
  x <- vector("list", nsims)

  for (i in 1:nsims) {
    x[[i]] <- rnorm(n)
    t[i] <- skwness(x[[i]])
    zscore[i] <- t[i]/(6/n)
  }

  return(zscore)
}

放手一搏:

> x <- rnorm(100)
> skwness(x)
[1] 0.2332121
> skw(100, 10)
 [1]  0.6643582 -1.6963196 -2.9192317 -2.7166170  4.9255001  0.0773482  3.9171435
 [8] -3.3993994 -2.4258642  0.7075989