انجمن‌های فارسی اوبونتو

لطفاً به انجمن‌ها وارد شده و یا جهت ورود ثبت‌نام نمائید

لطفاً جهت ورود نام کاربری و رمز عبورتان را وارد نمائید

نویسنده موضوع: محاسبات آماری با سایلب و آر  (دفعات بازدید: 16101 بار)

0 کاربر و 1 مهمان درحال مشاهده موضوع.

آفلاین alend

  • High Hero Member
  • *
  • ارسال: 1109
محاسبات آماری با سایلب و آر
« : 05 فروردین 1392، 10:46 ق‌ظ »
در اینجا قصد داریم به نحوه انجام محاسبات آماری در R  و scilab به کمک دوستم akhorshidi بپردازیم.

براساس گفته آلبرت اینشتین مثال زدن یکی از روشهای آموزش نیست بلکه تنها راه آن است. بنابراین تمامی این آموزش براساس مثال خواهد بود.

(مدیران لطف کنند این تاپیک را جزو تاپیک های مهم قرار دهند)

معادلهای scilab بعداز پست دوستم akhorshidi اضافه شده است.

در ابتدا یک جمعیت با ۱۰۰۰ عضو ایجاد می کنیم که دارای توزیع نرمال است با میانگین صفر و انحراف معیار یک:

کد R:

data=rnorm(1000)
معادل در scilab:

data=rand(1:1000,"normal")
به صورت پیش فرض میانگین صفر و انحراف معیار یک است.


هیستوگرام هم یکی از راهها جهت تشخیص توزیع یک سری داده است:

کد R:

hist(data)
معادل در scilab:

histplot(10,a)
۱۰ تعداد شکستگی هادر هیستوگرام است معادل breaks در R


میانگین و میانه هم توسط دستورات زیر محاسبه می شود:

کد R:

mean(data)
median(data)

معادل در scilab:
mean(data)
median(a)

انحراف معیار و واریانس هم به ترتیب توسط دستورات زیرمحاسبه می گردد:

sd(data)
var(data)

برای ترسیم density histogram از دستورات زیر می توان استفاده کرد:
hist(data,prob=T)
lines(density(data))
دستور lines خطی بر روی نمودار موجود ترسیم میکند.




« آخرین ویرایش: 05 فروردین 1392، 03:18 ب‌ظ توسط alend »

آفلاین Scilab.IR

  • Jr. Member
  • *
  • ارسال: 59
  • !Everything is a Matrix
