Когнитивная психология и эмоции
Субъективные заметки студента-психолога
Записи в рубрике «R»

Настройки конфигурации в R

6 января 2012, анализ данных Метки: ,

При запуске R настройки считываются из нескольких файлов, которые подробно описаны тут. Для пользовательских настроек предполагается использовать два файла: .Renviron и .Rprofile , которые берутся из рабочей директории или домашней директории юзера. Первый предназначен для хранения переменных окружения, второй — для выполнения команд после запуска. Мои конфиги сейчас выглядят так:

.Renviron:

R_PDFLATEXCMD="~/texlive/2011/bin/x86_64-linux/pdflatex"
R_LATEXCMD="~/texlive/2011/bin/x86_64-linux/latex"
R_HISTSIZE='100000'

Первые две переменных задают пути к latex и pdflatex, третья — размер истории в консоли R.

.Rprofile:

#жесткое задание репозитория
r <- getOption("repos") 
r["CRAN"] <- "http://cran.gis-lab.info"
options(repos = r)
rm(r)
 
#алиасы для команд
s <- base::summary;
h <- utils::head;
n <- base::names;
 
#маленькая функция для загрузки пакетов в определенную директорию
inst.pkg <- function(pkg){
  install.packages(pkg,destdir="~/r-packages/")
}
 
#подгрузка наиболее часто используемых библиотек
library(doBy)
library(ggplot2)
library(car)
library(coin)

В общем, я его только сегодня начал использовать, по мере необходимости буду пополнять. Вот тут люди свои конфиги выкладывали, тоже интересно.

Анализ данных в бизнесе: открытый код vs. коммерческие продукты

22 сентября 2011, наука Метки: , , ,

Нашел очень интересную дискуссию на тему будущего открытого кода в бизнес-аналитике. Один автор выступает, условно, за открытый код, другой сомневается в его будущем. Я согласен, скорее, со второй точкой зрения, несмотря на всю мою любовь к открытому кода. Вкратце, аргументы сторон.

За открытый код:

  • Деньги, вложенные в покупку ПО, более выгодно вкладывать в развитие аналитиков, «покупку талантов», экспериментирование на основе результатов анализа и прочее.
  • Высококлассная  аналитика всегда будет предполагать нестандартные подходы, соответственно, вне зависимости от ПО, его придется дорабатывать. У OpenSource в этом отношении больше возможностей, хотя бы в плане доступности уже разработанных кусков кода.
  • Коммерческое ПО ограничивает аналитиков в том плане, что если написано, что «даются более точные прогнозы , позволяющие снизить накладные расходы» (что угодно), то это и только это  будет требоваться менеджерами. В то же время, зачастую аналитик может обнаруживать «инсайты» в данных, в отношении которых трудно оценить точно их полезность.
  • Плюс к этому, вложения в коммерческое ПО увеличивают склонность к консервативному поведению за счет того, что аналитики и их непосредственное начальство в большей степени рискует своим политическим капиталом. «Мы вам купили программу за большие деньги, а вы нам не можете однозначный прогноз дать?».

Против: продолжение »

SAS и R в приложении к кредитным рискам и расчет взвешенных значений по группам в R

29 июля 2011, заметки Метки: , ,

Наткнулся на просторах сети (в группе по R на linkedin, если точнее) на пост про презентацию по использованию SAS и R в оценке кредитных рисков. Сама презентация тут. Про сами риски я почти ничего не понял, но вот сравнение кусков кода SAS и R и описание со стороны плюсов и минусов данных программ весьма интересно. Я сам SAS никогда не использовал, но, судя по коду, язык этот более жесткий, нежели R, например требуется явное объявление переменных. Кстати, вот кусок кода из презентации:
продолжение »

Описание результатов glm из R в MS Word

20 июня 2011, заметки Метки: , , , ,

Суть проблемы: glm при использовании не-гауссовских распределений (пуассоновское, биномиальное) не выдает информации о коэффициенте псевдо-R2. У этого есть определенные основания (которые я пока до конца не понял), но, тем не менее, обычно этот коэффициент требуется в публикациях. Для его вычисления можно использовать функцию pR2. Ниже мини-функция, которая вставляет в Word описательную таблицу регрессии и статистики самой модели.

