Сообщение об ошибке на графике в регрессионной модели - PullRequest
0 голосов
/ 01 февраля 2020

У меня есть программа R для регрессии, которая как-то выдает мне сообщение об ошибке, которое я не понимаю. Модель регрессии принимает в качестве входных данных о потребляемом тепле (Q_htg) и соответствующих данных о температуре (T_amb), а затем строит линейную регрессию для этих двух переменных. После этого я хочу использовать обученную модель регрессии, чтобы предсказать некоторые результаты. Вот код:

dalinearPowerScaling2.function <-
  function(Dataset,
           numberOfDaysForAggregation,
           normOutsideTemperature) {
    heatingPower <- Dataset$Q_htg
    outSideTemperature <- Dataset$T_amb
    aggregationLevel <- numberOfDaysForAggregation * 1440
    index <- 0
    meanValuesOutsideTemperature <-
      vector(, length(outSideTemperature) / aggregationLevel)
    for (i in seq(1, length(outSideTemperature), aggregationLevel)) {
      sum <- 0
      for (j in seq(i, i + aggregationLevel - 1, 1)) {
        sum <- sum + outSideTemperature[j]
      }
      index <- index + 1
      meanValuesOutsideTemperature[index] <- sum / aggregationLevel
    }
    index <- 0
    meanValuesHeatingDemand <-
      vector(, length(heatingPower) / aggregationLevel)
    for (i in seq(1, length(heatingPower), aggregationLevel)) {
      sum <- 0
      for (j in seq(i, i + aggregationLevel - 1, 1)) {
        sum <- sum + heatingPower[j]
      }
      index <- index + 1
      meanValuesHeatingDemand[index] <- sum / aggregationLevel
    }

    linearModel <-
      lm(meanValuesHeatingDemand ~ meanValuesOutsideTemperature)
    abline(linearModel, col = "red")

    pred <- predict(linearModel, data.frame(meanValuesOutsideTemperature = c(normOutsideTemperature)))
    List<-list(meanValuesHeatingDemand, meanValuesOutsideTemperature)
    List2 <- vector("list", length(heatingPower)/aggregationLevel)
    for (i in seq(1, length(meanValuesHeatingDemand),1)){
    List2 [[i]]<-c(meanValuesHeatingDemand[i], meanValuesOutsideTemperature[i])
      }

    List3<-List2[order(sapply(List2, function(x) x[1], simplify=TRUE), decreasing=FALSE)]

    firstTemperatureWithHeatingDemand<-0
    firstHeatingDemand<-0
    for (i in seq(1, length(List3), 1)) {
    if(List3[[i]][1]>0) {
      firstTemperatureWithHeatingDemand<-List3[[i]][2]
      firstHeatingDemand<-List3[[i]][1]
      break}
    }
    regression2ValuesX <- vector(, 5)
    regression2ValuesY <- vector(, 5)
    regression2ValuesX [1] <- firstTemperatureWithHeatingDemand
    regression2ValuesY [1] <-firstHeatingDemand
    List3<-List2[order(sapply(List2, function(x) x[1], simplify=TRUE), decreasing=TRUE)]
    for (i in seq(1, length(regression2ValuesX) - 1, 1)) {
      regression2ValuesX[i + 1]<-List3[[i]][2]
      regression2ValuesY[i + 1]<-List3[[i]][1]
      }

    plot(regression2ValuesX, regression2ValuesY)
    linearModel2 <-
      lm(regression2ValuesY ~ regression2ValuesX)
    abline(linearModel2, col = "blue")
    pred <- predict(linearModel2, data.frame(regression2ValuesX = c(normOutsideTemperature)))
    paste("Predicted heating demand:", round(pred))
  }

Когда я запускаю с командой

linearPowerScaling2.function(data_heat_test, 1, -12)

, я получаю сообщение об ошибке:

 Error in int_abline(a = a, b = b, h = h, v = v, untf = untf, ...) : 
  plot.new has not been called yet 
3.
int_abline(a = a, b = b, h = h, v = v, untf = untf, ...) 
2.
abline(linearModel, col = "red") at LinearPowerScaling2_Function.R#33
1.
linearPowerScaling2.function(data_heat_test, 1, -12) 

С самими данными все должно быть в порядке , Может кто-нибудь сказать мне, в чем проблема?

1 Ответ

1 голос
/ 01 февраля 2020

Без воспроизводимого минимального примера трудно проверить, решает ли это это, но сообщение об ошибке говорит вам, что вы вызываете abline () до вызывающего plot ().

Именно так и происходит в строке 33 ...

Надеюсь, это поможет.

Проверьте здесь , чтобы увидеть, как сделать минимальный воспроизводимый пример.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...