我想像这样在循环中使用变量;
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)中的错误:输入功率无效 公式
答案 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)
)
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))
}
}
}