请选择 进入手机版 | 继续访问电脑版
楼主: 、无衣
3347 6

[问答] 自己照书写的马氏距离判别法的程序,但是报错 [推广有奖]

  • 0关注
  • 1粉丝

本科生

72%

还不是VIP/贵宾

-

威望
0
论坛币
16 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
1919 点
帖子
38
精华
0
在线时间
115 小时
注册时间
2015-10-5
最后登录
2019-11-9

、无衣 发表于 2016-4-27 19:21:36 |显示全部楼层 |坛友微信交流群

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
  1. discriminant.distance<-function(x,type,var.equal=TRUE){
  2.   if(is.data.frame(x)!=TRUE) x<-as.data.frame(x)
  3.   if(is.factor(x$type)!=TRUE) x$type<-factor(x$type)
  4.   library(dplyr)
  5.   n<-nrow(x);m<-ncol(x);k<-length(levels(x$type))
  6.   mu<-matrix(0,nrow = k,ncol = m-1)
  7.   S<-matrix(0,nrow = m-1,ncol = m-1)
  8.   y<-as.matrix(select(x,-type))
  9.   for(j in 1:k){
  10.     a<-select(filter(x,type=="j"),-type)
  11.     mu[j,]<-apply(a,2,mean)
  12.     S<-S+nrow(a)*cov(a)
  13.   }
  14.   S<-S/(n-k)
  15.   d<-matrix(0,nrow = n,ncol = k)
  16.   for(i in 1:n){
  17.     for(j in i:k){
  18.       d[i,j]<-t(y[i,]-mu[j,])%*%solve(S)%*%(y[i,]-mu[j,])
  19.     }
  20.   }
  21.   result<-matrix(0,nrow = 1,ncol = n)
  22.   for(i in 1:n){
  23.     result[i]<-which.min(d[i,])
  24.   }
  25.   result
  26. }
复制代码
报错如下,意思应该是下标越界?但是回头查看了下感觉没有问题啊TAT
Error in mu[j, ] : subscript out of bounds
Called from: t(y[i, ] - mu[j, ])
求大神们支招,感激不尽

二维码

扫码加我 拉你入群

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

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

关键词:马氏距离 discriminant Discriminan Distance discrim 程序

、无衣 发表于 2016-4-27 19:31:50 |显示全部楼层 |坛友微信交流群
  1. df<-data.frame(x1=c(6,-11,90.2,-4,0,0.5,-10,0,20,-100,-100,13,-5,10,-8,0.6,-40),x2=c(-11.5,-18.5,-17,-15,-14,-11.5,-19,-23,-22,-21.4,-21.5,-17.2,-18.5,-18,-14,-13,-20),x3=c(19,25,17,13,20,19,21,5,8,7,15,18,15,14,16,26,22),x4=c(90,-36,3,54,35,37,-42,-35,-20,-15,-40,2,18,50,56,21,-50),type=c("1","3","2","1","2","3","3","1","3","1","2","2","1","1","1","3","3"))
复制代码


这是测试用的数据集

使用道具

jinkelazzz 发表于 2016-4-28 08:21:29 |显示全部楼层 |坛友微信交流群
你的n>k吗?

使用道具

、无衣 发表于 2016-4-28 10:08:11 |显示全部楼层 |坛友微信交流群
jinkelazzz 发表于 2016-4-28 08:21
你的n>k吗?
对的,n是总样本容量,k是类别数

使用道具

jinkelazzz 发表于 2016-4-28 10:31:58 |显示全部楼层 |坛友微信交流群
j in 1:k 不是i:k

使用道具

、无衣 发表于 2016-4-28 10:45:15 |显示全部楼层 |坛友微信交流群
jinkelazzz 发表于 2016-4-28 10:31
j in 1:k 不是i:k
我去- -这里是我写错了。。但是改完后发现还是不对,我在程序最后输出距离矩阵d,显示的全是NaN。。

使用道具

、无衣 发表于 2016-4-28 10:49:13 |显示全部楼层 |坛友微信交流群
jinkelazzz 发表于 2016-4-28 10:31
j in 1:k 不是i:k
不光是d,只要是通过循环赋值的矩阵,比如S,最后都显示是NaN。。

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-19 09:15