全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
2011-6-6 20:34:06
30# zhangtao

论坛上有关于非参数回归的的带宽选择的书,你搜索一下,下载一本具体看一下h的选择方法,上面我说的最小二乘的cv方法就是一种,软件里面是直接根据cv数值搜索得到的。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2011-6-7 08:06:27
楼主,你这个问题比较简单,我就不帮你做了,自己做印象深,我传两个做非参的软件包给你,我以前做过,,都很容易上手,祝你好运!
附件列表

Package np 2009.pdf

大小:569.24 KB

 马上下载

SemPar.pdf

大小:1.21 MB

 马上下载

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2011-6-7 09:02:25
把数据导进R里面 再下载个非参数包 就OK了吧
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2011-6-7 10:38:22
明白了,非常感谢!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2011-6-7 12:16:33
楼主加油,楼主好运
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2011-6-7 14:46:59
你好,看了你的数据,你样本数只有这么几个,根本就不能做非参数估计,你的收敛速度会非常的小,并且从经济学含义来讲,你这个模型具有内生性问题,即使你的R^2很高,也不能说明这个结果好,因为你的模型识别已经有问题了。还有看了别人给你做的答案,通过R^2来比较两者谁好,这肯定是无法让你人信服的。还有最优bandwith的选择结果来看有under-smooth的问题,并且在你这个问题中,你所用的估计方法必须考虑边界问题,不然你估计出来那些边界会严重偏离,当然如果你用local polynomial可以解决这个问题。个人觉得你这些数据来做非参数意义真的不大,还是参数来做,并且要做model specification,单单OLS肯定有问题的。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2011-6-7 16:53:05
36朋友的说法有一定的道理,但是如果按您的指导,那将是一个perfect work,
当然得用很多时间。
2楼朋友提供的方法就我自己来看,已经很不错,比较好地解决了楼主问的每个问题。
很耐心地解决了我的疑问,非常感谢!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2011-6-7 18:14:04
真是大开眼界
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2011-6-7 20:38:38
找你的要求,我编了一个R程序:
附件列表
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2011-6-7 21:55:55
以下是39楼朋友的代码和运行结果:
y<-c(1510.2,1700.6,2026.6,2577.4,3496.2,4283,4838.9,5160.3,5425.1,5854,6280,6859.6,7702.8,8472.2,9421.6,10493,11759.5,13785.8,15780.8,17174.7)
> x<-c(1278.89,1453.81,1671.73,2110.81,2851.34,3537.57,3919.47,4185.64,4331.61,4615.91,4998,5309.01,6029.88,6510.94,7182.1,7942.88,8696.55,9997.47,11242.85,12264.55)
>
> #标准正太核函数
>  kernel.normal <- function(u){ y <- ifelse(abs(u)>=1,0, (1 - abs(u)^3)^3)}
>
> #最优窗宽h,
> library("KernSmooth")
> h<-dpill(x, y)
> h
[1] 4474.243
>
> #和回归函数
> kernel.smooth1 <- function(X, Y, kernel, h, plot.it=T){
+     x <- X
+     n<-length(X)
+     fx <- numeric(n)
+     for(j in 1:n){
+
+     fx[j] <- sum(kernel((x[j]-X)/h)*Y) /sum(kernel((x[j]-X)/h))
+     }
+     if(plot.it){
+     plot(X, Y, type="p")
+     lines(x, fx)
+     }
+     fx=fx
+   }
>
> f<-kernel.smooth1(X=x, Y=y, kernel=kernel.normal, h=h)
>
> #非参数回归的拟合值
> y.hat<-f
> y.hat
[1]  3075.116  3211.858  3373.403  3671.418  4144.037  4627.864  4941.489
[8]  5185.778  5327.592  5620.397  6039.715  6379.198  7084.285  7586.481
[15]  8434.089  9680.494 11034.642 13168.157 14707.591 15632.828
>
> #均方误差
> mse<-mean((y.hat-y)^2)
> mse
[1] 794223.4
>
>
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2011-6-7 21:57:41
以下是图,这次把图也传上来
附件列表
111.bmp

原图尺寸 379.96 KB

111.bmp

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2011-6-7 22:00:52
对39楼的朋友致以崇高的谢意!
深感论坛上高手如云和人品的伟大,向你们致敬!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2011-6-7 22:19:12
我曾经做过一元非参数核密度估计,是用R做的,下面附有整个源代码,你只要输入你的数据就行,一起分享
附件列表

新建 文本文档.txt

大小:792 Bytes

只需: 100 个论坛币  马上下载

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2011-6-7 22:36:53
个人觉得你真要把实证做好,就要懂那些计量理论,
如果你用非参数方法,至少要掌握非参数各种估计
方法的统计推断,在建立模型时必须要符合经济学
假设以及计量理论假设,否则,所得到的结果与
真实会相差很多,所以既然要用到计量模型,我们
就必须考虑这些问题。
37# zhangtao
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2011-6-8 12:48:07
刚发现我的程序中核函数编错了, 编成了三次权重函数,楼主可以把它改成正太核函数。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2011-6-8 13:34:41
45楼的朋友,要不你把程序修改后重新上传比较好!说句说话,这个正态核函数我不会改。
非常感谢!
非常赞同44楼朋友的意见!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2011-6-8 21:47:52
45# 可爱的河马
#标准正太核函数

kernel.normal <- function(u){ y <- ifelse(abs(u)>=1,0, (1 - abs(u)^3)^3)}

根据你的说法,把上面一行删除,程序运行出来的结果与以前一样,
结果如下:                      这是为什么?希望指教,谢谢!

