今天,我使用以下代码检查数据的非参数密度估计的正态性。但是,我得到错误说:
width.SJ(bc.mdat[, 2]) :
no solution in the specified range of bandwidths
所以,我不知道为什么会发生这种错误。因为我用另一个数据做得很好。谢谢你的帮助
library(car)
library(MASS)
library(graphics)
Q=read.table(text='
12.5 13.7
14.5 16.5
8.0 17.4
9.0 11.0
19.5 23.6
8.0 13.2
9.0 32.1
7.0 12.3
7.0 11.8
9.0 24.4
6.5 18.2
10.5 22.0
10.0 32.5
4.5 18.7
7.0 15.8
8.5 15.6
6.5 12.0
8.0 12.8
3.5 26.1
8.0 14.5
17.5 42.3
10.5 17.5
12.0 21.8
6.0 10.4
13.0 25.6
')
bc=powerTransform(as.matrix(Q)~1)
summary(bc)
bc.mdat<-bcPower(Q,bc$lambda)
f2=kde2d(bc.mdat[,1],bc.mdat[,2],h=c(width.SJ(bc.mdat[,1]),width.SJ(bc.mdat[,2])))
persp(f2,phi=30,theta=20,d=5)
答案 0 :(得分:1)
应用一些简单的调试表明问题出在第二列,即
> width.SJ(bc.mdat[,2])
Error in width.SJ(bc.mdat[, 2]) :
no solution in the specified range of bandwidths
问题在于mc.mdat[,2]
,如下所示:
[1] 1.267853 1.300541 1.309183 1.223900 1.353462 1.260837 1.390182 1.247041 1.238636 1.357801 1.316270 1.344016 1.391514 1.320446 1.293266 1.291090 1.242067 1.254902 1.366288 1.278246 1.417488 1.310098
[23] 1.342756 1.211639 1.363888
在width.SJ
函数中计算的值(只需键入width.SJ
并按Enter键查看函数体),即
> fSD(lower, cnt, alph2, c1, n, d)
[1] 0.003946731
> fSD(upper, cnt, alph2, c1, n, d)
[1] 0.002883121
乘以大于0
,并且可能这是某种奇点条件。
if (fSD(lower, cnt, alph2, c1, n, d) * fSD(upper, cnt, alph2,
c1, n, d) > 0)
stop("no solution in the specified range of bandwidths")
此处fSD
是function (h, x, alph2, c1, n, d) (c1/SDh(x, alph2 * h^(5/7), n, d))^(1/5) - h
给出的函数。
如果不深入研究数学,我不确定这可能意味着什么,但希望这个粗略的调试会议足以让你开始。解决方案无疑是修复您的数据集,或理解为什么它是单一的。我已经尝试使用combn
删除最多四个数据点,但遇到了同样的问题,因此这是一个基本的完整性问题。