[原创]基于R语言的核回归(Kernal Regression)与最近邻回归(NNBR)
发布:fantuanxiaot | 分类:考研
关于本站
人大经济论坛-经管之家:分享大学、考研、论文、会计、留学、数据、经济学、金融学、管理学、统计学、博弈论、统计年鉴、行业分析包括等相关资源。
经管之家是国内活跃的在线教育咨询平台!
经管之家新媒体交易平台
提供"微信号、微博、抖音、快手、头条、小红书、百家号、企鹅号、UC号、一点资讯"等虚拟账号交易,真正实现买卖双方的共赢。【请点击这里访问】
期刊
- 期刊库 | 马上cssci就要更新 ...
- 期刊库 | 【独家发布】《财 ...
- 期刊库 | 【独家发布】“我 ...
- 期刊库 | 【独家发布】“我 ...
- 期刊库 | 【独家发布】国家 ...
- 期刊库 | 请问Management S ...
- 期刊库 | 英文期刊库
- 核心期刊 | 歧路彷徨:核心期 ...
TOP热门关键词
1,核回归(KernalRegression),首先定义诸如高斯核函数,Epanechnikov核函数,再基于最优宽窗h,并基于Nadaraya-Waston核估计得到结果,代码如下:1.1,高斯核函数与Epane核函数[hide]#GaussianKernal#高斯核kernalG ...
免费学术公开课,扫码加入 |
1.1,高斯核函数与Epane核函数
[hide]
- #Gaussian Kernal
- #高斯核
- kernalGaussian <- function(xData)
- {
- #得到相应的核函数
- if(ncol(xData)!=1)
- {
- stop('error input data')
- }
- stdX <- sd(xData)
- #高斯宽带的选择
- h <- 1.06*stdX*length(xData)^(-1/5)
- kernalX <- 1/(h*sqrt(2*pi)) * exp(-xData^2/(2*h^2))
- return(kernalX)
- }
- #Epanechnikov kernal
- kernalEpanechnikov <- function (xData)
- {
- if(ncol(xData)!=1)
- {
- stop('error input the data')
- }
- stdX <- sd(xData)
- h<-2.34*stdX*length(xData)^(-1/5)
- xPh<- abs(xData/h)
- xPh[xPh <=1] <-1
- xPh[xPh>1] <- 0
- kernalX <- 0.75/h*(1-(xData/h)^2)*xPh
- return(kernalX)
- }
[/hide]
1.2 两个核函数的检测:
[hide]
- #两个核函数的检测
- testData1 <- as.matrix(seq(-10,10,by = 0.5))
- testData2 <- as.matrix(seq(-10,10,length = 100))
- kernalGaussian(testData1)
- kernalEpanechnikov(testData2)
- #高斯核的数据的作图
- plot(kernalGaussian(testData2))
- #Epanechnikov核函数的作图
- plot(kernalEpanechnikov(testData2))
[/hide]
1.3 以下是著名的Nadaraya-Waston核估计
[hide]
- ##########################################################
- #以下是著名的Nadaraya-Waston核估计
- #by fantuanxiaot
- kernalRegress <- function(xData , yData , kernalName)
- {
- if(!is.matrix(xData)||!is.matrix(yData))
- {
- stop('error input the empirical data')
- }
- #最终返回针对y的核回归拟合的值
- nData<-nrow(xData)
- if(nData!=nrow(yData))
- {
- stop('error input the data')
- }
- if (!is.character(kernalName) || !length(intersect(c('Gaussian','Epanechnikov'),kernalName)) )
- {
- stop('error input the kernal name')
- }
- yRegress <- matrix(NaN , nrow = nData , ncol = 1)
- for (i in c(1:nData))
- {
- x <- xData[i]
- xXt <- matrix(x , nrow = nData, ncol = 1) - xData
-
- if (setequal(kernalName , 'Gaussian'))
- {
- khX <- kernalGaussian(xXt)
- } else if (setequal(kernalName , 'Epanechnikov'))
- {
- khX <- kernalEpanechnikov(xXt)
- }
-
- yRegress[i] <- sum(yData*khX)/sum(khX)
-
- }
- return(yRegress)
- }
- #核回归的检测
- x<- as.matrix(rnorm(100,mean = 0,sd = 0.03))
- y<- 0.5*x + as.matrix(rnorm(100,mean = 0,sd = 0.01))
- cbind(y,kernalRegress(x,y,'Gaussian') , kernalRegress(x,y,'Epanechnikov'))
- plot(c(1:100),y,col = 'white')
- lines(c(1:100),y,col = 'blue')
- lines(c(1:100),kernalRegress(x,y,'Gaussian'),col = 'red')
- lines(c(1:100),kernalRegress(x,y,'Epanechnikov'),col = 'green')
[/hide]
2,NNBR(最近邻回归)
一篇基本思路的Paper:
2.1,单变量NBRR源码如下:
[hide]
- #单变量的回归
- #NNBRknn近邻回归与预测
- #这里是基于单变量的时间序列
- setwd('D:/MyDriversMatlab/Mfiles13')
- rm(list=ls())
- nnbrRegress<-function (xData , lags , disType)
- {
- #lags是滞后的阶数P
- #outNum是样本外预测的个数
- #disType是计算距离的类别
- if (!is.matrix(xData))
- {
- stop('error input the Current Data')
- }
- if (ncol(xData)!= 1)
- {
- stop('error input data')
- }
- if ((nrow(xData) - lags)<1)
- {
- stop('error input the Data')
- }
- #当前的数据集合
- currentData <- xData
- k <- ceiling(sqrt(nrow(xData) - lags))
- #先计算所有的特征向量
- currentVector <- xData[c(( nrow(xData)-lags+1):(nrow(xData)))]
- currentVector <- t(as.matrix(currentVector))
- Vectors<-NULL
- xOut<-NULL
- #获取其他的特征向量
- i<-1
- while(TRUE)
- {
- if ((i+lags - 1) == (nrow(xData)))
- {
- break
- }
- vectors<- t(as.matrix(xData[(i):(i+lags - 1)]))
-
- xOut<-c(xOut,xData[i+lags])
-
- Vectors<-rbind(Vectors,vectors)
-
- i<-i+1
- }
- #再从中寻找距离最小的K个值
- nV <- nrow(Vectors)
- currData <- matrix(rep(currentVector , nV),nrow = nV,byrow = TRUE)
- Distance <- sqrt( apply((Vectors - currData)^2,1,sum) )
- #再计算距离的最小的前k个值
- #从大到小的几个下标
- Index <- order(Distance)
- Index <- Index[c(1:k)]
- xOut<-xOut[Index]
- DistanceOut <- Distance[Index]
- #对样本外的结果进行预测
- #权重的配置
- if (disType == 1)
- {
- xForecasting <- sum(DistanceOut/sum(DistanceOut)*xOut)
- } else
- {
- xForecasting <- sum((c(k:1)/k)/sum((c(k:1)/k))*xOut)
- }
- return(xForecasting)
- }
- data <- as.matrix(cumsum(matrix(rnorm(100),nrow = 100)))
- data
- nnbrRegress(data,8,1)
- nnbrRegress(data,8,2)
- #各种不同的滞后阶数
- nnbrRegress(data,10,1)
- nnbrRegress(data,10,2)
- #各种不同的滞后阶数
- nnbrRegress(data,15,1)
- nnbrRegress(data,15,2)
- #eof
2.2,多变量NNBR源码如下:
[hide]
- #D:\MyDriversMatlab\Mfiles13
- setwd('D:/MyDriversMatlab/Mfiles13')
- #基于knn回归的最近邻算法
- rm(list=ls())
- nnbrRegressMultivariate<-function (xData , yData , testData)
- {
- if(nrow(xData)!=nrow(yData))
- {
- stop('error input data')
- }
- if (ncol(xData)!=ncol(testData))
- {
- stop('error input data')
- }
- if (!is.matrix(xData) ||!is.matrix(yData) || !is.matrix(testData))
- {
- stop('error input data')
- }
- #取得特征向量的个数
- k<-ceiling(sqrt(nrow(xData)))
- yForecasting<-matrix(NaN , nrow = nrow(testData),ncol = 1)
- for (i in c(1:nrow(testData)))
- {
- x<-testData[i,]
-
- xDataRep <-rep(x,nrow(xData))
- xDataRep <- matrix(xDataRep,nrow = nrow(xData) , byrow = TRUE)
- #计算距离
-
- Distance <- sqrt(apply((xData - xDataRep)^2,1,sum))
-
- Index <- order(Distance)
- #选择前k个值
- Index<-Index[c(1:k)]
- ys<-(yData[Index])
- Weight<-(1/Distance)/sum(1/Distance)
-
- yForecasting[i] <-sum(ys*Weight)
-
- }
- return(yForecasting)
- }
- xData <- matrix(rnorm(100),ncol = 4)
- yData <- as.matrix(apply(xData,1,mean))
- testData <- matrix(rnorm(40),ncol = 4)
- nnbrRegressMultivariate(xData , yData , testData)
「经管之家」APP:经管人学习、答疑、交友,就上经管之家!
免流量费下载资料----在经管之家app可以下载论坛上的所有资源,并且不额外收取下载高峰期的论坛币。
涵盖所有经管领域的优秀内容----覆盖经济、管理、金融投资、计量统计、数据分析、国贸、财会等专业的学习宝库,各类资料应有尽有。
来自五湖四海的经管达人----已经有上千万的经管人来到这里,你可以找到任何学科方向、有共同话题的朋友。
经管之家(原人大经济论坛),跨越高校的围墙,带你走进经管知识的新世界。
扫描下方二维码下载并注册APP
免流量费下载资料----在经管之家app可以下载论坛上的所有资源,并且不额外收取下载高峰期的论坛币。
涵盖所有经管领域的优秀内容----覆盖经济、管理、金融投资、计量统计、数据分析、国贸、财会等专业的学习宝库,各类资料应有尽有。
来自五湖四海的经管达人----已经有上千万的经管人来到这里,你可以找到任何学科方向、有共同话题的朋友。
经管之家(原人大经济论坛),跨越高校的围墙,带你走进经管知识的新世界。
扫描下方二维码下载并注册APP
您可能感兴趣的文章
本站推荐的文章
人气文章
本文标题:[原创]基于R语言的核回归(Kernal Regression)与最近邻回归(NNBR)
本文链接网址:https://bbs.pinggu.org/jg/kaoyankaobo_kaoyan_3863031_1.html
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。