SAS中数据矩阵的置信区间

时间:2012-03-12 01:38:35

标签: sas

我有以下数据矩阵,我正在读到SAS:

1         5        12        19        13
6         3         1         3        14
2         7        12        19        21
22        24        21        29        18
17        15        22         9        18

它代表了环境的5个不同区域(列)中的5种不同种类的动物(行)。我想得到整个环境的Shannon多样性指数,所以我将行总和得到:

48        54        68        79        84

然后从中计算出Shannon指数,得到:

1.5873488

然而,我需要做的是计算此香农指数的置信区间。所以我想在初始矩阵上执行非参数自举。

有人可以建议SAS如何做到这一点吗?

1 个答案:

答案 0 :(得分:2)

在SAS中有几种方法可以做到这一点。我将使用proc surveyselect生成引导样本,然后计算每个复制的香农指数。 (我不知道香农指数是什么,所以我的代码只是基于我在维基百科上读到的内容。)

data animals;
    input v1-v5;
    cards;
1         5        12        19        13
6         3         1         3        14
2         7        12        19        21
22        24        21        29        18
17        15        22         9        18
run;

/* Generate 5000 bootstrap samples, with replacement */
proc surveyselect data=animals method=urs n=5 reps=5000 seed=10024 out=boots;
run;

/* For each replicate, calculate the sum of each variable */
proc means data=boots noprint nway;
    class replicate;
    var v:;
    output out=sums sum=;
run;

/* Calculate the proportions, and p*log(p), which will be used next */
data sums;
    set sums;
    ttl=sum(of v1-v5);
    array ps{*} p1-p5;
    array vs{*} v1-v5;
    array hs{*} h1-h5;
    do i=1 to dim(vs);
        ps{i}=vs{i}/ttl;
        hs{i}=ps{i}*log(ps{i});
    end;
    keep replicate h:;
run;

/* Calculate the Shannon Index, again for each replicate */
data shannon;
    set sums;
    shannon = -sum(of h:);
    keep replicate shannon;
run;

我们现在有一个数据集shannon,其中包含为5000个bootstrap样本计算的Shannon指数。您可以使用它来计算 p - 值,但如果您只想要关键值,则可以运行proc means(或univariate如果您想要5%的值,就像我一样不认为用proc means得到97.5分位数是可能的。

proc means data=shannon mean p1 p5 p95 p99;
    var shannon;
run;