【问题标题】:Error using train() function in R while running linear regression运行线性回归时在 R 中使用 train() 函数时出错
【发布时间】:2021-10-15 14:42:58
【问题描述】:

我正在尝试在 R 中训练一个线性模型,起初我一直收到将列名添加到 X 的错误,当我通过添加 data.frame 修复该错误时,我收到了一个新错误 错误:出现意外符号: “meatPCR

它似乎包含我的下一行代码“set.seed(529(”作为我的火车代码行的一部分。有人可以解释一下吗?我该如何解决?

library(AppliedPredictiveModeling)
library(ggplot2)
library(lattice)
library(caret)
library(e1071)
library(corrplot)
library(lattice)
install.packages("reshape")
library(reshape)
data(tecator)


set.seed(1)
inSubset <- sample(1:dim(endpoints)[1], 10)

absorpSubset <- absorp[inSubset,]

endpointSubset <- endpoints[inSubset, 3]
newOrder <- order(-absorpSubset[,1])


absorpSubset <- absorpSubset[newOrder,]
endpointSubset <- endpointSubset[newOrder]

spectData <- as.data.frame(t(absorpSubset))
spectData$x <- 1:nrow(spectData)
spectData2 <- melt(spectData, id.vars = c("x"))

cols <- brewer.pal(9,"YlOrRd")[-(1:2)]
cols <- colorRampPalette(cols)(10)
spectTheme <- caretTheme()
spectTheme$superpose.line$col <- cols
spectTheme$superpose.line$lwd <- rep(2, 10)
spectTheme$superpose.line$lty <- rep(1, 10)
trellis.par.set(spectTheme)
xyplot(value ~ x, data = spectData2,groups = variable,type = c("l", "g"),panel = function(...) {panel.xyplot(...)panel.text(rep(103.5, nrow(absorpSubset)),absorpSubset[,ncol(absorpSubset)], paste(endpointSubset),cex = .7)},ylab = "Absorption",xlab = "")
\caption[Tecator spectrum plots]{A sample of 10 spectrum of the Tecator data. The colors of the curves reflect the absorption values, where yellow indicates low absorption and red is indicative of high absorption.}
\label{F:RegressionTecatorSpectrum}
\end{center}
\end{figure}

\subsection*{Solutions}


pcaObj <- prcomp(absorp, center = TRUE, scale = TRUE)


pctVar <- pcaObj$sdev^2/sum(pcaObj$sdev^2)*100
head(pctVar)  



set.seed(1029)
inMeatTraining <- createDataPartition(endpoints[, 3], p = 3/4, list= FALSE)

absorpTrain <- absorp[ inMeatTraining,]
absorpTest  <- absorp[-inMeatTraining,]
proteinTrain <- endpoints[ inMeatTraining, 3]
proteinTest  <- endpoints[-inMeatTraining,3]

ctrl <- trainControl(method = "repeatedcv", repeats = 5)  


set.seed(529)
mealLm<-train(as.formula(y~x, data=test, method="lm", trControl = trainControl)


set.seed(529)

meatPCR <- train(as.formula(x = absorpTrain, y = proteinTrain,method = "pcr",trControl = ctrl, tuneLength = 25)

set.seed(529)
meatPLS <- train(y,x, method = "pls", trControl = ctrl, preProcess = c("center", "scale"),tuneLength = 25)

comps <- rbind(meatPLS$results, meatPCR$results)
comps$Model <- rep(c("PLS", "PCR"), each = 25)  

【问题讨论】:

    标签: r


    【解决方案1】:

    必须是:

    mealLm<-train(y ~ ., data=train, method="lm", trControl = trainControl)
    

    在这种情况下,您不需要 as 公式,因为您已经有了 y 的变量,并且您可以使用句点来表示框架中的所有其他内容。

    【讨论】:

      【解决方案2】:

      您忘记在这些行中添加右括号,我不确定括号应该在哪里,因为它们与“as.formula”调用有关:

      mealLm<-train(as.formula(y~x, data=test, method="lm", trControl = trainControl)
      
      meatPCR <- train(as.formula(x = absorpTrain, y = proteinTrain,method = "pcr",trControl = ctrl, tuneLength = 25)
      

      希望能帮助您解决问题,欢迎访问该网站 :)

      【讨论】:

        猜你喜欢
        • 2018-05-20
        • 2016-10-05
        • 2021-12-02
        • 2015-02-24
        • 1970-01-01
        • 1970-01-01
        • 2022-01-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多