【问题标题】:R separating out 3 linear regression components from a mixtureR 从混合物中分离出 3 个线性回归分量
【发布时间】:2017-06-13 03:02:26
【问题描述】:

我创建了一个包含 3 个线性回归组件的数据框 dfall

x1=runif(50, min=0, max=100)
e1=runif(50, min=0, max=10)
y1 <- 0.2*x1+10+e1
y1


plot(x1,y1,col="blue")


df1 <- data.frame(x=x1,y=y1)
df1$ID <- 1
df1$col <- "red"


x2=runif(25, min=0, max=100)
e2=runif(25, min=0, max=5)
y2 <- 0.7*x2+15+e2
y2


plot(x2,y2,col="blue")


df2 <- data.frame(x=x2,y=y2)
df2$ID <- 2
df2$col <- "green"


x3=runif(35, min=0, max=100)
e3=runif(35, min=0, max=15)
y3 <- -0.5*x3+30+e3
y3


plot(x3,y3,col="blue")


df3 <- data.frame(x=x3,y=y3)
df3$ID <- 3
df3$col <- "blue"


dfall <-rbind(df1,df2,df3)
dfall
dfall <- dfall[sample(1:nrow(dfall)), ]
dfall

plot(dfall$x,dfall$y,col=dfall$col)

然后我尝试使用 kmeans 分离线性回归分量:

fitkm <- kmeans(dfall[,c(1:2)], 3) 

dfall <- data.frame(dfall, km=fitkm$cluster)
dfall

但是我的分类结果很差:

table(dfall$ID,dfall$km)

有没有更好的方法可以准确地分离出 3 个线性回归分量? 感谢您的帮助。

【问题讨论】:

  • 我觉得这个问题可能更适合stats.stackexchange.com
  • Kmeans 根据与点(中心)的距离创建聚类。基于密度的聚类算法更适合解决您的问题。尝试使用 GMM。

标签: r classification


【解决方案1】:

根据您的示例,您可能希望研究有限混合模型,这将使​​您能够恢复基础回归和分类中的参数。以下是您的数据示例:

library(mixtools)
mixmod <- regmixEM(dfall$y, dfall$x, k=3)
summary(mixmod)

输出为您提供每种观察类型的比例和系数 - lambda 是混合比例,beta1 是截距,beta2 是系数。与您的模拟数据的匹配非常好:

summary of regmixEM object:
          comp 1    comp 2    comp 3
lambda  0.315816  0.457191  0.226992
sigma   3.758362  2.463029  1.259267
beta1  36.675001 14.031268 17.338412
beta2  -0.507215  0.213874  0.699148
loglik at estimate:  -357.4478 

观察到给定类别的分配存储在mixmod 对象中mixmod$posterior 的概率矩阵中。如果我们提取分配的类并将其与真实类进行比较,则拟合非常好(请记住,混合模型分配给类的名称是任意的,这里 comp 1 是 ID 3 obvs,等等):

predclass <- unlist(apply(mixmod$posterior, 1, function(x){names(which.max(x))}))
table(dfall$ID, predclass)
   predclass
    comp.1 comp.2 comp.3
  1      2     48      0
  2      0      0     25
  3     31      4      0

R here 中对混合模型及其实现有很好的概述和解释。

【讨论】:

  • 感谢您的帮助。这正是我所需要的。如果这是未知的,有没有办法确定最佳 k?
  • 我不知道,但我不能声称对这些模型有任何特殊的专业知识。由于您正在为 $y$ 生成预测,因此我将使用交叉验证来尝试选择合理的 $k$ 值。 Cosma Shalizi 的《从基本观点的高级数据分析》中有一个很好的章节介绍了这些模型,您可以在网上找到免费的 pdf 副本,我很确定他已经在 R 中做过这样的例子。
猜你喜欢
  • 2021-12-24
  • 1970-01-01
  • 2014-09-21
  • 2010-11-13
  • 1970-01-01
  • 2018-07-26
  • 2012-01-30
  • 1970-01-01
相关资源
最近更新 更多