پاسخ : محاسبات آماری با سایلب و آر
« پاسخ #1 : 05 فروردین 1392، 01:55 ب‌ظ »
سلام –  امیدوارم در پایان یک تاپیک جامع و قابل استناد برای مباحث آماری داشته باشیم.
(داخل پرانتز بگم که این آموزش با این فرض نگاشته می‌شود که دانش کاربران از آمار در حد دوم دبیرستان باشد .

و اینکه اگر معادل انگلیسی اصطلاحات آماری نیز ذکر بشود، مفید خواهد بود!


زبان آر: (در تکمیل صحبت‌های شما)
جمعیتی با ۱۰۰۰ عضو ایجاد کردیم برای نمونه‌‌برداری از تابع sample استفاده می‌کنیم. فرض کنیم ۲۰ نمونه لازم داریم:

نمونه‌گیری با جایگذاری (Sampling with replacement)
sample(data,20,replace=T)
نمونه‌گیری بدون جایگذاری (Sampling without replacement)
sample(data,20,replace=F)

[یه سوال؟] توی سایلب برای تولید اعداد تصادفی از تابع rand  استفاده می‌کنیم که نوع توزیع اون‌ها یا نرماله و یا یکنواخت. تفاوت  uniform distribution و  normal distribution چیه؟



سایلب:

تابع rand: تولید عناصر تصادفی (یا از توزیع نرمال یا از توزیع یکنواخت)
آرگومان اول و دوم در تابع rand اندازه‌ی ماتریس مورد نظر را مشخص می‌کند. آرگومان سوم انتخابی بوده و به‌صورت پیش‌فرض مقدار آن برابر uniform می‌باشد.


معادل تابع متلب (B=rand (A در سایلب (B=rand(A ویا (B=rand(A,A ویا (["B=rand(A[,"uniform می‌باشد که اعداد تصادفی حقیقی بین  (0,1] تولید می‌کند.


معادل تابع متلب (B=randn(A در سایلب ("B=rand(A,"normal ویا("B=rand(A,A,"normal می‌باشد  که اعداد تصادفی حقیقی به‌گونه‌ای تولید می‌کند که میانگین صفر و انحراف معیار یک ‌باشد.


الف) ایجاد یک جمعیت ۴۰ نفره:


rand(5,8,"normal")
rand(5,8,"uniform")
rand(5,8)
rand(4,10)
rand(1:40)


توابع floting point:
فهرست زیر  توابع موجود در دسته‌ی floting point بوده که مقدار صحیح یک عدد اعشاری را بر‌می‌گرداند:
ceil ; floor ; fix ; int ; round

مثال:
-->ceil([1.3 1.5 1.7 2.5 3.7])
 ans  =
 
    2.    2.    2.    3.    4. 
 
-->floor([1.3 1.5 1.7 2.5 3.7])
 ans  =
 
    1.    1.    1.    2.    3. 
 
-->fix([1.3 1.5 1.7 2.5 3.7])
 ans  =
 
    1.    1.    1.    2.    3. 
 
-->int([1.3 1.5 1.7 2.5 3.7])
 ans  =
 
    1.    1.    1.    2.    3. 
 
-->round([1.3 1.5 1.7 2.5 3.7])
 ans  =
 
    1.    2.    2.    3.    4. 


ب) انتخاب تصادفی چند نمونه:

بیست نمونه بین صفر تا ۴۰
-->y4=int(rand(4,5)*40)
بیست نمونه بین یک تا ۴۰
-->y3=ceil(rand(4,5)*40)
بیست نمونه بین ۱۱ تا ۴۰
-->y2=ceil(rand(4,5)*30)+10

بیست نمونه بین ۱۰ تا ۳۹
-->y1=int(rand(4,5)*30)+10
 y1  =
 
    25.    13.    33.    10.    17. 
    31.    36.    29.    27.    29. 
    36.    26.    17.    39.    19. 
    27.    36.    36.    25.    27.



توابع Summaries

nfreq — فراوانی مقادیر یک بردار یا ماتریسی از اعداد حقیقی یا مختلط
tabul — فراوانی مقادیر یک بردار یا ماتریسی از اعداد حقیقی یا مختلط و یا رشته‌های کاراکتری


[یه سوال؟] آیا توی آمار واژه‌ی summary به مفهوم خاصی اشاره دارد؟ چون راهنمای سایلب توابع nfreq و tabul  را در دسته‌‌ای با نام « Summaries » قرار داده است.


-->f1=nfreq(y1)
 f1  =
 
    25.    2. 
    31.    1. 
    36.    4. 
    27.    3. 
    13.    1. 
    26.    1. 
    33.    1. 
    29.    2. 
    17.    2. 
    10.    1. 
    39.    1. 
    19.    1. 


در پست بعدی به رسم هیستوگرام و مباحث مرتبط و نیز توابع نمونه‌برداری می‌پردازیم.

HTH
Mehran
ـ


« آخرین ویرایش: 13 بهمن 1395، 05:32 ب‌ظ توسط Scilab.IR »

آفلاین alend

  • High Hero Member
  • *
  • ارسال: 1109
پاسخ : محاسبات آماری با سایلب و آر
« پاسخ #2 : 05 فروردین 1392، 02:31 ب‌ظ »
نقل‌قول
[یه سوال؟] توی سایلب برای تولید اعداد تصادفی از تابع rand  استفاده می‌کنیم که نوع توزیع اون‌ها یا نرماله و یا یکنواخت. تفاوت  uniform distribution و  normal distribution چیه؟

توزیع نرمال:
http://en.wikipedia.org/wiki/Normal_distribution

توزیع یکنواخت:
http://en.wikipedia.org/wiki/Uniform_distribution_%28continuous%29


لیست توزیع های آماری:

http://en.wikipedia.org/wiki/Statistical_distribution


نقل‌قول
[یه سوال؟] آیا توی آمار واژه‌ی summary به مفهوم خاصی اشاره دارد؟ چون راهنمای سایلب توابع nfreq و tabul  را در دسته‌‌ای با نام « Summaries » قرار داده است.

http://en.wikipedia.org/wiki/Summary_statistic

« آخرین ویرایش: 05 فروردین 1392، 02:34 ب‌ظ توسط alend »

آفلاین alend

  • High Hero Member
  • *
  • ارسال: 1109
پاسخ : محاسبات آماری با سایلب و آر
« پاسخ #3 : 05 فروردین 1392، 03:17 ب‌ظ »
چه جوری در scilab یک عدد را ۱۰۰۰ بار تکرار می کنیم و در داخل یک متغیر قرار می دهیم.
« آخرین ویرایش: 05 فروردین 1392، 03:24 ب‌ظ توسط alend »

آفلاین Scilab.IR

  • Jr. Member
  • *
  • ارسال: 59
  • !Everything is a Matrix
پاسخ : محاسبات آماری با سایلب و آر
« پاسخ #4 : 05 فروردین 1392، 03:37 ب‌ظ »
چه جوری در scilab یک عدد را ۱۰۰۰ بار تکرار می کنیم و در داخل یک متغیر قرار می دهیم.
مطمئنا روش‌های زیادی با توجه به جایگاه و کاربردی که مدنظره، وجود داره ولی چیزی که الان به ذهنم میرسه:

فرض اگر عدد مورنظر تون ۱۳۹۲ باشه:
v=ones(1,1000)*1392

_

آفلاین Scilab.IR

  • Jr. Member
  • *
  • ارسال: 59
  • !Everything is a Matrix
پاسخ : محاسبات آماری با سایلب و آر
« پاسخ #5 : 06 فروردین 1392، 10:23 ق‌ظ »

برای تولید اعداد تصادفی بر اساس توزیع‌های مختلف از تابع grand استفاده می‌کنیم. برای مثال  برای تولید اعداد تصادفی از توزیع نرمال (Gauss Laplace or normal distribution) داریم:

Y=grand(m, n, "nor", mean, standard-deviation)
 mو n اندازه‌ی ماتریس جواب (Y) را مشخص می‌کنند(m تعداد سطر‌ها و  nتعداد ستون‌ها)
آرگومان سوم نشان‌دهنده‌ی نوع توزیع مورد‌نظر می‌باشد؛ اینجا «نرمال»
آرگومان چهارم: مقدار میانگین (یک عدد حقیقی)
آرگومان پنجم: مقدار انحراف معیار (یک عدد حقیقی نامنفی)
مثال:
// Returns a 400-by-800 matrix of random doubles,
// with normal distribution and average 0 and standard deviation 1.
R = grand(400,800,"nor",0,1);
scf();
histplot(10,R);
xtitle("Normal random numbers from grand","X","Frequency");


برای رسم یک هیستوگرام در فضای 2D از تابع histplot و در فضای از 3D از تابع hist3d   استفاده می‌کنیم. (به ترتیب زیر)
histplot(classes, data, <opt_args>)
hist3d(matrix, <opt_args>)

آرگومان اول در تابع histplot تعداد دسته‌ها (جعبه‌ها) را مشخص می‌کند.
آرگومان دوم در تابع histplot ، داده‌هایی که باید آنالیز شوند را تعریف می‌کند.
آرگومان سوم در تابع histplot انتخابی بوده و همان پارامتر‌های اختیاری تابع plot2d  می باشند؛ مثلاً رنگ نمودار.
به صورت پیش‌فرض مقیاس محور y نرمال‌شده بوده و سطح زیر نمودار هیستوگرام برابر یک می‌باشد. اگر بخواهید روی محور y، تعداد مقادیر هر دسته نشان داده شود مقدار normalization=%f را در آرگومان سوم قرار دهید.
مثال:
d=rand(1,1000,'normal');  // the gaussian random sample
clf();histplot(20,d)
clf();histplot(20,d,normalization=%f)

آرگومان دوم  در تابع hist3d انتخابی بوده و برخی از پارامتر‌های اختیاری تابع plot3d را شامل می شود؛
مثال:
a=(10*rand(2,2))
hist3d(a)


[یه سوال؟] در توضیح این‌که چرا مقیاس محور y به صورت پیش‌فرض نرمال‌شده می‌باشد، آمده:
This is default comportment of histplot  because plotting the histograms of a sequence of values of  a random variable X, histograms will "converge" to the graph of the density of X.

منظور از نموداری از چگالی X چیه؟

یا شما در پست اول گفته‌اید:

برای ترسیم density histogram از دستورات زیر می توان استفاده کرد:
hist(data,prob=T)
lines(density(data))

۱-  چه تفاوتی بین نمودار density histogram و histogram هست؟
۲- منظور از چگالی یک متغیر آماری چیست؟



HTH
Mehran

ـ

آفلاین alend

  • High Hero Member
  • *
  • ارسال: 1109
پاسخ : محاسبات آماری با سایلب و آر
« پاسخ #6 : 06 فروردین 1392، 04:41 ب‌ظ »
نقل‌قول
۱-  چه تفاوتی بین نمودار density histogram و histogram هست؟

http://www.math.leidenuniv.nl/~gill/teaching/statistics/histogram.pdf

نقل‌قول
۲- منظور از چگالی یک متغیر آماری چیست؟

http://en.wikipedia.org/wiki/Probability_density_function

آفلاین Scilab.IR

  • Jr. Member
  • *
  • ارسال: 59
  • !Everything is a Matrix
پاسخ : محاسبات آماری با سایلب و آر
« پاسخ #7 : 06 فروردین 1392، 05:11 ب‌ظ »
نمودار دایره‌ای
برای رسم یک نمودار دایره‌ای از تابع pie به صورت زیر استفاده می‌کنیم:
pie(x)

or

pie(x[,sp[,txt]])

(pie(x بر اساس داده‌های موجود در بردار x، یک نمودار دایره‌ای رسم می‌کند.

آرگومان اول برداری از اعدادحقیقی مثبت می‌‌باشد. بوسیله‌ی مقادیر بردار x ، مساحت i-امین قطاع دایره از رابطه‌ی زیر مشخص می‌شود:
(x(i) / sum(x)) * ( surface-of-the-unit-cercle)

آرگومان‌های دوم و سوم انتخابی می‌باشند. آرگومان دوم برای ایجاد فاصله بین قطاع‌ها استفاده می‌شود (توجه داشته‌باشید که اندازه‌ی بردار‌های x و sp باید یکسان باشد). بردار sp فقط مقادیر صفر و یک را قبول می‌کند. آرگومان سوم (که هم اندازه‌ی بردار‌های x و sp می‌باشد) متنی را به قطاع متناظرش اختصاص می‌دهد.

مثال(۱)
سایلب:
pie([1 1 1],[0 0 1 ],["Blue Sector","Green Sector","Red Sector"]);
xtitle("Draw a Pie: three input argument – Here the sectors have the same area and the red colored sector has been separated from the others by a space!");

کد R (با تشکر از Alend):
> data=c(1,1,1)
> pie(data)

مثال(۲)
سایلب:
pie([1 2 1 4])
xtitle("Draw a Pie: one input argument – The values in x are normalized via x(i) / sum(x) to determine the area of each slice of pie!");

کد R:
> data=c(1,2,1,4)
> pie(data)
ـ
« آخرین ویرایش: 06 فروردین 1392، 10:06 ب‌ظ توسط akhorshidi »

آفلاین Scilab.IR

  • Jr. Member
  • *
  • ارسال: 59
  • !Everything is a Matrix
پاسخ : محاسبات آماری با سایلب و آر
« پاسخ #8 : 06 فروردین 1392، 08:34 ب‌ظ »
توابع مقدماتی آماری
در مورد توابع سایلب، این توابع هم روی بردار‌ها و هم روی ماتریس‌ها قابل اعمال هستند.


تابع سایلب          توصیف              مثال

mean           میانگین              (v=(3:6); mean(v

meanf           میانگین وزنی           ([meanf(v,[1 1 2 1

median           میانه              (median(v

sum           مجموع   

prod           حاصل‌ضرب   

diff           تفاضل:
                (x(i)-x(i-1   

geomean       میانگین هندسی:               (geomean(v
              ((prod(v)^(1/size(v,2

harmean         میانگین هارمونیک:                  (harmean(v
                       (size(v,2)/sum(1 ./v
                       or
                       (size(v,2)/sum(v^-1      

stdev         انحراف معیار:                      (stdev(v
            ((sqrt(variance(v   

mad         انحراف میانگین:                         (mad(v
            (sum(abs(v-mean(v)))/size(v,2   

variance      واریانس:                           (variance(v
                    stdev(v)^2   

gsort         مرتب کردن نزولی عناصر         (gsort(v

min         کوچکترین               (min(v

max         بزرگترین               (max(v

quart         چارک‌های اوّل، دوم و سوم         (quart(v

iqr         دامنه‌ی تغییر بین چارک‌ها:                (iqr(v
                                Q3-Q1   


_


آفلاین alend

  • High Hero Member
  • *
  • ارسال: 1109
پاسخ : محاسبات آماری با سایلب و آر
« پاسخ #9 : 06 فروردین 1392، 08:50 ب‌ظ »
نمودار دایره ای در R:

pie(1:10)


آفلاین Scilab.IR

  • Jr. Member
  • *
  • ارسال: 59
  • !Everything is a Matrix
پاسخ : محاسبات آماری با سایلب و آر
« پاسخ #10 : 06 فروردین 1392، 08:57 ب‌ظ »
نمودار دایره ای در R:
pie(1:10)
مرسی Alend ،

برای رسم مثال‌های زیر توی آر از چه دستوری استفاده میشه؟
pie([1 1 1],[0 0 1 ],["Blue Sector","Green Sector","Red Sector"]);pie([1 2 1 4])
ـ

آفلاین alend

  • High Hero Member
  • *
  • ارسال: 1109
پاسخ : محاسبات آماری با سایلب و آر
« پاسخ #11 : 06 فروردین 1392، 09:15 ب‌ظ »
نمودار دایره ای در R:
pie(1:10)
مرسی Alend ،

برای رسم مثال‌های زیر توی آر از چه دستوری استفاده میشه؟
pie([1 1 1],[0 0 1 ],["Blue Sector","Green Sector","Red Sector"]);pie([1 2 1 4])
ـ

خواهش می کنم.


data=c(2,5,3,8)
names(data)<-c("A","B","C","D")
pie(data)
« آخرین ویرایش: 06 فروردین 1392، 09:25 ب‌ظ توسط alend »

آفلاین Scilab.IR

  • Jr. Member
  • *
  • ارسال: 59
  • !Everything is a Matrix
پاسخ : محاسبات آماری با سایلب و آر
« پاسخ #12 : 07 فروردین 1392، 11:16 ق‌ظ »
رسم نمودار میله‌ای
x=3:3:12;
bar(x)

x = 1:10; y=2*x;
bar(x,y)

x = 1:10; y=2*x;
bar(x,y,'yellow')
در مثال بالا آرگومان سوم، رنگ نمودار را مشخص می‌کند(اینجا زرد).

x=[5 7 9];
y=[10 8 6;8 6 4;6 4 2];
bar(x,y,0.5);
در مثال بالا آرگومان سوم، عرض هر ستون را مشخص می‌کند(اینجا width=0.5).

x=[5 7 9];
y=[10 8 6;8 6 4;6 4 2];
bar(x,y,'stacked');
در مثال بالا آرگومان سوم، یک نمودار ستونی انباشته رسم می‌کند.



توابع نمونه برداری:

sample — نمونه‌گیری با جایگذاری

s = sample(n,X,[orient])
n : یک عدد صحیح مثبت که اندازه‌ی نمونه را مشخص می‌کند.
X : یک ماتریس؛ نمونه‌ها از این ماتریس استخراج می‌شوند.
آرگومان سوم انتخابی بوده و فقط مقادیر ۱ و ۲ و یا 'r' و 'c' را قبول می‌کند (1  وr  به سطر‌ها و  2 و c به ستون‌ها اشاره دارند).
1  یاr  : نمونه‌برداری از سطر‌های ماتریس X انجام می‌شود.
2  یاc  : نمونه‌‌‌ها از ستون‌های ماتریس X استخراج می‌شوند.

مثال:
X=['A' 'BB' 'CCC'] ;
s=sample(10,X)
f=tabul(s)
تابع tabul، فراوانی هر مقدار X را بر‌می‌گرداند.


samwr — نمونه‌گیری بدون جایگذاری
s = samwr(sizam,numsamp,X)
sizam: یک عدد صحیح که اندازه‌ی نمونه را مشخص می‌کند (اندازه‌‌ی آن باید کوچکتر یا مساوی اندازه X باشد).
numsamp : یک عدد صحیح ؛ بیانگر تعداد نمونه‌های انتخابی می‌باشد.
X : یک بردار ستونی که دربردارنده‌ی جمعیت می‌باشد.

مثال:
a=[0.33 1.24 2.1 1.03]
s=samwr(4,6,a)


samplef — نمونه‌گیری با جایگذاری از یک جمعیت با فروانی مقادیرش

s = samplef(n,X,f,[orient])
آرگومان‌های اول، دوم و چهارم مشابه آرگومان‌های ورودی تابع sample هستند.
آرگومان سوم،f ، ماتریسی از اعداد صحیح مثبت هم‌اندازه با ماتریس X می‌باشد که فراوانی مقادیر متناظر در ماتریس X را نشان‌ می‌دهد.
مثال:a=[3 7 9;22 4 2]
f1=[10 1 1 1 1 1]
s=samplef(15,a,f1)

HTH
Mehran

_

آفلاین alend

  • High Hero Member
  • *
  • ارسال: 1109
پاسخ : محاسبات آماری با سایلب و آر
« پاسخ #13 : 07 فروردین 1392، 06:43 ب‌ظ »
رگرسیون خطی در R:
a=1:10
 b=a*2+1
 lm(b~a)

Call:
lm(formula = b ~ a)

Coefficients:
(Intercept)            a 
          1            2 

آفلاین سعید زبردست

  • سعید زبردست
  • گروه راهبران
  • *
  • ارسال: 1048
  • جنسیت : پسر
  • سعید زبردست
    • وبلاگ سعید زبردست
پاسخ : محاسبات آماری با سایلب و آر
« پاسخ #14 : 28 اردیبهشت 1392، 05:10 ب‌ظ »
به درخواست کاربران و با توجه به مفید بودن این تاپیک، وضعیت آن به صورت مهم در آمد.
وب سایت - وبلاگ - «آنان که می توانند انجام می دهند و آنان که نمی توانند، انتقاد می کنند ...»
قوانین و خط مشی رفتاری در انجمنهای اوبونتو ایران