cattell的轮廓相似系数(Rp)是否作为R中的函数存在?

时间:2015-03-22 07:36:57

标签: r

我正在比较R中矢量剖面(Subtest结果)的距离和相似度的不同度量,其中大多数都易于计算和/或存在于dist()中。 不幸的是,一个可能有趣并且难以让我自己计算的是 Cattel的Rp 。我在R中找不到它 有人知道这是否已存在? 或者你能帮我写一个函数吗?

Rp的公式(Cattell 1994)是这样的:

(2k-d^2)/(2k + d^2)

其中:

k是大小为n的样本的卡方的中位数;

d是两个配置文件之间(加权= m)差异的总和, 好像:sum(m(x(i)-y(i)));

我不知道的一件事是,如何获得那里的卡方中位数

谢谢

没有定义k,我得到的是:

Rp.Cattell <- function(x,y){z <- (2k-(sum(x-y))^2)/(2k+(sum(x-y))^2);return(z)}

矢量示例是:

x <- c(-1.2357,-1.1999,-1.4727,-0.3915,-0.2547,-0.4758)

y <- c(0.7785,0.9357,0.7165,-0.6067,-0.4668,-0.5925)

它们是同一设备的测量,但与不同的身体部位有关。我想说,它们不需要标准化或加权。

3 个答案:

答案 0 :(得分:1)

This page给出了k的通用公式,然后使用SAS/IML给出了一个更彻底的方法,它几乎给出了相同的结果。所以我使用了通用公式,增加了自由度的计算,这导致了这个:

Rp.Cattell <- function(x,y) { 
    dof <- (2-1) * (length(y)-1)
    k <- (1-2/(9*dof))^3
    z <- (2*k-sum(sum(x-y))^2)/(2*k+sum(sum(x-y))^2)
    return(z)
}

x <- c(-1.2357,-1.1999,-1.4727,-0.3915,-0.2547,-0.4758)
y <- c(0.7785,0.9357,0.7165,-0.6067,-0.4668,-0.5925)

Rp.Cattell(x, y)

# [1] -0.9012083

这个数字看起来有意义吗?

答案 1 :(得分:0)

试图验证这个功能,我现在发现chisquare的中位数是50%概率的chisquare值 - 与随机相关。所以功能应该是:

Rp.Cattell <- function(x,y){
    dof <- (2-1) * (length(y)-1)
      k <- qchisq(.50, df=dof)
      z <- (2k-(sum(x-y))^2)/(2k+(sum(x-y))^2);
      return(z)}

虽然之前要对标准化值进行必要,但结果才能正确分配。

所以:

library ("stringr")

# they are centered already    
x <- as.vector(scale(c(-1.2357,-1.1999,-1.4727,-0.3915,-0.2547,-0.4758),center=F, scale=T)) 

y <- as.vector(scale(c(0.7785,0.9357,0.7165,-0.6067,-0.4668,-0.5925),center=F, scale=T))

Rp.Cattell(x, y)  -0.584423

现在这听起来很合理 - 还是没有?

答案 2 :(得分:0)

我认为z的计算不正确。

您需要计算平方差的总和。不是差异总和的平方。此外2k中缺少产品运算符。

应该是

z <- (2*k-sum((x-y)^2))/(2*k+sum((x-y)^2))

你同意吗?