【发布时间】:2011-05-16 23:30:45
【问题描述】:
我有一个带有数字的矩阵(大小:28 列和 47 行)。该矩阵有一个额外的行,其中包含列的标题(“序数”和“标称”)。
我想在这个矩阵上使用 Gower 距离函数。 Here 说:
第 i 个和第 j 个单元之间的最终差异作为每个变量差异的加权和获得:
d(i,j) = sum_k(delta_ijk * d_ijk ) / sum_k( delta_ijk )
特别是,d_ijk 表示考虑第 k 个变量计算的第 i 个和第 j 个单元之间的距离。这取决于变量的性质:
-
因子或字符列是 被视为分类名义 变量和
d_ijk = 0ifx_ik =x_jk,否则为 1;
有序列被视为 分类序数变量和
这些值被替换为
对应的位置索引,r_ik in 因子水平。这些位置
索引(不同于 R 函数等级的输出)是
转化为如下方式
z_ik = (r_ik - 1)/(max(r_ik) - 1)
这些新值 z_ik 被视为对一个
区间标度变量。
就权重delta_ijk而言:
- delta_ijk = 0 如果 x_ik = NA 或 x_jk = 不适用;
- delta_ijk = 1 在所有其他情况下。
我知道有一个 gower.dist 函数,但我必须这样做。 所以,对于“d_ijk”、“delta_ijk”和“z_ik”,我尝试制作函数,因为我没有找到更好的方法。
我从“delta_ijk”开始,我尝试了这个:
Delta=function(i,j){for (i in 1:28){for (j in 1:47){
+{if (MyHeader[i,j]=="nominal")
+ result=0
+{else if (MyHeader[i,j]=="ordinal") result=1}}}}
+;result}
但我得到了错误。所以我被卡住了,我不能做剩下的事情。
附:如果我犯了错误,请见谅,但英语不是我经常使用的语言。
【问题讨论】:
-
您能否将您的数据重新发布为 zip 或 tar.gz 文件。我的 linux 盒子不会打开 rar 档案,除非我不遗余力地找出什么应用程序会打开它们。如果你这样做,我很乐意看看。