R:循环变量赋值,每次都增加变量计算

时间:2015-12-19 16:45:11

标签: r loops for-loop variable-assignment

我正在尝试根据数据集中的一系列变量计算回归变量。我希望在每次运行回归的迭代中使用不同的变量集来计算回归变量(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")

使用上述方法无法达到预期的效果。

谢谢。

1 个答案:

答案 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")