%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Emrah ER %% eer@politics.ankara.edu.tr %% "Ekonometriye Yeni Başlayanlar için Kısa bir R Kılavuzu" %% kitapçığına ait Sweave dosyasıdır %% Bu dosyayı R'da çalıştırmak için: `Sweave("R_giris.Rnw")' %% Friedrich Leisch tarafından yazılan Sweave için %% http://www.stat.uni-muenchen.de/~leisch/Sweave/ %% adresine bakınız. %% Bu dosya Mahmood Arai tarafından hazırlanan %% "A Brief Guide to R for Beginners in Econometrics" %% kılavuzun Türkçeleştirilmiş halidir. %% http://people.su.se/~ma/R_intro/ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Giriş %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \documentclass[10pt,a4wide]{article} \usepackage[turkish]{babel} \usepackage[latin5]{inputenc} \usepackage[T1]{fontenc} \usepackage{html,graphics,color,amsmath,amsfonts,natbib} \usepackage{Sweave,fancyvrb,color,url,hyperref} \SweaveOpts{echo=TRUE} \setkeys{Gin}{width=\textwidth} \setlength{\parindent}{0pt} \setlength{\parskip}{0.2cm} \newcommand{\R}{\textbf{R}} \definecolor{Red}{rgb}{0.5,0,0} \definecolor{Blue}{rgb}{0,0,0.5} \hypersetup{% breaklinks = {true}, colorlinks = {true}, linkcolor = {Blue}, citecolor = {Blue}, urlcolor = {Red} } \SweaveOpts{keep.source=TRUE} \newcommand{\ee}{\htmladdnormallink{Emrah ER}{http://eremrah.com}} \newcommand{\ma}{\htmladdnormallink{Mahmood ARAI}{http://people.su.se/~ma}} \newcommand{\Rhome}{\htmladdnormallink{\R\ Anasayfa} {http://www.r-project.org/}} \newcommand{\CRAN}{\htmladdnormallink{CRAN-mirror} {http://cran.r-project.org/}} \newcommand{\CRANTV}{\htmladdnormallink{CRAN Konu Görüntüleme: Sayısal Ekonometri} {http://ftp.sunet.se/pub/lang/CRAN/web/views/Econometrics.html}} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \begin{document} \title{Ekonometriye Yeni Başlayanlar için Kısa bir \R\ Kılavuzu} \author{\textbf{Yazan:}\ma \\Stockholm Üniversitesi, İktisat Bölümü\\ \\ \textbf{Türkçeleştiren:} \ee\footnote{Bu çeviri benim \R\ ile ilgili olarak gerçekleştirdiğim ilk çalışma olduğundan bazı çeviri hataları içerebilir. Hataları bana bildirirseniz sevinirim.} \\Ankara Üniversitesi, SBF İktisat Bölümü\\ {\small İlk Versiyon: 11/06/2010}} \date{} \maketitle \section{Giriş} \subsection{\R\ Hakkında} \R\ GPL (GNU Kamu Lisansı) altında yayınlanan ve tüm ana platformlarda çalıştırılabilen bir programdır. \R, \Rhome'sında şu şekilde tanımlanmaktadır: \begin{quotation} \textit{"R istatistiki hesaplama ve grafik için bir özgür program ortamıdır. Çok çeşitli Unix platformunda, Windows ve MacOS altında harmanlama yapabilmekte ve çalışmaktadır. R'ı indirmek için lütfen tercih ettiğiniz \CRAN'ı seçiniz."} \end{quotation} Kılavuzlar ve farklı dökümanlar için \Rhome'sını ziyaret ediniz. \R\ üzerine yazılmış çok sayıda kitap mevcuttur. R ile ilişkili yayınların bir listesi için R-Project\footnote{ \url{http://www.R-project.org/doc/bib/R.bib}} web sayfasını ziyaret ediniz. \citet{Dalgaard} ve \citet{Fox} başlangıç düzeyi için ideal kitaplardır. İleri düzey bir kitap için ise klasik bir referans olan \citet{VR}'yi inceleyiniz. \citet{AER} özel olarak ekonometri konularını ele almaktadır. Ayrıca \CRANTV\ sayfasını inceleyiniz. \R\ ve \LaTeX'i dokumak için Sweave'e\footnote{ \url{http://www.stat.uni-muenchen.de/~leisch/Sweave/}} bakınız. \R\ kullanarak yeniden türetilebilir araştırmalar için \citet{Koenker07}'ye bakınız. \R'a atıf yapmak için ise \citet{Rcore}'e başvurulabilir. \subsection{Bu sayfalar hakkında} Bu ekonometriye yeni başlayanlar için bir el kılavuzudur. Bu kılavuz Mahmood Arai tarafından hazırlanan kılavuz kullanılarak oluşturulmuştur\footnote{ \url{http://people.su.se/~ma/R_intro/R_intro.pdf}}. \verb+#+ sembolü yorumlar için kullanılmıştır. Dolayısıyla bir satırda \verb+ # + ardından gelen tüm yazılar yorumdur. \verb+ > + işaretini takip eden yazılar ise \R-komutlarıdır. Örneğin: <>= options(width=60) @ <>= ornegim <- "ornek" ornegim @ Kod yorumlarını da içeren ve çalıştırılmayan R-kodları aşağıdaki biçimde paragraflandırılmıştır. {\small \begin{verbatim} ornegim <- "ornek" # adlı bir nesne yaratır. ornegim \end{verbatim}} \verb+< >+ arasında yer alan karakterler dosyaların, fonksiyonların, vs. isimleridir.\\ \verb+,+ gibi \verb++ şeklindeki isimler genel bir veriye, nesneye, vs.ye atıfta bulunmak için kullanılmaktadır. \subsection{Nesneler ve dosyalar} \R\ \textit{nesneler} gibi şeylere önem vermektedir. Bir veri seti, vektör, matris, regresyon sonucu, çizim, vs. hepsi nesnelerdir. Bir dosya içerisine bir veya daha fazla nesne kaydedilebilir. \R-verisi içeren bir dosya bir nesne değildir fakat bir nesneler kümesidir. Temel olarak kullanılan tüm komutlar \textit{fonksiyonlar}dır. birsey(nesne) şeklindeki bir komut, nesne üzerinde işlem gerçekleştirir. Bu ise birçok parantez yazacağınız anlamına gelmektedir. Parantezlerin olup olmadığını, ayrıca doğru yerde olup olmadıklarını kontrol edin. \section{İlk birkaç şey} \subsection{Kurulum} \R\ birçok farklı platform altında çalışabilmektedir ve [\CRAN]'dan indirilebilir. \\ \subsection{\R\ ile çalışma} Bir proje için bir klasör oluşturma ve \R'ı bu klasör altında çalıştırmak iyi bir fikirdir. Bu, çalışmanızı kaydetmenizde ve daha sonraki oturumlarda tekrar bulmanızda kolaylık sağlar. R'ın \textit{MS-Windows}'ta belirli bir dizinde başlamasını istiyorsanız \verb++ dizinini çalışma dizini olarak tanımlamanız gerekmektedir. Bu işlem R-ikonu üzerinde farenin sağ tuşuna tıklanıp, \verb++ kısmına gidilerek değiştirilebilir. \textit{\R\ içerisinde çalışma dizinini görüntüleme:} <>= getwd() @ Çalışma dizinini var olan başka bir dizin olan \verb++ ile değiştirmek için: {\small \begin{verbatim} setwd("/ee/r_ekon") \end{verbatim}} \subsection{\R'da isimlendirme} Bir nesneyi \verb++ veya \verb++ şeklinde isimlendirmeyin bunun yerine \verb++ kullanın.\\ \R'da \verb++ ve \verb++ isimlerinin iki farklı isim olduğuna dikkat edin. Sayı ile başlayan adlandırmalar (\verb+<1a>+ gibi) \R'da kabul edilmemektedir. Bunun yerine \verb++ kullanabilirsiniz. Bir veri setinde değişken isimlerini nesne isimleri olarak kullanmamanız gerekir. Eğer kullanırsanız; nesne, değişkeni benzer isimdeki başka bir nesne ile gölgelendirecektir. Bu durumda değişkeni çağırdığınızda nesnenin görüntülenmesi problemi ortaya çıkacaktır. Bu sorundan kaçınmak için: \begin{enumerate} \item Bir nesneye veri setinizdeki bir değişken ile aynı ismi vermeyin. \item Eğer bu kuralı takip edemiyorsanız, değişkenlere, değişkenleri içeren veri seti ve değişken adıyla başvurun. Örneğin, \verb++ veri setindeki \verb++ değişkenine: {\small \begin{verbatim} df1$ucret. \end{verbatim}} komutu ile başvurulabilir. \end{enumerate} ``Gölgelendirme'' problemi aynı zamanda \R\ fonksiyonları ile de ilişkilidir. \R\ fonksiyonları ile benzer isimlere sahip nesne isimleri kullanmayın.\\ \verb++ komutu yarattığınız bir nesnenin \R\ paketlerinde yer alan başka bir nesne ile çakışıp çakışmadığını kontrol eder ve listeler. Yalnızca \verb+<.GlobalEnv>+ --çalışma alanınız-- altında listelenen çakışmalara dikkat etmelisiniz \verb+<.GlobalEnv>+ altında listelenen tüm nesneler, \R\ paketlerindeki nesneleri gölgelendirmektedir. Nesnelerin \R\ paketlerinde kullanılması için gölgelendirmeye neden olan nesnelerin kaldırılması gerekmektedir. Aşağıdaki örnek \verb++ nesnesini yaratmakta --bundan kaçınılmalıdır çünkü \verb++, anlamına gelmektedir-- ve çakışmaları kontrol edip, \verb++'yi kaldırarak çakışma sorununu çözmektedir. {\small \begin{verbatim} T <- "zaman" conflicts(detail=TRUE) rm(T) conflicts(detail=TRUE) \end{verbatim}} \verb++ gibi tek-harflik kelimelerin de isim olarak kullanımından da kaçınmalısınız. Bunların hepsinin \R'da özel anlamları vardır. \textit{Dosya uzantıları} R-kodu içeren dosyalarınızın uzantısında \verb++ kullanmak iyidir. \verb++ şeklindeki bir dosya R-kodlarını içeren bir metin dosyası olacaktır. \verb++ uzantısı çalışma görüntüleri (yani \verb++ ile yaratılan dosyalar) için idealdir. \verb++ şeklindeki bir dosya R-nesnelerini içerecektir. Kaydedilmiş çalışma görüntüsü için varsayılan isim \verb+<.RData>+'dır. \verb++'yı dosya uzantısı olarak kullandığınızda bir dosyayı \verb+<.RData>+ olarak adlandırmadığınıza dikkat edin. \subsection{Çalışma alanı nesnelerini ve görüntülerini kaydetme} \verb++ dosyasını indirin\footnote{\url{http://people.su.se/~ma/R_intro/data/}}. \verb++ ve \verb++ veri setlerini içeren \verb++ dosyasını {\small \begin{verbatim} load("DataWageMacro.rda") ls() # nesneleri listeler \end{verbatim}} komutu ile okuyabilirsiniz. Aşağıdaki komut \verb++ nesnesini \verb++ dosyasına kaydeder. {\small \begin{verbatim} save(lnu, file="verim.rda") \end{verbatim}} \R'ı tekrar aynı dizinde başlattığınızda otomatik olarak yüklenecek olan çalışma alanının bir görüntüsünü kaydetmek için, {\small \begin{verbatim} save.image() \end{verbatim}} komutunu kullanın. Çalışma alanınızın görüntüsünü \R'dan çıkarken karşınıza gelen \verb++ sorusuna \verb++ cevabını vererek de kaydedebilirsiniz. Bu şekilde çalışma alanınızın görüntüsü \verb+<.RData>+ gizli dosyasına kaydedilecektir. Cari çalışma alanınızın görüntüsünü kaydedebilir ve \verb++ adını verebilirsiniz. {\small \begin{verbatim} save.image("goruntum.rda") \end{verbatim}} \subsection{Genel seçenekler} \verb++ komutu hesaplamaların ve sonuçları görüntülemenin farklı özelliklerini ele alan bir dizi seçeneğin düzenlenmesinde kullanılabilir. Şimdi birkaç faydalı seçeneğe bakalım. Satır uzunluğunu 60 karaktere sınırlayarak başlıyoruz. <>= options(width=60) @ {\small \begin{verbatim} options(prompt=" R> ") # promptu R> olarak değiştirir. options(scipen=3) # R version 1.8'den. Bu seçenek # R'a sayiları üstel format # yerine sabit formatta # göstermesini söyler. Örneğin, # 'in sonucu olarak # <1.446257e+12> yerine # <1446257064291>. options() # seçenekleri görüntüler. \end{verbatim}} \subsection{Yardım alma} {\small \begin{verbatim} help.start() # yardım sayfalarını açar. help(lm) # doğrusal model # (linear model) # ile ilgili yardım. ?lm # yukarıdaki ile aynı. \end{verbatim}} \section{Temel komutlar} {\small \begin{verbatim} ls() # tüm nesneleri listeler. ls.str() # tüm nesnelerin detaylarını listeler. str(nesnem) # 'in detaylarını listeler. list.files() # dizindeki tüm dosyaları listeler. dir() # dizindeki tüm dosyaları listeler. nesnem # basit olarak nesneyi görüntüler. rm(nesnem) # nesnesini kaldırır. rm(list=ls()) # çalışma alanındaki tüm nesneleri # kaldırır. save(nesnem, file="nesnem.rda") # nesnesini # dosyasına kaydeder. load("calismam.rda") # "calismam.rda"'yı hafızaya yükler. summary(verim) # için basit istatistikleri # görüntüler. hist(x,freq=TRUE) # nesnesine ait histogramı # görüntüler. # frekansı gösterir ve # olasılıkları gösterir. q() # R'dan çıkar. \end{verbatim}} Bir komutun çıktısı doğrudan \verb+< <- >+ kullanılarak bir nesneye atanabilir ki bu durumda nesneye bir değer atanmış olur. Aşağıda yer alan kodun ilk satırı $1$,$2$ ve $3$ değerlerini içeren \verb++ isimli bir nesne yaratır. İkinci satır ise \verb++ isimli bir nesne yaratır ve \verb++ nesnesinin içeriğini görüntüler. <>= VV <- c(1,2,3) (VV <- 1:2) @ \section{Veri düzenleme} \subsection{Düz metin formatında veriyi okuma:} \textit{Sütunlarda veri} Bu örnekteki veri seti bir metin dosyasındandır. \texttt{\htmladdnormallink{}{ http://people.su.se/~ma/R_intro/data/tmp.txt}} dosyası ilk satırında değişken isimlerini içermektedir (isimler boşluk ile ayrılmıştır) ve bu değişkenlerin değerleri diğer satırlarda yer almaktadır (değerler boşluk ile ayrılmıştır). Aşağıdaki kod \verb++ dosyasının içeriğini okur ve bunu \verb++ isimli bir nesneye atar. <>= FILE <- "http://people.su.se/~ma/R_intro/data/tmp.txt" dat <- read.table( file= FILE, header = TRUE) dat @ \verb+
+ argümanı ilk satırda değişken isimlerinin olduğunu belirtir. \verb++ nesnesi \R'da adlandırıldığı şekliyle bir veri setidir. Eğer \verb++ veri dosyasındaki sütunlar \verb+<,>+ ile ayrılmışsa, kod yazımı, {\small \begin{verbatim} read.table("tmp.txt", header = TRUE, sep=",") \end{verbatim}} şeklinde olmalıdır. Eğer ondalık karakteri \verb+<.>+ şeklinde ise bunun tanımlanması gereklidir. Eğer ondalık karakteri \verb+<,>+ şeklinde ise \verb++ komutunu kullanabilir ve ardından gelen argümanı \verb++ fonksiyonu içerisinde tanımlayabilirsiniz. \subsection{Tablo verisinde mevcut olmayan gözlem (NA) ve sınırlayıcılar} \verb++ dosyası aşağıdaki veriyi içermektedir: {\small \begin{verbatim} 1 . 9 6 3 2 \end{verbatim}} Burada ikinci sütünda (değişkende) yer alan ilk gözlem eksiktir ve \verb+<.>+ olarak kodlanmıştır.\\ \R'a \verb+<.>+'nın eksik değer olduğunu bildirmek için \verb++ argümanını kullanırız. <>= FILE <- "http://people.su.se/~ma/R_intro/data/data1.txt" read.table(file=FILE ,na.strings="." ) @ Bazen sütunlar boşluklardan farklı ayraçlar ile ayrılırlar. Ayraç, örneğin, \verb+<,>+ olabilir ki bu durumda \verb++ argümanını kullanmamız gerekir. Eğer sütunlar \verb+<,>+ ile ayrılmışsa ve bazı sütunlarda aşağıdakine benzer şekilde boşluklar varsa bu durumda \verb+ + argümanının çalışmayacağına dikkat edin. NA aslında iki boşluk şeklinde kodlanır, bir nokta ve iki boşluk, ve \verb+ + şeklinde ifade edilmesi gerekir. {\small \begin{verbatim} 1, . ,9 6, 3 ,2 \end{verbatim}} Bazen eksik değerler basitçe şeklindedir. {\small \begin{verbatim} 1 9 6 3 2 \end{verbatim}} İlk satırda 1 ile 9 arasında iki boşluk olduğuna dikkat edin. Bu ikinci sütundaki değerin boşluk olduğu anlamına gelir. Bu ise eksik değer anlamındadır. Burada önemli olan şey \verb++ ile birlikte \verb++ tanımlanması gerektiğidir. \subsection{Diğer formatlarda veri okuma ve yazma} \verb++ kitaplığını çeşitli standart paketlerin veri formatında verileri okumak için ekleyin. Örnekler arasında SAS, SPSS, STATA, vs. yer almaktadır. {\small \begin{verbatim} library(foreign) # verisini okur ve nesnesine atar. lnu <- read.dta(file="wage.dta") \end{verbatim}} \verb++ , \verb++, vs. SAS ve SPSS formatlarında verileri okumak için foreign paketinin içerisinde yer alan komutlardır. Yabancı formatta veri yazmak da kolaydır. Aşağıdaki kodlar nesnesini adındaki Stata dosyasına yazdırır. {\small \begin{verbatim} library(foreign) write.dta(lnu,"lnunew.dta") \end{verbatim}} \subsection{Veri seti nesnesinin içeriğini inceleme} Burada \htmladdnormallink{İsveç Yaşam Düzeyi Anketi}{http://www2.sofi.su.se/LNU2000/english.htm} LNU 1991'den elde edilen veri seti kullanılmaktadır. <>= FILE <-"http://people.su.se/~ma/R_intro/data/lnu91.txt" lnu <- read.table(file=FILE, header = TRUE) @ \verb++ verisini \verb++ ile iliştirmek \verb++ veri setine ve veri setindeki değişkenlere isimleriyle erişimi sağlar. Eğer \verb++ veri setini iliştirmediyseniz \verb++ veri setinde yer alan \verb++ değişkenine atıfta bulunmak için \verb++ komutunu kullanabilirsiniz. Veri setine iliştirilmiş olarak ihtiyacınız kalmadığında iliştirme işlemini \verb++ komutuyla geri alabilirsiniz. \textit{lnu veri setinin içeriğinin tanımlanması.} <>= str(lnu) # Veri yapısının tanımı summary(lnu) # Veri tanımlamasının özeti @ \subsection{Veri setinde değişken yaratma ve değişken çıkartma} Burada \verb++ değişkenini \verb++ değişkeninin logaritması olarak tanımlıyoruz. Sonrasında ise değişkeni çıkartıyoruz. <>= lnu$logwage <- log(lnu$wage) lnu$logwage <- NULL @ Orjinal değişkenlerin basit dönüştürmeleri olan değişkenleri yaratmaya gerek olmadığına dikkat edin. Dönüştürmeyi doğrudan hesaplamaların ve tahminlerin içerisinde gerçekleştirebilirsiniz. \subsection{Veri setinde yer alan değişkenlerin alt kümesini seçme} {\small \begin{verbatim} # lnu veri setinde (wage,female) # değişkenlerinin altkümesini okuma. lnu.female <- subset(lnu, select=c(wage,female)) # Veri setinde iki nesneyi (değişkeni) # bir araya getirme. attach(lnu) lnu.female <- data.frame(wage,female) # lnu'da female hariç tüm değişkenleri okuma. lnux <- subset(lnu, select=-female) # wage'den public'e kadar değişkenleri okuma. lnuxx <- subset(lnu, select=wage:public) \end{verbatim}} \subsection{Veri setinde gözlemlerin altkümesini seçme} {\small \begin{verbatim} attach(lnu) # Bir değişkende var olan eksik değer # içeren gözlemleri silme. lnu <- na.omit(lnu) # Sadece female değişkenine ait veriyi saklama. fem.data <- subset(lnu, female==1) # Sadece female ve public employees # değişkenlerine ait veriyi saklama. fem.public.data <- subset(lnu, female==1 & public==1) # wage > 90 olan tüm gözlemleri seçme. highwage <- subset(lnu, wage > 90) \end{verbatim}} \subsection{Değişkenlerin değerlerini değiştirme} Okul değişkeni içerisinde yer alan değerleri değiştirerek bireyin üniversite eğitimi alıp almadığını gösteren bir değişken yaratıyoruz. Okul değişkenini kopyalayın. <>= lnu$university <- lnu$school @ Üniversite değerini eğer okula gidilen yıl sayısı 13 yıldan az ise 0 değeri ile değiştirin. <>= lnu$university <- replace(lnu$university, lnu$university<13, 0) @ Üniversite değerini eğer okula gidilen yıl sayısı 12 yıldan fazla ise 1 değeri ile değiştirin. <>= lnu$university <- replace(lnu$university, lnu$university>12, 1) @ \verb++ değişkeni şimdi üniversite eğitimi için bir kukla değişken haline gelmiştir. Kaydettikten sonra veri setini tekrar iliştirmeyi unutmayın. Kategori değişkenleri yaratmak için \verb++ komutunu kullanabilirsiniz. <>= attach(lnu, warn.conflicts=FALSE) table(university) @ Kukla değişken yaratmak için şu şekilde ilerliyoruz: <>= university <- school > 12 table(university) @ Aslında genellikle kukla değişken yaratmamıza gerek yoktur. \verb+ 12>+ üzerinden doğrudan işlemleri gerçekleştirebiliriz. <>= table(school > 12) @ \subsection{Eksik değerleri değiştirmek} Bir vektör yaratıyoruz. Bir değeri eksik değer olarak yeniden kodluyoruz ve ardından eksik değeri orijinal değeri ile değiştiriyoruz. {\small \begin{verbatim} a <- c(1,2,3,4) # vektör yaratır is.na(a) <- a ==2 # a==2 'yi NA olarak kodlar a <- replace(a, is.na(a), 2)# NA'yı 2 ile değiştirir # or a[is.na(a)] <- 2 \end{verbatim}} \subsection{Faktörler} Bazen değişkenlerimizin çeşitli aralıklara karşılık gelen uygun düzeydeki kategori değişkenleri biçiminde kullanılması için yeniden tanımlanması gerekir. 9 yıla kadar, 10 ila 12 yıl arası ve 12 yıl üstü için okul kategorileri oluşturmak isteyebiliriz. Bu \verb++ kullanılarak kodlanabilir. En düşük kategoriyi dahil etmek için \verb++ argümanını kullanırız. <>= SchoolLevel <- cut(school, c(9,12, max(school), include.lowest=TRUE)) table(SchoolLevel) @ Her düzey için etiket ayarlanabilir. Bir önceki bölümde yaratılan üniversite değişkenini ele alalım. <>= SchoolLevel <- factor(SchoolLevel, labels=c("basic","gymnasium","university")) table(SchoolLevel) @ Yukarıdaki gibi tanımlanan bir faktör, örneğin regresyon modelinde kullanılabilir. Referans kategori en düşük değere sahip düzeydir. \verb++'e karşılık gelen en düşük değer $1$ 'dir ve sütunu karşılaştırma matrisinde yer almamaktadır. Taban kategoriyi değiştirmek bu sütun yerine başka bir sütunu dışlayacaktır. Bu aşağıda yer alan örnekte gösterilmiştir. <>= contrasts(SchoolLevel) contrasts(SchoolLevel) <- contr.treatment(levels(SchoolLevel),base=3) contrasts(SchoolLevel) @ Aşağıdaki komut \verb++ değişkenini sayısal bir değişken olarak tanımlar. <>= lnu$school <- as.numeric(lnu$school) @ \subsection{Veriyi grup bazında toplulaştırmak} V1, V2 ve V3 gibi 3 değişkenden oluşan basit bir veri seti yaratalım. V1 grup birimi ve V2 ile V3 iki sayısal değişken olsunlar. <>= (df1 <- data.frame(V1=1:3, V2=1:9, V3=11:19)) @ \verb++ komutunu kullanarak \verb++, \verb++, vb. grup özelliklerini içeren yeni bir data.frame oluşturalım. Burada toplam (sum) fonksiyonu \verb++ grup birimi ile \verb++ üzerine yani \verb++'in ikinci ve üçüncü sütunlarına uygulanır. <>= (aggregate.sum.df1 <- aggregate(df1[,2:3],list(df1$V1),sum)) (aggregate.mean.df1 <- aggregate(df1[,2:3],list(df1$V1),mean)) @ değişkeni, grupları tanımlayan bir faktördür. Aşağıda toplulaştırma (aggregate) fonksiyonuna ilişkin bir örnek yer almaktadır. Birim tanımlayıcı \verb++'yi içeren \verb++ şeklinde bir veri setimiz olduğunu varsayalım. Zaman içerisinde tekrar tekrar gözlemlenen birimler \verb+dat$Time+ değişkeni ile gösterilsin. <>= (dat <- data.frame(id=rep(11:12,each=2), Time=1:2, x=2:3, y =5:6)) @ Bu veri setinde yer alan tüm değişkenler için grup ortalamalarını hesaplar ve \verb++ içerisinde NA olmayan (!is.na) elemanların toplamını hesaplayan \\ \begin{center} \verb++ \end{center} \\ kullanabilirsiniz. \subsection{Çizelgeleme} \htmladdnormallink{İlk olarak veri setini okutalım} {http://people.su.se/~ma/R_intro/data/}. Çapraz Çizelgeleme <>= attach(lnu,warn.conflicts=FALSE) table(female,public) # frekansları verir (ftable.row <- cbind(table(female,public), total=table(female))) (ftable.col <- rbind(table(female,public), total=table(public))) @ {\small \begin{verbatim} # Bunu deneyin: # satırlara göre göreli frekans: female ftable.row/c(table(female)) # sütunlara göre göreli frekans: public ftable.col/rep(table(public),each=3) # rep(table(public),each=3) # table(public)'deki her değeri 3 kez tekrar eder \end{verbatim}} Kategoriler ile çeşitli istatistikler oluşturma. Aşağıdaki komut erkekler (males) ve kadınlar (female) için ortalama ücretleri (wage) verir. <>= tapply(wage, female, mean) @ \verb+, , +, vs. kullanımı erkekler ve kadınlar için farklı gözlem sayısı, minimum, maximum, vs. oluşturur. <>= tapply(wage, female, length) @ Aşağıda yer alan örnek özel (private) sektör ve kamu (public) sektöründeki erkekler ve kadınlar için ortalama ücretleri verir. <>= tapply(wage, list(female,public), mean) @ Aşağıdaki komut ise eş uzunlukta bir vektör yaratarak grup bazında ortalamaları hesaplar. Eş uzunluk her grubun tüm elemanları için grup istatistiklerinin elde edildiği anlamına gelmektedir. Erkekler ve kadınlar için ortalama ücret: <>= attach(lnu, warn.conflicts=FALSE) lnu$wage.by.sex<- ave(wage,female,FUN=mean) @ \verb++ fonksiyonu \verb+, , +, vs. ile değiştirilebilir. \section{Matrisler} \R'da matrisi şu şekilde tanımlarız (\R'da bakınız ?matrix): 3 satır ve 4 sütundan oluşan ve sütunlarında 1'den 12'ye kadar elemanları içeren bir matris: <>= matrix(1:12,3,4) @ 3 satır ve 4 sütundan oluşan ve satırlarında 1'den 12'ye kadar elemanları içeren bir matris: <>= (A <- matrix(1:12,3,4,byrow=TRUE)) dim(A) # Matrisin boyutu nrow(A) # Satır sayısı, dim(A)[1] ile aynı ncol(A) # Sütun sayısı, dim(A)[2] ile aynı @ \subsection{Endeksleme} Bir matrisin elemanları, matris adından sonra köşeli parantez kullanılarak ve aralarına virgül olacak şekilde satır ve sütünlara başvurularak listelenebilir. Benzer bir endeklemeyi diğer nesnelerin elemanlarını listelemek için de kullanabilirsiniz. \begin{verbatim} A[3,] # 3. satırı listeleme A[,3] # 3. sütunu listeleme A[3,3] # 3. satır ve üçüncü sütun A[-1,] # 1. satır hariç matrisin tamamı A[,-2] # 2. sütun hariç matrisin tamamı \end{verbatim} Matris elemanları üzerinde bazı koşulların değerlendirilmesi <>= A>3 # 3'ten büyük elemanlar A==3 # 3'e eşit elemanlar @ Bazı koşulları yerine getiren elemanları listeleme <>= A[A>6] # 6'dan büyük tüm elemanlar @ \subsection{Skalar Matris} Skalar matris matrisin özel bir biçimidr. Köşegen-dışı elemanları sıfır, köşegen üzerindeki elemanları ise aynıdır ve eşit sayıda satır ile sütuna sahip olan kare bir matristir. Aşağıdaki örnek matrislerin köşegenleri ile ilişkili bazı matris özelliklerini göstermektedir. Ayrıca \verb+?upper.tri+ ve \verb+?lower.tri+'ye de bakınız. <>= diag(2,3,3) diag(diag(2,3,3)) @ \subsection{Matris işlemleri} \textbf{Matrisin devriği} Bir matrisin satırlarını sütun, sütunlarını da satır yapmak matrisin devriğini verir. <>= t(matrix(1:6,2,3)) # @ (1:6,2,3) matrisi ve (1:6,3,2, byrow=T) matrisini deneyin. \textbf{Toplama ve çıkarma} Toplama ve çıkarma işlmeri boyutları aynı olan matrislere veya bir skalar ve bir matrise uygulanabilir. {\small \begin{verbatim} # Bunu deneyin A <- matrix(1:12,3,4) B <- matrix(-1:-12,3,4) C1 <- A+B D1 <- A-B \end{verbatim}} \textbf{Skalar çarpımı} {\small \begin{verbatim} # Bunu deneyin A <- matrix(1:12,3,4); TwoTimesA = 2*A c(2,2,2)*A c(1,2,3)*A c(1,10)*A \end{verbatim}} \textbf{Matris çarpımı} Matris çarpımı için \R\ <$\%*\%$> kullanır ve bu sadece matrisler uyumlu ise çalışır. {\small \begin{verbatim} E <- matrix(1:9,3,3) crossproduct.of.E <- t(E)%*%E # veya çapraz çarpımları elde etmenin daha etkin diğer bir yolu: crossproduct.of.E <- crossprod(E) \end{verbatim}} \textbf{Matris tersi} Kare matris $\textbf{A}$'nın tersi $\textbf{A}^{-1}$ şeklinde gösterilir ve $\textbf{A}$ ile çarpıldığında birim matris (ana köşegen üzerindeki tüm elemanları 1, köşegen-dışı elemanları 0 olan matris) oluşturan matris olarak tanımlanır. \begin{equation} \textbf{A}\textbf{A}^{-1}=\textbf{A}^{-1}\textbf{A}=\textbf{I}\nonumber \end{equation} {\small \begin{verbatim} FF <- matrix((1:9),3,3) detFF<- det(FF) # determinantı kontrol eder B <- matrix((1:9)^2,3,3) # tersi alınabilir bir # matris oluşturur Binverse <- solve(B) Identity.matrix <- B%*%Binverse \end{verbatim}} \newpage \section{En küçük kareler} EKK kullanarak doğrusal bir regresyon modeli oluşturmak için kullanılan fonksiyon \verb++'dir. Aşağıdaki örnekte bağımlı değişken \verb++ ve açıklayıcı değişkenler \verb++ ve \verb++'dir. Sabit terim varsayılan olarak dahil edilmektedir. \verb++ veri setini tanımlamamıza gerek yoktur çünkü bu değişkenleri içeren veri seti zaten iliştirilmiş durumdadır. Regresyon sonucu \verb++ isimli nesneye atanmaktadır. Bu nesne ileride \verb++ kullanımını gösteren birkaç örnekten sonra gösterilecek olan birçok ilginç regresyon sonucunu içermektedir. \htmladdnormallink{Veri setini oku} {http://people.su.se/~ma/R_intro/lnu91.txt} first. <>= reg.model <- lm (log(wage) ~ school + female) summary (reg.model) @ Bazen regresyonu veri setinin bir alt kümsei üzerinde kurmak isteyebiliriz. {\small \begin{verbatim} lm (log(wage) ~ school + female, subset=wage>100) \end{verbatim}} Bazen de modelde değişkenlerin dönüştürülmüş değerlerini kullanmak isteyebiliriz. Dönüştürme fonksiyonu içerisinde verilmelidir. I() birim fonksiyonu anlamına gelmektedir. \verb++, \verb++'nin karesidir. {\small \begin{verbatim} lm (log(wage) ~ school + female + expr + I(expr^2)) \end{verbatim}} Etkileşimli değişkenler: \verb++, \verb++ {\small \begin{verbatim} lm (log(wage) ~ female*school, data=lnu) \end{verbatim}} benzer biçimde: {\small \begin{verbatim} lm (log(wage) ~ female + school + female:school, data= lnu) \end{verbatim}} Sabit terimsiz bir model. {\small \begin{verbatim} reg.no.intercept <- lm (log(wage) ~ female - 1) \end{verbatim}} Sadece sabit terim içeren bir model. {\small \begin{verbatim} reg.only.intercept <- lm (log(wage) ~ 1 ) \end{verbatim}} Aşağıdaki örnek \verb++ ve \verb++ değişkenleri ile tanımlandığı şekliyle özel ve kamu sektöründeki erkekler ve kadınlar için doğrusal model (\verb++) tahmin eder. \verb++ verisi 4 farklı hücreye ayrılmıştır: (0,0) özel sektördeki erkekler, (1,0) özel sektördeki kadınlar, (0,1) kamu sektöründeki erkekler ve (1,1) kamu sektöründeki kadınlar. Elde edilen \verb++ nesnesi bir listedir ve her elemanın özetini (\verb++) görüntülemek için \verb++ (liste uygula) kullanılır. {\small \begin{verbatim} by.reg <- by(lnu, list(female,public), function(x) lm(log(wage) ~ school, data=x)) # ayrı regresyonların özeti lapply(by.reg, summary) # listedeki ikinci eleman için özet # yani özel sektördeki kadınlar için. summary(by.reg[[2]]) \end{verbatim}} Aşağıdaki komut erkek ve kadın işçiler için değişkenlerin ortalamalarını listeler (ilk satır), iki veri setinden \verb+by.female.lnu+ adında bir liste yaratır (ikinci satı) ve erkek ve kadın işçiler için bir regresyon tahmini gerçekleştirir (üçüncü vfe dördüncü satır). {\small \begin{verbatim} by(lnu, list(female), mean) by.female.lnu <- by(lnu, list(female), function(x) x); str(by.female.lnu) summary(lm(log(wage) ~ school, data=by.female.lnu[[1]])) summary(lm(log(wage) ~ school, data=by.female.lnu[[2]])) \end{verbatim}} \subsection{Model formülü ve sonuçlarını görüntüleme} Model formülü {\small \begin{verbatim} (equation1 <- formula(reg.model)) log(wage) ~ school + female \end{verbatim}} Tahmin edilen katsayılar <>= coefficients(reg.model) # (katsayılar), # olarak kısaltılabilir @ Standart hatalar <>= coef(summary(reg.model))[,2] @ \verb++ komutu,\\ \verb++ (tahminleri) ve \verb++ (standart hataları) görüntüler. t-değerleri <>= coef(summary(reg.model))[,3] @ Ayrıca \verb++ komutunu da deneyin. Benzer biçimde lm-nesnesinin diğer elemanlarını: Varyans-Kovaryans matrisi: \verb++ : Artıklar serbestlik derecesi:\\ \verb++ \\ Hata kareler toplamı:\\ \verb++ ve diğer bileşenler:\\ \verb++\\ \verb++\\ \verb++\\ \verb++\\ \verb++\\ \verb++\\ komutları ile görüntüleyebilirsiniz. \subsection{White değişen varyans düzeltilmiş standart hatalar} \verb++, \verb++ ve \verb++ paketleri \emph{robust} standart hataları hesaplamak için önceden tanımlanmış fonksiyonları içerir. İki farklı ağırlıklandırma seçeneği mevcuttur. White düzeltmesi <>= library(car) f1 <- formula(log(wage) ~ female +school) sqrt(diag(hccm(lm(f1),type="hc0"))) @ kitaplığını kullanarak. <>= library(sandwich) library(lmtest) coeftest(lm(f1), vcov=(vcovHC(lm(f1), "HC0"))) @ kitaplığındaki \verb++ ve kitaplığındaki \verb++ orjinal White formülünü kullanmaktadır. \verb++, \verb++ varyansları $\frac{N}{N-k}$ ile çarpmaktadır. kitaplığını kullanarak: <>= library(Design, war, warn.conflicts = FALSE) f1 <- formula(log(wage) ~ female +school) fm1 <- robcov(ols(f1, x=TRUE, y=TRUE)) @ \subsection{Grup-içi sabit olmayan hata varyansı} Bu kitaplığını kullanmaktadır ve verinin değişkeni tarafından da işaret edildiği gibi sektörler arası kümelenme gösteridiği durumlara açıklama getirmektedir. <>= robcov(ols(f1, x=TRUE, y=TRUE), cluster=industry) @ Grup sayısı M küçük olduğunda standart hataları şu şekilde de düzeltebilirsiniz: <>= library(Design) f1 <- formula(log(wage) ~ female +school) M <- length(unique(industry)) N <- length(industry) K <- lm(f1)$rank cl <- (M/(M-1))*((N-1)/(N-K)) fm1 <- robcov(ols(f1, x=TRUE, y=TRUE), cluster=industry) fm1$var <- fm1$var*cl coeftest(fm1) @ \subsection{F-testi} Kısıtlı (bazı (veya tüm) eğim katsayıları üzerine sıfır kısıtının konduğu) ve kısıtsız (sıfır olan ve sıfır olmayan katsayılara izin veren) modelleri tahmin edin. Kısıtlı modelde tanımlandığı şekliyle \verb+anova()+ komutunu kullanarak ortak hipotezleri test edebilirsiniz. <>= mod.restricted <- lm(log(wage) ~ 1) mod.unrestricted <- lm(log(wage) ~ female + school) anova(mod.restricted,mod.unrestricted) @ Sabit olmayan hata varyansı altında White varyans-kovaryans matrisini kullanırız. Modele ait F-değeri aşağıdaki şekildedir. Aşağıdaki kodlarda yer alan \verb+<-1>+ sabit terim ile ilişkili satır/sütunu dışlar. <>= library(car) COV <- hccm(mod.unrestricted, "hc1")[-1,-1] beta <- matrix(coef(mod.unrestricted, ,1))[-1,] t(beta)%*%solve(COV)%*%beta/(lm(f1)$rank -1) @ \newpage \section{Zaman serileri} \label{Zamanserileri} \textit{Satırlarda veri} Zaman serileri genellikle verinin satırlarda olduğu biçimde olurlar. Örnek olarak \htmladdnormallink{National Institute of Economic Research}{http://www.konj.se} tarafından gerçekleştirilen İsveç Tüketici Anketi verisi kullanılmıştır. Veri setinde üç seri yer almaktadır: tüketici güven endeksi, bir makro endeks ve bir de mikro endeks. İlk olarak orjinal veri metin formatında bir dosyaya kaydedilmiştir. Veri \R'da girdi olarak kullanılmadan önce bir metin düzenleyicisi kullanılarak boşluk ile ayrılmış ilk üç serinin değerleri dosyanın içerisinde bırakılmıştır. Seriler satırlardadır. Serilere ait değerler değişken isimleri olmaksızın ayrı satırlarda listelenmiştir. \texttt{\htmladdnormallink{} {http://people.su.se/~ma/R_intro/data/macro.txt}} dosyasını okumak için, aşağıda yer alan kod 1993 yılında başlayan ve 12 frekansa (aylık) sahip zaman serisi nesnesini tanımlamadan önce \verb++ ve \verb++ yardımıyla veriyi 3 sütun ve 129 satıra yarleştirir. Seriler \verb+,+ ve \verb++ olarak adlandırılmıştır. \verb++'in varsayılan olarak veriyi sütunlara doldurduğuna dikkat edin. <>= FILE <- "http://people.su.se/~ma/R_intro/macro.txt" macro <-ts( matrix( scan(FILE),129,3), start=1993,frequency=12, names=c("cci","macro.index", "micro.index")) @ Burada bir değişkenin gecikmeli değerlerinin yaratılması ve veri setine eklenmesi örneği verilmektedir. Hesaplama farklılıkları için ayrıca \verb++'e bakınız. \verb++ veri setindeki veriye gecikmeli \verb++'yi (1 ay geciktirilmiş) ekleyerek yeni bir veri seti yaratalım. \verb++ fonksiyonu tüm gözlemleri saklayarak serileri biraraya getirirken, \verb++ yalnızca seilerin çakışan kısımlarını saklar. <>= macro2 <- ts.union( macro, l.cci = lag(macro[,1],-1)) @ aggregate fonksiyonu zaman serisi verisinin frekansını değiştirmek için kullanılabilir. Aşağıdaki örnek verinin frekansını değiştirmektedir. \verb+nfrequency=1+ yıllık veri oluşturmaktadır. \verb+FUN=mean+ zaman içerisinde değişkenlerin ortalamasını hesaplamaktadır. Varsayılan ise \verb++'dır. <>= aggregate(macro,nfrequency=1,FUN=mean) @ \subsection{Durbin Watson} \verb++ paketindeki \verb++ ve \verb++ paketindeki \verb++ kullanılabilir. Ayrıca Breusch-Godfrey yüksek sıradan ardışık bağımlılık testi için \verb++ paketindeki \verb++'e bakınız. <>= # Fitting the model. mod1 <- lm(cci ~ macro.index, data=macro) library(lmtest) dwtest(mod1) @ \section{Grafikler} \subsection{Grafikleri postscript formatında kaydetme} {\small \begin{verbatim} postscript("myfile.ps") hist(1:10) dev.off() \end{verbatim}} \subsection{Grafikleri pdf formatında kaydetme} {\small \begin{verbatim} pdf("myfile.pdf") hist(1:10) dev.off() \end{verbatim}} \subsection{Gözlemlerin ve regresyon doğrusunun grafiğini çizme} Verinin ve regresyon doğrusunun grafiğini çiz. \verb++'u \verb++'e karşı çiz. <>= X.LABEL= "Okul süresi" Y.LABEL= "SEK Log saatlik ücret" TITLE <- "Grafik 1: Serpilim ve Regresyon" SubTitle <- "Kaynak: Yasam Düzeyi Anketi, LNU, 1991" plot(school,log(wage), pch=".", main = TITLE, sub = SubTitle, xlab=X.LABEL, ylab=Y.LABEL) abline(lm(log(wage) ~ school )) abline(v = mean(school), col="red") abline(h = mean(log(wage)), col="red") @ \newpage \subsection{Zaman serileri grafiği} Zaman serisi veri setini okutarak başlayın. Ayrıntılar için \ref{Zamanserileri}. kısma bakınız. Serileri bir grafikte çiz <>= TITLE <- "Grafik 2: Tüketici güven endeksi" SubTitle <- "Kaynak: Tüketici Anketi" X.LABEL <- "YIL" COLORS = c("red","blue","black") ts.plot(macro, col=COLORS, main = TITLE, sub = SubTitle, xlab=X.LABEL) legend("bottomright",legend=colnames(macro), lty=1,col=COLORS) @ \verb++ serileri ayrı ayrı çizdirir. \section{Fonksiyon yazma} Yazım: \verb+myfunction <- function(x, a, ...) \{...\}+ şeklindedir. Fonksiyon için argümanlar fonksiyon gövdesinde, yani \{ \} içerisinde yer alan kodlar, tanımlanmış işlemlerde kullanılan değişkenlerdir. Bir kez bir fonksiyon yazıp onu kaydettiğinizde, bu fonksiyonu \{...\} içerisinde tanımlanmış işlemler için fonksiyonunuza atıf yaparak ve gerçekleştirilen işlem için gerekli olan argümanları kullanarak gerçekleştirebilirsiniz. Aşağıdaki fonksiyon bir değişkenin ortalamasının karesini hesaplamaktadır. \verb++ fonksiyonunu tanımlayarak değişkeninin ortalamasının karesini hesaplamak istediğinizde her seferinde \verb+<(mean(x))^2)>+ yazmak yerine \verb++ yazabilirsiniz. <>= ms <- function(x) {(mean(x))^2} a <- 1:100 ms(a) @ \textit{Fonksiyonun argümanları:} Aşağıdaki fonksiyon argüman içermemektedir ve \verb++ metin dizisini görüntülemektedir. <>= welc <- function() {print("Hosgeldiniz")} welc() @ Bu fonksiyon \verb+x+ argümanını almaktadır. Fonksiyonun argümanları yazılmalıdır. <>= myprog.no.default <- function(x) print(paste("I use", x ,"for statistical computation.")) @ Eğer varsayılan değer belirlenmişse, herhangi bir argüman yazılmadığında varsayılan değer kabul edilir. \footnotesize <>= myprog <- function(x="R") {print(paste("I use", x ,"for statistical computation."))} myprog() myprog("R and sometimes something else") @ \normalsize \subsection{Kümelenmiş Standart Hataları hesaplamak için bir fonksiyon} Burada kümelenmiş standart hataları hesaplamak için bir fonksiyon yer almaktadır (Yukarıda anlatılan \verb+Design+ kitaplığındaki \verb+robcov+ fonksiyonuna da bakınız). Argümanlar veri seti \verb++, model formülü \verb++ ve kümelenme değişkenidir \verb++. {\small \begin{verbatim} clustered.standard.errors <- function(dat,f1, cluster){ attach(dat, warn.conflicts = FALSE) M <- length(unique(cluster)) N <- length(cluster) K <- lm(f1)$rank cl <- (M/(M-1))*((N-1)/(N-K)) X <- model.matrix(f1) invXpX <- solve(t(X) %*% X) ei <- resid(lm(f1)) uj <- as.matrix(aggregate(ei*X,list(cluster),FUN=sum)[-1]) sqrt(cl*diag(invXpX%*%t(uj)%*%uj%*%invXpX)) } \end{verbatim}} Son satırı \verb+sqrt(diag(invXpX %*%t(ei*X)%*%(X*ei)%*%invXpX))+ ile\\ değiştirmenin White standart hataları vereceğine dikkat ediniz. \section{Çeşitli ipuçları} \begin{tabular}{ll} Gelir Dağılımı & Bakınız \htmladdnormallink{ineq}{http://cran.at.r-project.org/src/ contrib/Descriptions/ineq.html}.\\ Logit & \verb+.+ \\ & Bakınız \verb+ & . +\\ Negatif binom & \verb++ in \htmladdnormallink{MASS, VR}{http://cran.at.r-project.org/src/contrib/Descriptions/VR .html}.\\ Poisson regresyonu & \verb+.+\\ & Bakınız \verb+ & .+\\ Probit & \verb+.+ \\ & Bakınız \verb+ & . +\\ Eşanlı denklemler & Bakınız \htmladdnormallink{ sem}{http://cran.at.r-project.org/src/contrib/Descriptions/ sem.html}, \htmladdnormallink{ systemfit}{http://cran.at.r-project.org/src/contrib/ Descriptions/systemfit.html}.\\ Zaman Serileri & Bakınız \verb++ \htmladdnormallink{tseries}{http://cran.at.r-project.org/src /contrib/Descriptions/tseries.html}, \htmladdnormallink{urca}{http://cran.at.r-project.org/src/ contrib/Descriptions/urca.html} ve \htmladdnormallink{strucchange}{http://cran.at.r-project.org /src/contrib/Descriptions/strucchange.html}.\\ Tobit & Bakınız \verb++, \htmladdnormallink{ survival}{http://cran.at.r-project.org/src/contrib/ Descriptions/survival.html} içerisinde.\\ \end{tabular} \section{Teşekkür} Michael Lundholm , Lena Nekby ve Achim Zeileis'e değerli yorumları için minnettarım. \newpage \bibliography{LittBibRintro} \bibliographystyle{plainnat} \end{document} <>= write(paste( "@BOOK{AER, AUTHOR = {Christian Kleiber and Achim Zeileis}, TITLE = {Applied Econometrics with R}, PUBLISHER = {Springer}, YEAR = 2008, ADDRESS = {New York}, NOTE = {ISBN 978-0-387-77316-2}, URL = {http://www.springer.com/978-0-387-77316-2}}" , "@Book{Dalgaard, author = {Peter Dalgaard}, title = {Introductory Statistics with {R}}, edition = {2nd}, year = 2008, publisher = {Springer}, note = {ISBN 978-0-387-79053-4}, pages = 380, url = {http://www.biostat.ku.dk/~pd/ISwR.html}, publisherurl = {http://www.springer.com/statistics/computational/book/978-0 -387-79053-4}}" , "@Book{FOX, author = {John Fox}, title = {An {R} and {S-Plus} Companion to Applied Regression}, publisher = {Sage Publications}, year = 2002, address = {Thousand Oaks, CA, USA}, note = {ISBN 0-761-92279-2}, url = {http://socserv.socsci.mcmaster.ca/jfox/Books/Companion/ index.html}}" , "@Manual{Rcore, title = {R: A Language and Environment for Statistical Computing}, author = {{R Development Core Team}}, organization = {R Foundation for Statistical Computing}, address = {Vienna, Austria}, year = {2008}, note = {{ISBN} 3-900051-07-0}, url = {http://www.R-project.org} }" , "@Unpublished{Koenker07, author = {Koenker, Roger and Zeileis, Achim}, year = {2007}, title = {Reproducible Econometric Research (A Critical Review of the State of the Art)}, note = {Report 60, Department of Statistics and Mathematics, Wirtschaftsuniversität Wien, Research Report Series}, url = {http://www.econ.uiuc.edu/~roger/research/repro/}}" , "@Book{VR, author = {William N. Venables and Brian D. Ripley}, title = {Modern Applied Statistics with {S}. Fourth Edition}, publisher = {Springer}, year = 2002, address = {New York}, note = {ISBN 0-387-95457-0}, url = {http://www.stats.ox.ac.uk/pub/MASS4/}, publisherurl = {http://www.springeronline.com/sgw/cda/frontpage/0,11855,4- 40109-22-1542120-0,00.html}}" , sep="\n"), file="LittBibRintro.bib") @