> y<-c(1510.2,1700.6,2026.6,2577.4,3496.2,4283,4838.9,5160.3,5425.1,5854,6280,6859.6,7702.8,8472.2,9421.6,10493,11759.5,13785.8,15780.8,17174.7)
> x<-c(1278.89,1453.81,1671.73,2110.81,2851.34,3537.57,3919.47,4185.64,4331.61,4615.91,4998,5309.01,6029.88,6510.94,7182.1,7942.88,8696.55,9997.47,11242.85,12264.55)
>
>
> #最优窗宽h,
> library("KernSmooth")
> h<-dpill(x, y)
> h
[1] 4474.243
>
> #和回归函数
> kernel.smooth1 <- function(X, Y, kernel, h, plot.it=T){
+     x <- X
+     n<-length(X)
+     fx <- numeric(n)
+     for(j in 1:n){
+
+     fx[j] <- sum(kernel((x[j]-X)/h)*Y) /sum(kernel((x[j]-X)/h))
+     }
+     if(plot.it){
+     plot(X, Y, type="p")
+     lines(x, fx)
+     }
+     fx=fx
+   }
>
> f<-kernel.smooth1(X=x, Y=y, kernel=kernel.normal, h=h)
>
> #非参数回归的拟合值
> y.hat<-f
> y.hat
[1]  3075.116  3211.858  3373.403  3671.418  4144.037  4627.864  4941.489
[8]  5185.778  5327.592  5620.397  6039.715  6379.198  7084.285  7586.481
[15]  8434.089  9680.494 11034.642 13168.157 14707.591 15632.828
>
> #均方误差
> mse<-mean((y.hat-y)^2)
> mse
[1] 794223.4
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2011-6-8 21:58:18
我把核函数改成正太核, 另外均方误差是用回归值减y,平方后再平均,不知对不对?

#在R中运行前检查一下R是否安装了"KernSmooth"包,
#我输入了两个数据,后面的自己输入。
y<-c(1278.89, 1453.81, ......)
x<-c(1510.2, ......)

#标准正太核函数
kernel.normal <- function(u) (2*pi)^(-1/2)*exp(-u^2/2)
#最优窗宽h,
library("KernSmooth")
h<-dpill(x, y)
h

#和回归函数
kernel.smooth1 <- function(X, Y, kernel, h, plot.it=T){
    x <- X
    n<-length(X)
    fx <- numeric(n)
    for(j in 1:n){

    fx[j] <- sum(kernel((x[j]-X)/h)*Y) /sum(kernel((x[j]-X)/h))
    }
    if(plot.it){
    plot(X, Y, type="p")
    lines(x, fx)
    }
    fx=fx
  }

f<-kernel.smooth1(X=x, Y=y, kernel=kernel.normal, h=h)

#非参数回归的拟合值
y.hat<-f
y.hat

#均方误差
mse<-mean((y.hat-y)^2)
mse
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2011-6-9 09:22:15
y<-c(1510.2,1700.6,2026.6,2577.4,3496.2,4283,4838.9,5160.3,5425.1,5854,6280,6859.6,7702.8,8472.2,9421.6,10493,11759.5,13785.8,15780.8,17174.7)
> x<-c(1278.89,1453.81,1671.73,2110.81,2851.34,3537.57,3919.47,4185.64,4331.61,4615.91,4998,5309.01,6029.88,6510.94,7182.1,7942.88,8696.55,9997.47,11242.85,12264.55)
> #标准正太核函数
> kernel.normal <- function(u) (2*pi)^(-1/2)*exp(-u^2/2)
> #最优窗宽h,
> library("KernSmooth")
> h<-dpill(x, y)
> h
[1] 4474.243
>
> #和回归函数
> kernel.smooth1 <- function(X, Y, kernel, h, plot.it=T){
+     x <- X
+     n<-length(X)
+     fx <- numeric(n)
+     for(j in 1:n){
+
+     fx[j] <- sum(kernel((x[j]-X)/h)*Y) /sum(kernel((x[j]-X)/h))
+     }
+     if(plot.it){
+     plot(X, Y, type="p")
+     lines(x, fx)
+     }
+     fx=fx
+   }
>
> f<-kernel.smooth1(X=x, Y=y, kernel=kernel.normal, h=h)
>
> #非参数回归的拟合值
> y.hat<-f
> y.hat
[1]  5033.772  5090.737  5163.163  5314.155  5584.923  5855.052  6013.834
[8]  6128.199  6192.233  6319.659  6496.637  6645.604  7008.019  7263.194
[15]  7636.672  8083.398  8547.992  9390.117 10222.199 10903.259
>
> #均方误差
> mse<-mean((y.hat-y)^2)
> mse
[1] 8104366
MSE太大,从图上也可以看出,估计程序有问题,希望可爱的河马朋友再看看,谢谢!
附件列表
222.bmp

原图尺寸 379.96 KB

222.bmp

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2011-6-9 12:40:59
程序应该没有问题,估计是窗宽的问题,我也不会估计窗宽,直接用的dpill函数生成的窗宽,你问问其他人,谁会估计窗宽。 或者自己给定一个窗宽值,例如:h<-2000    , 多试几个窗宽值。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2011-6-10 08:53:27
自己可以编GCV来选择bandwith
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-4-19 12:33:24
学习中············
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-7-17 15:28:18
没看懂什么意思。。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2014-7-9 17:48:58
求教一下高手们,怎么求拟合值?怎么根据已经拟合出来的非参数回归对一个新的变量集求拟合值?谢谢。。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2017-4-8 11:38:32
楚韵荆风 发表于 2011-6-6 01:55
1# 起个好名字  

见下面的附件或见邮件
【有偿】您好,请问能请您来我的帖子下回答一个非参数相关的问题吗?感激不尽!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群