Доверительные интервалы на матрице данных в SAS - PullRequest
1 голос
/ 12 марта 2012

У меня есть следующая матрица данных, которые я читаю в 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 различных областях среды (столбцы). Я хочу получить индекс разнообразия Шеннона для всей среды, поэтому я суммирую строки, чтобы получить:

48        54        68        79        84

Затем рассчитайте индекс Шеннона, чтобы получить:

1.5873488

Однако мне нужно вычислить доверительный интервал для этого индекса Шеннона. Поэтому я хочу выполнить непараметрическую загрузку начальной матрицы.

Кто-нибудь может посоветовать, как это возможно в SAS?

1 Ответ

2 голосов
/ 12 марта 2012

Есть несколько способов сделать это в 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 образцов начальной загрузки.Вы можете использовать это для вычисления p -значений, но если вы просто хотите критические значения, вы можете запустить proc means (или univariate, если вы хотите 5% -ное значение, так как я не думаю, что этоможно получить 97,5 квантилей с proc means).

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