在 R 中为正态分布设置种子

Set seed in R for Normal distribution

我正在为正态分布、偏正态分布和偏重分布做循环。但是,我只能设法使用相同的 set.seed 获得正常和偏斜正常的 I 型错误。当我运行偏重的编码时,我得到NA,并且在编码中计算的数据中也有一些缺失值。我怎样才能解决这个问题?无论如何,我已经尝试了很多值而不是 val,但它并没有让我对正常和偏斜正常感到满意,因为我总是得到零。

asim<-10000
pv<- rep(NA,asim)

for (val in 1:asim){
  
  set.seed(val)
  
  t=3
  n1=10
  n2=10
  n3=10
  N=n1+n2+n3
  
  data1<-rnorm(n1,0,1)
  data2<-rnorm(n2,0,1)
  data3<-rnorm(n3,0,1)
  
  # SKEWED HEAVY
  
  G=0.5
  h=0.5 # h=0 if skewed normal
  
  y1=((exp(G*data1)-1)/G)*(exp((h*data1^2)/2))
  y2=((exp(G*data2)-1)/G)*(exp((h*data2^2)/2))
  y3=((exp(G*data3)-1)/G)*(exp((h*data3^2)/2))
  
       g1=sort(y1)
  g2=sort(y2)
  g3=sort(y3)
  
  
  ybar1<-mean(g1)
  ybar2<-mean(g2)
  ybar3<-mean(g3)
  
  
  #BIWEIGHT
  
  med1=median(g1)
  med2=median(g2)
  med3=median(g3)
  
  mad=mad(c(g1,g2,g3))
  
  u1=(g1-med1)/(9*mad)
  u2=(g2-med2)/(9*mad)
  u3=(g3-med3)/(9*mad)
  
  idx1<- which(abs(u1)<1)
  idx2<- which(abs(u2)<1)
  idx3<- which(abs(u3)<1)
  
  
  #create empty list
  
  num1=c()
  num2=c()
  num3=c()
  den1=c()
  den2=c()
  den3=c()
  nume1=c()
  nume2=nume3=deno1=deno2=deno3=c()
  
  
  for(z in idx1){
    num1[z] = ((g1[z]-med1)^2)*((1-(u1[z]^2))^4)
    den1[z] = ((1-(u1[z]^2))*(1-5*(u1[z]^2)))
  }
  
  for(j in idx2){
    num2[j] = ((g2[j]-med2)^2)*((1-(u2[j]^2))^4)
    den2[j] = ((1-(u2[j]^2))*(1-5*(u2[j]^2)))
  }
  
  for(k in idx3){
    num3[k] = ((g3[k]-med3)^2)*((1-(u3[k]^2))^4)
    den3[k] = ((1-(u3[k]^2))*(1-5*(u3[k]^2)))
  }
  
  print(num1)

 }

打印num1后,有NA值

我认为您可能希望在代码审查中 post,但我的最大建议是更多地依赖 lapply 而不是按顺序命名的对象(例如 num1, num2, num3.

我假设在此结束时,您需要模拟的结果。为此,我们将在每次模拟中使用 lapply 制作一个列表。我在循环之外添加了一些常量;我们需要在每次模拟期间复制 3 个数据集。我们广泛使用 lapply 来不断制作您需要的汇总统计数据。 Map 类似,只是它允许我们在需要时传递多个参数。

asim<-10
t=3
n = rep(10, t)
N = sum(n)
pv<- rep(NA,asim)

lapply(seq_len(asim), function (val) {
  set.seed(val)
  
  data = lapply(n, rnorm, 0, 1)
  
  # SKEWED HEAVY
  
  G=0.5
  h=0.5 # h=0 if skewed normal
  
  y = lapply(data, function(x) ((exp(G*x)-1)/G)*(exp((h*x^2)/2)))  
  
  g = lapply(y, sort)
  ybar = lapply(y, mean)
  
  #BIWEIGHT
  
  med = lapply(g, median)
  mad_=mad(unlist(g, use.names = FALSE))
  u = Map(function (g_, med_) (g_ - med_) / (9 * mad_), g, med)
  idx = lapply(u, function(x) which(abs(x) < 1))


  num = Map(function(g_, med_, u_, idx_) (((g_ - med_) ^ 2) * ((1 - (u_^2))^4))[idx_], g, med, u, idx)
  den = Map(function(u_, idx_) ((1 - (u_^2)) * (1 - 5 * (u_ ^ 2)))[idx_], u, idx)

  data.frame(sim = rep(seq_len(t), lengths(idx)), 
             num = unlist(num, use.names = FALSE), 
             den = unlist(den, use.names = FALSE))
  }
)