楼主: 打败Erik
1768 2

[问答] R做判别分析求助 [推广有奖]

  • 0关注
  • 0粉丝

已卖:1份资源

高中生

97%

还不是VIP/贵宾

-

威望
0
论坛币
1714 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
1240 点
帖子
15
精华
0
在线时间
54 小时
注册时间
2012-9-7
最后登录
2024-2-16

楼主
打败Erik 发表于 2013-5-14 18:35:55 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
写了一个函数进行bayes判别分析,当待测样本为NULL时运行无问题,但待测样本不为空时就出错,求大神指点
distinguish.bayes<-function
   (TrnX, TrnG, p=rep(1, length(levels(TrnG))),
    TstX = NULL, var.equal = FALSE){
   if ( is.factor(TrnG) == FALSE){
       mx<-nrow(TrnX); mg<-nrow(TrnG)
       TrnX<-rbind(TrnX, TrnG)
       TrnG<-factor(rep(1:2, c(mx, mg)))
   }
   if (is.null(TstX) == TRUE) TstX<-TrnX
   if (is.vector(TstX) == TRUE)  TstX<-t(as.matrix(TstX))
   else if (is.matrix(TstX) != TRUE)
      TstX<-as.matrix(TstX)
   if (is.matrix(TrnX) != TRUE) TrnX<-as.matrix(TrnX)

   nx<-nrow(TstX)
   blong<-matrix(rep(0, nx), nrow=1, dimnames=list("blong", 1:nx))
   g<-length(levels(TrnG))
   mu<-matrix(0, nrow=g, ncol=ncol(TrnX))
   for (i in 1:g)
      mu[i,]<-colMeans(TrnX[TrnG==i,])
   D<-matrix(0, nrow=g, ncol=nx)
   if (var.equal == TRUE  || var.equal == T){
      for (i in 1:g){
         d2 <- mahalanobis(TstX, mu[i,], var(TrnX))
         D[i,] <- d2^2 - 2*log(p[i])
      }
   }
   else{
      for (i in 1:g){
         S<-var(TrnX[TrnG==i,])
         d2 <- mahalanobis(TstX, mu[i,], S)
         D[i,] <- d2^2 -2*log(p[i])+log(det(S))
      }
   }
   for (j in 1:nx){
      dmin<-Inf
      for (i in 1:g)
          if (D[i,j]<dmin){
             dmin<-D[i,j]; blong[j]<-i
      }
   }
   blong
}
class1<-data.frame(
x1=c(0.045,0.066,0.094,0.003,0.048,0.210,0.086,0.196,0.187,0.053,0.020,0.035,0.205,0.088),
x2=c(0.043,0.039,0.061,0.003,0.015,0.066,0.072,0.072,0.082,0.060,0.008,0.015,0.068,0.058),
x3=c(0.265,0.264,0.194,0.102,0.106,0.263,0.274,0.211,0.301,0.209,0.112,0.170,0.284,0.215)
)
class1

class2<-data.frame(
x1=c(0.101,0.045),
x2=c(0.052,0.005),
x3=c(0.181,0.122)
)
class2

temp=c(2,2,2,3,3,1,2,1,1,2,3,3,1,2)
t=factor(temp)
t

bartlett.test(class1,t)

distinguish.bayes(class1,t,class2)
distinguish.bayes(class1,t)
distinguish.bayes(class1,t,class2,var.equal=T)
distinguish.bayes(class1,t,var.equal=T)
二维码

扫码加我 拉你入群

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

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

关键词:分析求助 判别分析 distinguish Bayes baye 样本

沙发
trier2006 发表于 2013-5-15 08:52:17
帮顶
最好的医生是自己,最好的药物是时间……

藤椅
DM小菜鸟 发表于 2015-2-13 17:10:48
因为看不到具体格式,我是感觉,前面你做了“TstX = NULL”
后面的 if (is.null(TstX) == TRUE) 后面,但是感觉逻辑不对
所以不等于TRUE的时候就出问题了
(纯属感觉,要不带前面空格的,您受累再贴一下)

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-30 12:15