R使用指数回归方程

时间:2018-08-31 07:33:52

标签: r

我想像这样在循环中使用变量;

for(i_want_to_use_this in seq(1,8)){
lm(
  y ~ (
    PC1 + PC2 + PC3 + PC4 + PC5 + PC6 + PC7 +PC8
  )^i_want_to_use_this ,
  data = as.data.frame(transformed2)
)
}

我尝试了很多事情,但是我无法做到。有人对此有任何想法吗?

 y ~ PC1 + PC2 + ... + PC8 + PC1:PC2+PC1:PC3+...+PC1:PC8+...+PC1:PC2:..:PC8

非常感谢。

编辑

我遇到了错误。

  

terms.formula(formula,data = data)中的错误:输入功率无效   公式

2 个答案:

答案 0 :(得分:2)

在我看来,问题出在公式中的是^ 1。

尝试一下:

for(i_want_to_use_this in seq(1,8)){
form = if(i_want_to_use_this < 2) formula("y ~ (PC1 + PC2 + PC3 + PC4 + PC5 + PC6 + PC7 +PC8)") else formula(paste0("y ~ (PC1 + PC2 + PC3 + PC4 + PC5 + PC6 + PC7 +PC8)^",i_want_to_use_this))

lm(form, data = as.data.frame(transformed2))
}

或者,稍微修改一下即可使用代码:

编辑此答案:

PC1 + PC2 + PC3 + PC4 + PC5 + PC6 + PC7 +PC8
      )^i_want_to_use_this

这不能用作公式,因为它被用作纯字符串(i_want_to_use_this不会转换为数值)。

必须将其粘贴到一起:

paste0("PC1 + PC2 + PC3 + PC4 + PC5 + PC6 + PC7 +PC8
      )^",i_want_to_use_this)

用这种方式i_want_to_use_this替换为其中包含的数字

lm(
  y ~ (
    PC1 + PC2 + PC3 + PC4 + PC5 + PC6 + PC7 +PC8
  ),
  data = as.data.frame(transformed2)
)

for(i_want_to_use_this in seq(2,8)){
lm(
  y ~ (
    paste0("PC1 + PC2 + PC3 + PC4 + PC5 + PC6 + PC7 +PC8
  )^",i_want_to_use_this),
  data = as.data.frame(transformed2)
)
}

答案 1 :(得分:-1)

这是解决方案;

lm(
  paste0("y~(PC1+PC2+PC3+PC4+PC5)^",i),
  data = as.data.frame(transformed2)
)

编辑@jogo

for(i in seq(2,10)){

  abc <-
    model.matrix(lm(
      paste0("y~(anode + augiris + btb + elution + ewc + nacn + naoh + flow + loadcar+ saat_no)^",i),
      data = as.data.frame(saat)
    ))
  x <- (abc[, 2:length(colnames(abc))])

  # print(head(x,2))
  lambdas <- 10 ^ seq(3,-2, by = -.1)
  for (alp in seq(0, 1, 0.01)) {
    cv_fit <- cv.glmnet(x,
                        y,
                        alpha = alp,
                        lambda = lambdas)
    opt_lambda <- cv_fit$lambda.min
    fit <- cv_fit$glmnet.fit
    y_predicted <-
      predict(fit, s = opt_lambda, newx = x)

    # Sum of Squares Total and Error
    sst <- sum((y - mean(y)) ^ 2)
    sse <- sum((y_predicted - y) ^ 2)

    # R squared
    rsq <- 1 - sse / sst


    if (se_last > sse) {
      se_last <- sse
      rsq_son <- rsq
      y_predicted_son <- y_predicted
      y_son <- y
      alp_son<-alp
      fit_son <- fit
      opt_lambda_son <- opt_lambda
      i_son<-i
      print(paste0(i, "-",alp, "-", rsq))
    }
  }
}