楼主: 起个好名字
17206 54

[有偿编程] 求高手用R或者其他软件解决一元个非参数回归方面的问题 [推广有奖]

31
楚韵荆风 学生认证  发表于 2011-6-6 20:34:06
30# zhangtao

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

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

Package np 2009.pdf
下载链接: https://bbs.pinggu.org/a-921164.html

569.24 KB

SemPar.pdf

1.21 MB

已有 1 人评分学术水平 热心指数 信用等级 收起 理由
起个好名字 + 1 + 1 + 1 谢谢啦

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

努力,努力,再努力

33
weihancool 发表于 2011-6-7 09:02:25
把数据导进R里面 再下载个非参数包 就OK了吧
国士无双

34
zhangtao 发表于 2011-6-7 10:38:22
明白了,非常感谢!

35
严防死守吧 发表于 2011-6-7 12:16:33
楼主加油,楼主好运

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

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

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

38
sushe1527 发表于 2011-6-7 18:14:04
真是大开眼界

39
可爱的河马 发表于 2011-6-7 20:38:38
找你的要求,我编了一个R程序:

新建 文本文档.txt

757 Bytes

已有 1 人评分热心指数 收起 理由
起个好名字 + 1 谢谢啦

总评分: 热心指数 + 1   查看全部评分

40
zhangtao 发表于 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
>
>
数学好就是要天天学

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-31 21:04