R 中每个 运行 不同 set.seed

Different set.seed each run in R

我想“测量”哪种回归方法对离群值更稳健。

为此,我对模型系数的方差求和。每个 运行,我从 t 分布生成数据。我set.seed十次有十个具体数据。

但是,我想要每个种子有十个不同的种子运行。所以,总的来说,我将有 10 个方差之和。下面的代码给我 one 第一个(十个不同的种子)的总和。

我该怎么做?

#######################################
p <- 5
n <- 50
#######################################
FX <- function(seed, data) {
#for loops over a seed #
for (i in seed) {
set.seed(seed)  
# generating data from t-distribution #
x<- matrix(rt(n*p,1), ncol = p)
y<-rt(n,1)
dat=cbind(x,y)
data<-as.data.frame(dat)
# performing a regression model on the data #
lm1 <- lm(y ~ ., data=data)
lm.coefs <- coef(lm1)
            
lad1 <- lad(y ~ ., data=data, method="BR")
lad.coefs <- coef(lad1)
          }
# calculate variance of the coefficients # 
return(`attr<-`(cbind(lmm=var(lm.coefs), lad=var(lad.coefs)), "seed", seed))
}
#######################################
seeds <- 1:10  ## 10 set seed to have diffrent data set from t-distribution #
res <- lapply(seeds, FX, data=data) # 10 diffrent variance of 10 data/model
sov <- t(sapply(res, colSums)) # put them in matrix
colSums(sov) # sum of 10 varainnces for each model.

   

这里有一些更接近您预期的结果。 下面的代码修复了原始代码中的一个关键问题。目前还不清楚函数要返回什么数据。

  1. 这会在函数内部创建一个种子数向量

  2. 这还在函数内部创建了一个向量,用于存储循环每次迭代的系数方差值。 (不确定是否是您想要的)。

  3. 我需要注释掉 lad 函数,因为我不知道它来自哪个包。 (您需要按照上面的 2 将其添加回来。

  4. 一些常规的代码清理

    p <- 5
    n <- 50
    
    
    FX <- function(seed, data) {
        #for loops over a seed #
      #Fixes the starting seed issue
      startingSeed <- (seed-1)*10 +1
      seeds <- seq( startingSeed, startingSeed+9)
    
      #create vector to store results from loop iteration
      lm.coefs <- vector(mode="numeric", length=10)
      index <- 1
    
      for (i in seeds) {
        set.seed(i)  
        # generating data from t-distribution #
        x<- matrix(rt(n*p,1), ncol = p)
        y<-rt(n,1)
        data<-data.frame(x, y)
        # performing a regression model on the data #
        lm1 <- lm(y ~ ., data=data)
        lm.coefs[index] <- var(coef(lm1))
    
        #   lad1 <- lad(y ~ ., data=data, method="BR")
        #   lad.coefs <- coef(lad1)
        index <- index +1
      }
     # calculate variance of the coefficients # 
     return(`attr<-`(cbind(lmm=lm.coefs), "seed", seed))
    }
    
    
    seeds <- 1:10  ## 10 set seed to have diffrent data set from t-distribution #
    res <- lapply(seeds, FX, data=data) # 10 diffrent variance of 10 data/model
    sov <- t(sapply(res, colSums)) # put them in matrix
    colSums(sov) # sum of 10 varainnces for each model.
    

希望这能为您提供答案或至少提供解决问题的指导。