如何使用 stepAIC 进行仿真研究
how to conduct a simulation study using stepAIC
我必须在 R 中编写模拟研究代码。我有 X1,...,X15~N(0,1) 个解释变量和 Y~N(2+2*X1+0.8*X2-1.2* X15, 1) 我需要模拟 n=100 个值并重复 iter=100 次。然后,对于创建的每个线性模型,我必须使用 stepAIC 找到最佳子模型。我写了下面的代码:
set.seed(1234)
sim <- function (sd) {
n <- 100
p <- 15
X <- matrix(rnorm(n * p), n, p)
mu <- 2 + 2*X[,1] + 0.8*X[,2] - 1.2*X[,15]
Y <- matrix(rnorm(100, mu,sd))
sim<-data.frame(Y,X)
r<- lm(Y~., data = sim)
library(MASS)
r0<-lm(Y~1, data=sim)
res<-stepAIC(r0,k=2,direction="forward", scope=list(lower=~1, upper=r))
return(res$coefficients)
}
sim(1)
oo1<- lapply(1:100, sim)
由于我是一个没有经验的 R 用户,我认为我做错了什么。研究的目的是找出在100个最好的子模型中(根据stepAIC),是否有模型可以找到真正的(Y=2+2*X1+0.8*X2-1.2*X15+e) .万一我做错了事,我可以得到一些 help/hints 以便正确实施吗?
这是您的代码的工作版本:
library(MASS)
set.seed(1234)
sim <- function(sd, n, p) {
X <- matrix(rnorm(n * p), n, p)
mu <- 2 + 2*X[,1] + 0.8*X[,2] - 1.2*X[,p]
Y <- rnorm(n, mean=mu, sd=rep(sd,n))
df <- data.frame(Y,X)
r <- lm(Y~., data=df)
r0 <- lm(Y~1, data=df)
res <- stepAIC(r0, k=2, direction="forward",
scope=list(lower=~1, upper=r), trace=F)
return(res$coefficients)
}
n <- 100
p <- 15
sim(1, n, p)
oo1 <- lapply(1:100, sim, n, p)
我必须在 R 中编写模拟研究代码。我有 X1,...,X15~N(0,1) 个解释变量和 Y~N(2+2*X1+0.8*X2-1.2* X15, 1) 我需要模拟 n=100 个值并重复 iter=100 次。然后,对于创建的每个线性模型,我必须使用 stepAIC 找到最佳子模型。我写了下面的代码:
set.seed(1234)
sim <- function (sd) {
n <- 100
p <- 15
X <- matrix(rnorm(n * p), n, p)
mu <- 2 + 2*X[,1] + 0.8*X[,2] - 1.2*X[,15]
Y <- matrix(rnorm(100, mu,sd))
sim<-data.frame(Y,X)
r<- lm(Y~., data = sim)
library(MASS)
r0<-lm(Y~1, data=sim)
res<-stepAIC(r0,k=2,direction="forward", scope=list(lower=~1, upper=r))
return(res$coefficients)
}
sim(1)
oo1<- lapply(1:100, sim)
由于我是一个没有经验的 R 用户,我认为我做错了什么。研究的目的是找出在100个最好的子模型中(根据stepAIC),是否有模型可以找到真正的(Y=2+2*X1+0.8*X2-1.2*X15+e) .万一我做错了事,我可以得到一些 help/hints 以便正确实施吗?
这是您的代码的工作版本:
library(MASS)
set.seed(1234)
sim <- function(sd, n, p) {
X <- matrix(rnorm(n * p), n, p)
mu <- 2 + 2*X[,1] + 0.8*X[,2] - 1.2*X[,p]
Y <- rnorm(n, mean=mu, sd=rep(sd,n))
df <- data.frame(Y,X)
r <- lm(Y~., data=df)
r0 <- lm(Y~1, data=df)
res <- stepAIC(r0, k=2, direction="forward",
scope=list(lower=~1, upper=r), trace=F)
return(res$coefficients)
}
n <- 100
p <- 15
sim(1, n, p)
oo1 <- lapply(1:100, sim, n, p)