找到最小化R

时间:2017-02-24 20:04:42

标签: r statistics

我在R中有一个散点图,x轴上有时间,y轴上有成本。我想找到一个常数线(y =?),它将从所有这些点到常数线的方差之和最小化。数据不太重要(例如:mtcars数据),但如果您想引用某些内容,可以使用下面的代码。

#mtcars
plot(mtcars$wt, mtcars$disp)

i=1
j=1

sum_df <- data.frame()

for(i in as.integer(min(mtcars$disp)):as.integer(max(mtcars$disp))){
  sum_var = list()
  for(j in 1:length(mtcars$disp)){
    sum_var[[j]] <- abs(i-mtcars$disp[j])
  }
  sum_var = do.call(rbind, sum_var)
  sum_var <- sum(sum_var[,1])

  new_sum <- rbind(sum_var,sum_df)

  sum_df <- new_sum
}
row.names(sum_df)=as.integer(min(mtcars$disp)):as.integer(max(mtcars$disp))
sum_df$best_line <- ifelse(min(sum_df[,1])==sum_df[,1], "Best Line", "")
colnames(sum_df) <- c("Disp", "Abs Sum of Var")

我知道我可以遍历不同的常量线并找到每个线的方差之和,然后决定哪条线最合适。但是,我有很多数据点,我已经循环了很多图表。除了蛮力方法之外,还有更好的方法对此进行编码吗?

1 个答案:

答案 0 :(得分:0)

你对术语方差和线的使用对我来说有点奇怪。也就是说,我认为你想要做的是找到x的值,使得总和(abs(mtcars $ disp-x))尽可能小。如果是这种情况,那么您可以尝试以下代码

myFunction <- function(x,a) {
  sum(abs(x-a))
}

optimize(myFunction, interval=c(range(mtcars$disp)) , tol = 1e-6, a=mtcars$disp)

这并不代表您的代码所提供的价值,但我希望这可能只是您所寻找的内容。 (我从here获得了一些灵感。)