簡體   English   中英

不同的 set.seed 每次運行在 R

[英]Different set.seed each run in R

我想“測量”哪種回歸方法對異常值更穩健。

為此,我將 model 系數的方差相加。 每次運行,我都會從 t 分布中生成數據。 我 set.seed 十次以獲得十個特定數據。

但是,我希望每次運行十個不同的種子。 所以,總的來說,我將有 10 個方差之和。 下面的代碼給了我第一個(十個不同的種子)的總和。

我怎樣才能做到這一點?

#######################################
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.

   

這是更接近您預期結果的內容。 下面的代碼修復了原始代碼中的一個關鍵問題。 目前尚不清楚打算從 function 返回什么數據。

  1. 這將在 function 內創建一個種子編號向量

  2. 這還會在 function 內部創建一個向量,以存儲循環每次迭代的系數方差值。 (不確定是否是您想要的)。

  3. 我需要注釋掉lad function 因為我不知道這是來自哪個 package。 (您需要按照上面的 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.

希望這能提供答案或至少提供解決您問題的指導。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM