len = length(x)
if(len != length(y))
stop("length not equal!")
if(len < 2)
stop("dim size must more than 1")
#pretreat data abd alloc memery
xx <- paste("(","a -",x,")")
m <- c(rep(0,len))
#combin express
for(i in 1:len) {
td <- 1
tm <- "1"
for(j in 1:len) {
if(i != j) {
td <- td*(x[i] - x[j])
tm <- paste(tm,"*",xx[j])
}
}
tm <- paste(tm,"/",td)
m[i]<-tm #m[i] <- parse(text=tm)
}
#combin the exrpession
m <- paste(m,"*",y)
r <- paste(m,collapse="+")
#combin the function
fbody <- paste("{ return(",r,")}")
f <- function(a) {}
#fill the function's body
body(f) <- parse(text=fbody)
return(f)
}
这是拉格朗日多项式插值算法 你参考下吧
(1)计算已知类别数据及中的点与当前点的距离;(2)按距离递增次序排序
(3)选取与当前点距离最小的k个点
(4)确定前K个点所在类别出现的频率
(5)返回频率最高的类别作为当前类别的预测
formula代表拟合的公式,如Y~X,则对因变量Y和自变量X作线性拟合拟合模型为 y=a+bx ,如Y 0+X或Y X+0则除对因变量Y和自变量X作线性拟合外,还规定改直线必过原点及拟合模型为 y=x 。
lm对象即lm函数返回的值,其属性包括
常用的有 coefficients , residuals 和 fitted.values ,分别表示拟合的得到的各系数的值、残差和预测值。
可以看出该拟合曲线为y=0.52805925 -0.02797779x
其他值的调用,包括p值,给定x预测的y值,拟合系数R方等需要通过summary函数调用
也可以直接通过 summary(line.model) 打印出大部分与回归直线相关的一些结果