我有以下数据矩阵,我正在读到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如何做到这一点吗?
答案 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;