问题描述
我想“衡量”哪种回归方法对异常值更稳健。
为此,我对模型系数的方差求和。每次运行,我从 t 分布生成数据。我将.seed 设置了十次以获得十个特定数据。
但是,我也希望每次运行有 10 个不同的种子。所以,总的来说,我将有 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.
解决方法
这里更接近您的预期结果。 下面的代码修复了原始代码中的一个关键问题。不清楚该函数打算返回什么数据。
-
这会在函数内部创建一个种子数向量
-
这还会在函数内部创建一个向量,以存储循环每次迭代的系数方差值。 (不确定是否是您想要的)。
-
我需要注释掉
lad
函数,因为我不知道它来自哪个包。 (您需要按照上面的 2 将其添加回来。 -
对代码进行一些常规清理
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.
希望这能提供答案或至少指导来解决您的问题。