繁体   English   中英

R中的模拟

[英]Simulations in R

我正在尝试编写一个函数,以便在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)
}

谢谢!

您有几个问题。 最主要的是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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM