我正在尝试根据数据集中的一系列变量计算回归变量。我希望在每次运行回归的迭代中使用不同的变量集来计算回归变量(ei:Threshold 1)。
旨在收集每个阈值范围的SSR值,从而根据数据确定理想阈值。
数据(df)变量:Yield,Prec,Price,0C,1C,2C,3C,4C,5C,6C,7C,8C,9C,10C
每个循环通过每次选择不同的“b”来计算“阈值”。
a <- df$0C
b <- df$1C
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$0C
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")
使用上述方法无法达到预期的效果。
谢谢。
答案 0 :(得分:2)
我可以发现很多错误......
您需要将感兴趣的变量(Threshold1和Threshold2)添加到回归中的数据中。另外,我认为你需要选择varlist [i]而不是varlist来创建你的ssr.vec。您的ssr.vec需要2列,这是一个矩阵,因此您应该将其称为矩阵。你也不能使用像df $ [i]这样的东西来提取一个列!为什么长度为21的矩阵?将列名更改为C0,..,C9,而不是0C,..,9C。
供将来参考,在提出问题之前解决简单错误...并在帖子中包含错误消息!
这应该做的工作:
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")