R:循环变量赋值,每次增加变量计算
R: looped variable assignment, augmenting variable calculation each time
我正在尝试根据数据集中的一系列变量计算回归变量。我希望在 运行 回归的每次迭代中使用不同的变量集来计算回归变量(ei:阈值 1)。
旨在收集每个阈值范围的SSR值,从而根据数据确定理想的阈值。
数据 (df) 变量:收益率、Prec、价格、0C、1C、2C、3C、4C、5C、6C、7C、8C、9C、10C
每个循环通过每次选择不同的 "b" 来计算 "thresholds"。
a <- df[=10=]C
b <- dfC
Threshold1 <- (a-b)
Threshold2 <- (b)
其中 "b" 会在每个循环中发生变化,范围从 1C 到 9C。
每个单独的阈值集(1 和 2)应用于 运行 回归,并保存 SSR 以便与基于新 "b" 值(范围从 1C 到 9C)
回归:
reg <- lm(log(Yield)~Threshold1+Threshold2+log(Price)+prec+I(prec^2),data=df)
对于回归的每个循环,我按以下方式改变计算阈值的组件:
当前方法以以下代码为中心:
df <- read.csv("Data.csv",header=TRUE)
names(df)
0C-9Cvarlist <- names(df)[9:19]
ssr.vec <- matrix(,21,1)
for(i in 1:length(varlist)){
a <- df[=12=]C
b <- df$[i]
Threshold1 <- (a-b)
Threshold2 <- (b)
reg <- lm(log(Yield)~Threshold1+Threshold2+log(Price)+prec+I(prec^2),data=df)
r2 <- summary(reg)$r.squared
ssr.vec[i,] <- c(varlist,r2)
}
colnames(ssr.vec) <- c("varlist","r2")
我用上述方法未能达到预期的结果。
谢谢。
我能发现不少错误...
您需要向回归中的数据添加感兴趣的变量 (Threshold1 和 Threshold2)。另外,我认为您需要 select varlist[i] 而不是 varlist 来创建您的 ssr.vec。您的 ssr.vec 需要 2 列,这是一个矩阵,因此您应该将其称为矩阵。您也不能使用 df$[i] 之类的东西来提取列!为什么矩阵的长度是 21?!将列名称更改为 C0,..,C9 而不是 0C,..,9C.
为了将来参考,请在提问之前解决简单的错误...并在您的 post 中包含错误消息!
这应该可以完成工作:
df <- read.csv("Data.csv",header=TRUE)
names(df)[8:19] = paste0("C",0:10)
varlist <- names(df)[9:19]
ssr.vec <- matrix(,21,2)
for(i in 1:length(varlist)){
a <- df$C0
b <- df[,i+9]
df$Threshold1 <- (a-b)
df$Threshold2 <- (b)
reg <- lm(log(Yield)~Threshold1+Threshold2+log(Price)+prec+I(prec^2),data=df)
r2 <- summary(reg)$r.squared
ssr.vec[i,] <- c(varlist[i],r2)
}
colnames(ssr.vec) <- c("varlist","r2")
我正在尝试根据数据集中的一系列变量计算回归变量。我希望在 运行 回归的每次迭代中使用不同的变量集来计算回归变量(ei:阈值 1)。
旨在收集每个阈值范围的SSR值,从而根据数据确定理想的阈值。
数据 (df) 变量:收益率、Prec、价格、0C、1C、2C、3C、4C、5C、6C、7C、8C、9C、10C
每个循环通过每次选择不同的 "b" 来计算 "thresholds"。
a <- df[=10=]C
b <- dfC
Threshold1 <- (a-b)
Threshold2 <- (b)
其中 "b" 会在每个循环中发生变化,范围从 1C 到 9C。
每个单独的阈值集(1 和 2)应用于 运行 回归,并保存 SSR 以便与基于新 "b" 值(范围从 1C 到 9C)
回归:
reg <- lm(log(Yield)~Threshold1+Threshold2+log(Price)+prec+I(prec^2),data=df)
对于回归的每个循环,我按以下方式改变计算阈值的组件:
当前方法以以下代码为中心:
df <- read.csv("Data.csv",header=TRUE)
names(df)
0C-9Cvarlist <- names(df)[9:19]
ssr.vec <- matrix(,21,1)
for(i in 1:length(varlist)){
a <- df[=12=]C
b <- df$[i]
Threshold1 <- (a-b)
Threshold2 <- (b)
reg <- lm(log(Yield)~Threshold1+Threshold2+log(Price)+prec+I(prec^2),data=df)
r2 <- summary(reg)$r.squared
ssr.vec[i,] <- c(varlist,r2)
}
colnames(ssr.vec) <- c("varlist","r2")
我用上述方法未能达到预期的结果。
谢谢。
我能发现不少错误...
您需要向回归中的数据添加感兴趣的变量 (Threshold1 和 Threshold2)。另外,我认为您需要 select varlist[i] 而不是 varlist 来创建您的 ssr.vec。您的 ssr.vec 需要 2 列,这是一个矩阵,因此您应该将其称为矩阵。您也不能使用 df$[i] 之类的东西来提取列!为什么矩阵的长度是 21?!将列名称更改为 C0,..,C9 而不是 0C,..,9C.
为了将来参考,请在提问之前解决简单的错误...并在您的 post 中包含错误消息!
这应该可以完成工作:
df <- read.csv("Data.csv",header=TRUE)
names(df)[8:19] = paste0("C",0:10)
varlist <- names(df)[9:19]
ssr.vec <- matrix(,21,2)
for(i in 1:length(varlist)){
a <- df$C0
b <- df[,i+9]
df$Threshold1 <- (a-b)
df$Threshold2 <- (b)
reg <- lm(log(Yield)~Threshold1+Threshold2+log(Price)+prec+I(prec^2),data=df)
r2 <- summary(reg)$r.squared
ssr.vec[i,] <- c(varlist[i],r2)
}
colnames(ssr.vec) <- c("varlist","r2")