微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

数据太长 R FlexmixNL 包中的错误

如何解决数据太长 R FlexmixNL 包中的错误

我尝试在网上搜索内容,但无法完全弄清楚我的问题是什么。这是我的代码

n = 10000
x1 <- runif(n,100) 
x2 <- runif(n,100) 
y1 <- 10*sin(x1/10) + 10 + rnorm(n,sd = 1)
y2 <- x2 * cos(x2) - 2 * rnorm(n,sd = 2)
x <- c(x1,x2)
y <- c(x1,x2)
start1 = list(a = 10,b = 5)
start2 = list(a = 30,b = 5)
library(flexmix)
library(flexmixNL)

modelNL <- flexmix(y~x,k =2,model = FLXMRnlm(formula = y ~ a*x/(b+x),family = "gaussian",start = list(start1,start2))) 

plot(x,y,col = clusters(modelNL))

在情节之前,它给了我这个错误

Error in matrix(1,nrow = sum(groups$groupfirst)) : data is too long

我检查了 google 是否有类似的错误,但我不太明白我自己的代码有什么问题导致了这个错误

正如您已经知道的,我对 R 非常陌生,所以请尽可能用最外行的术语解释它。提前致谢。

解决方法

具有讽刺意味的是(在错误消息说数据“太长”的上下文中)我认为该错误的直接原因是没有 data 参数。如果你以数据帧的形式给它 data,你仍然会得到一个错误,但它与你遇到的不同。当您绘制数据时,至少从统计分布的角度来看,您会得到一组相当奇怪的值,并且不清楚为什么要尝试使用此公式对其进行建模。尽管如此,有了这些起始值和数据的数据框参数,就可以看到结果。

> modelNL <- flexmix(y~x,k =2,data=data.frame(x=x,y=y),+                    model = FLXMRnlm(formula = y ~ a*x/(b+x),+                                     family = "gaussian",+                                     start = list(start1,start2)))
> modelNL

Call:
flexmix(formula = y ~ x,data = data.frame(x = x,y = y),k = 2,model = FLXMRnlm(formula = y ~ 
    a * x/(b + x),family = "gaussian",start = list(start1,start2)))

Cluster sizes:
    1     2 
 6664 13336 

convergence after 20 iterations
> summary(modelNL)

Call:
flexmix(formula = y ~ x,start2)))

       prior  size post>0 ratio
Comp.1 0.436  6664  20000 0.333
Comp.2 0.564 13336  16306 0.818

'log Lik.' -91417.03 (df=7)
AIC: 182848.1   BIC: 182903.4 

大多数 R 回归函数首先检查 data= 参数中公式中的匹配名称。显然,这个函数在需要去全局环境匹配公式标记时失败了。

我尝试了数据图建议的公式并得到收敛结果:

> modelNL <- flexmix(y~x,+                    model = FLXMRnlm(formula = y ~ a*x*cos(x+b),model = FLXMRnlm(formula = y ~ 
    a * x * cos(x + b),start2)))

Cluster sizes:
    1     2 
 9395 10605 

convergence after 17 iterations
> summary(modelNL)

Call:
flexmix(formula = y ~ x,start2)))

       prior  size post>0 ratio
Comp.1 0.521  9395  18009 0.522
Comp.2 0.479 10605  13378 0.793

'log Lik.' -78659.85 (df=7)
AIC: 157333.7   BIC: 157389 

与第一个公式相比,AIC 的减少似乎很大。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。