library(R2wd) #пакет для работы с Word
library(pscl) #пакет для pR2
 
wdGet() #подключение к Word
 
# сама функция
describe.glm<-function (fit){
  cb<-cbind(LogLik=logLik(fit),deviance=fit$null.deviance-fit$deviance, df=fit$df.null-fit$df.residual, p=1-pchisq(-fit$deviance+fit$null.deviance, -fit$df.residual+fit$df.null ),"Pseudo R-squared" = pR2(fit)[4])
  summ<-cbind(coef(summary(fit)),NA)
  summ<-round(summ,digits=3)
  summ[,5]<-symnum(summ[,4], cutpoints=c(0,0.001,0.01,0.05,0.1,1),symbols=c('***', '**', '*', '.','' ), legend=F)
  summ[,4]<-ifelse(summ[,4]==0,"< 0.001",summ[,4])
  wdTable(summ,align=c("l",rep("r",ncol(summ)-1),"l"))
  wdNormal(paste("LL = ",round(cb[1],digits=2),", /chi2(",cb[3],") = ",round(cb[2],digits=2),", p = ",round(cb[4],digits=3),", /r2 = ",round(cb[5],digits=2),"",sep=""))
}
 
#пример с логистической регрессией из Venables and Ripley (2002, pp. 190-2.)
ldose <- rep(0:5, 2)
numdead <- c(1, 4, 9, 13, 18, 20, 0, 2, 6, 10, 12, 16)
sex <- factor(rep(c("M", "F"), c(6, 6)))
SF <- cbind(numdead, numalive=20-numdead)
budworm.lg <- glm(SF ~ sex*ldose, family=binomial)
summary(budworm.lg)
 
#Call:
#glm(formula = SF ~ sex * ldose, family = binomial)
#
#Deviance Residuals: 
#     Min        1Q    Median        3Q       Max  
#-1.39849  -0.32094  -0.07592   0.38220   1.10375  
#
#Coefficients:
#            Estimate Std. Error z value Pr(>|z|)    
#(Intercept)  -2.9935     0.5527  -5.416 6.09e-08 ***
#sexM          0.1750     0.7783   0.225    0.822    
#ldose         0.9060     0.1671   5.422 5.89e-08 ***
#sexM:ldose    0.3529     0.2700   1.307    0.191    
#---
#Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 
#
#(Dispersion parameter for binomial family taken to be 1)
#
#    Null deviance: 124.8756  on 11  degrees of freedom
#Residual deviance:   4.9937  on  8  degrees of freedom
#AIC: 43.104
#
#Number of Fisher Scoring iterations: 4
#
 
describe.glm(budworm.lg)

Результат в Word (на самом деле, он там даже симпатичнее):

  Estimate Std. Error z value Pr(>|z|)  
(Intercept) -2.994 0.553 -5.416 < 0.001 ***
sexM 0.175 0.778 0.225 0.822  
ldose 0.906 0.167 5.422 < 0.001 ***
sexM:ldose 0.353 0.27 1.307 0.191  

LL = -17.55, /chi2(3) = 119.88, p = < 0.001, /r2 = 0.77

--------------
/chi2 потом меняется на нормальную запись χ2 с верхней двойкой, /r2 — на R2.
Еще б понять, почему после таблицы пустая строка вылезает.

Tinn-R vs. RStudio

26 апреля 2011, заметки Метки: , ,

Все-таки Tinn-R мне пока нравится больше, хотя в перспективе у RStudio есть шансы. Он еще пока beta, так что все может стать лучше. Но пока что подсветка синтаксиса у него убогая. Зато автодополнение по табу сделано лучше, чем в Tinn-R. Но у Tinn-R есть прикольные фишечки типа запоминания блоков кода и их запуск по горячим клавишам, кнопки для описания переменных (names и еще что-то типа summary, но не summary). Но перспективы, повторюсь, у RStudio большие.

Сравнение подсветки синтаксиса в Tinn-R и RStudio

Сравнение подсветки синтаксиса в Tinn-R и RStudio