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)返回频率最高的类别作为当前类别的预测
数据缺失必须被优先处理。如果是缺失的很少很少,无伤大雅,那么直接删了也没问题。除此之外,应该想办法补上它,i.e. 预测。
Little和Ruth(1987)把数据缺失的机制分为三类:
完全随机缺失(missing completely at random, MCAR)
所缺失的数据是完全随机的,缺失发生的概率既与已观察到的数据无关,也与未观察到的数据无关。这是一种比较理想的情况。
随机缺失(missing at random, MAR)
数据的缺失不是完全随机的。缺失数据发生的概率与所观察到的变量是有关的,而与未观察到的数据的特征是无关的。这是一个比较严重的问题,在这种情况下,我们需要进一步检查数据收集过程,并尝试了解数据为什么丢失。 例如,如果在一项问卷调查中,大多数人没有回答某个问题,他们为什么这么做,是问题不清楚吗?
不可忽略的缺失(non-ignorable missing ,NIM)
亦称为非随机缺失(not missing at random, NMAR),也有研究者将其称为MNAR(missing not at random)。 缺失数据不仅依赖于其它变量,又依赖于变量本身,这种缺失即为不可忽略的缺失。
一般MAR碰见多一些。在R语言中,非常容易搞定。只需要用mice库。更多应用请参考帮助文档。 http://www.stefvanbuuren.nl/publications/MICE%20V1.0%20Manual%20TNO00038%202000.pdf
mice是链式方程多元插值的简写(Multivariate Imputation by Chained Equations)。R中有个同名包提供了多种先进的缺失值处理方法。它使用一种颇不常见的方法来进行两步插值:先利用mice函数建模再用complete函数生成完整数据。效果非常的好,令人惊讶。 注意mice库假设数据缺失为MAR。
下面的程序使用mice库自带的数据nhanes
这篇文章 https://datascienceplus.com/imputing-missing-data-with-r-mice-package/ 讨论了更多mice库的应用,但是最基础的也就是这些了。