gpt4 book ai didi

r - 模拟多元数据进行回归时,如何设置R平方(包括示例代码)?

转载 作者:行者123 更新时间:2023-12-04 07:03:07 25 4
gpt4 key购买 nike

我正在尝试模拟一个三变量数据集,以便可以在其上运行线性回归模型。 “X1”和“X2”将是连续的自变量(平均值= 0,标准差= 1),“Y”将是连续的因变量。

变量将是回归模型,将产生如下所示的系数:
Y = 5 + 3(X1)-2(X2)

我想模拟此数据集,以使所得回归模型的R平方值为0.2。如何确定“sd.value”的值,以便回归模型具有此R平方?

n <- 200 
set.seed(101)
sd.value <- 1

X1 <- rnorm(n, 0, 1)
X2 <- rnorm(n, 0, 1)
Y <- rnorm(n, (5 + 3*X1 - 2*X2), sd.value)

simdata <- data.frame(X1, X2, Y)

summary(lm(Y ~ X1 + X2, data=simdata))

最佳答案

看一下这段代码,它应该足够接近您想要的代码:

simulate <- function(n.obs=10^4, beta=c(5, 3, -2), R.sq=0.8) {
stopifnot(length(beta) == 3)
df <- data.frame(x1=rnorm(n.obs), x2=rnorm(n.obs)) # x1 and x2 are independent
var.epsilon <- (beta[2]^2 + beta[3]^2) * (1 - R.sq) / R.sq
stopifnot(var.epsilon > 0)
df$epsilon <- rnorm(n.obs, sd=sqrt(var.epsilon))
df$y <- with(df, beta[1] + beta[2]*x1 + beta[3]*x2 + epsilon)
return(df)
}
get.R.sq <- function(desired) {
model <- lm(y ~ x1 + x2, data=simulate(R.sq=desired))
return(summary(model)$r.squared)
}
df <- data.frame(desired.R.sq=seq(from=0.05, to=0.95, by=0.05))
df$actual.R.sq <- sapply(df$desired.R.sq, FUN=get.R.sq)
plot(df)
abline(a=0, b=1, col="red", lty=2)

基本上,您的问题归结为找出var.epsilon的表达式。因为我们有y = b1 + b2 * x1 + b3 * x2 + epsilon,并且Xs和epsilon都是独立的,所以我们有var [y] = b2 ^ 2 * var [x1] + b3 ^ 2 * var [x2] + var [eps],其中var [Xs] = 1(假定)。然后,您可以将var [eps]求解为R平方的函数。

关于r - 模拟多元数据进行回归时,如何设置R平方(包括示例代码)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19096983/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com