2012-03-12 2 views
1

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

48  54  68  79  84 

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

1.5873488 

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

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

+0

Вы видели [stats.se]? Из их [FAQ] (http://stats.stackexchange.com/faq): _ Если ваш вопрос о программировании, спросите о переполнении стека. Если язык статистически ориентирован (например, R, SAS, Stata, SPSS и т. Д.), Тогда выберите в зависимости от характера вашего вопроса: если для понимания или ответа требуется статистическая экспертиза, спросите его на [stats.se]; если речь идет об алгоритме, рутинной обработке данных или деталях языка, то, пожалуйста, обратитесь к сборнику ссылок на поддерживаемые нами ресурсы. Я не могу сказать, запрашиваете ли вы статистическую помощь или помощь по программированию. (Моя неопытность.) – sarnold

+0

Немного и того, и другого. – dplanet

ответ

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^