我在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")
我知道我可以遍历不同的常量线并找到每个线的方差之和,然后决定哪条线最合适。但是,我有很多数据点,我已经循环了很多图表。除了蛮力方法之外,还有更好的方法对此进行编码吗?
答案 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获得了一些灵感。)