Julia tem alguma esperança de permanecer na comunidade estatística?

161

Recentemente, li um post da R-Bloggers, vinculado a este post do John Myles White sobre um novo idioma chamado Julia . Julia tira proveito de um compilador just-in-time que oferece maus tempos de execução rápidos e o coloca na mesma ordem de magnitude de velocidade que o C / C ++ (a mesma ordem , não igualmente rápida). Além disso, ele usa os mecanismos de loop ortodoxo com os quais nós, que começamos a programar em linguagens tradicionais, estão familiarizados, em vez das instruções de aplicação de R e operações de vetor.

R não está indo embora de maneira alguma, mesmo com esses horários impressionantes de Julia. Possui amplo suporte na indústria e vários pacotes maravilhosos para fazer praticamente qualquer coisa.

Meus interesses são de natureza bayesiana, onde a vetorização geralmente não é possível. Certamente tarefas em série devem ser executadas usando loops e envolvem computação pesada a cada iteração. O R pode ser muito lento nessas tarefas de loop serial, e o C / ++ não é um passeio no parque para escrever. Julia parece ser uma ótima alternativa para escrever em C / ++, mas está em sua infância e carece de muitas das funcionalidades que eu amo sobre R. Só faria sentido aprender Julia como uma bancada de estatística computacional se ela receber suporte suficiente da comunidade de estatísticas e as pessoas começam a escrever pacotes úteis para isso.

Minhas perguntas seguem:

  1. Que recursos Julia precisa ter para ter o fascínio que fez de R a linguagem de fato das estatísticas?

  2. Quais são as vantagens e desvantagens de aprender Julia a executar tarefas pesadas em termos de computação, em vez de aprender uma linguagem de baixo nível como C / ++?

Christopher Aden
fonte
7
Como Julia é melhor que Incanter ( incanter.org ) e outros projetos similares?
Wayne
24
Re construções processuais (por exemplo, loop): isso soa como um passo gigante para trás. Estamos à beira de uma mudança de plataformas de CPU única e pequena para plataformas massivamente paralelas. Como essa evolução ocorre na próxima década, o estilo funcional de codificação fácil e automaticamente paralelamente colherá enormes vantagens sobre o código processual. Muitas outras considerações interferem na escolha de uma plataforma estatística, é claro, mas vale a pena considerar essa como uma estratégia de longo prazo.
whuber
12
Christopher, uma boa abordagem é formular perguntas de maneira a solicitar razões e evidências. Por exemplo, em vez de "Julia tem o fascínio necessário ...", tente algo como "Quais elementos de Julia podem lhe dar uma chance de ganhar tração e por quê"; em vez de "Vale a pena aprender", pergunte "Por que Julia vale a pena aprender agora? Quais são suas vantagens em potencial?" Você pode refinar ainda mais essa questão, especificando que tipos de usos de Julia você pode estar interessado em, tais como desenvolvimento de software, resolução de problemas pontuais, bioestatística, mineração de dados, etc.
whuber
1
@ Whuber: Agradeço as sugestões e as implementei. Obrigado!
Christopher Aden
2
@ trolle3000 Não acho que alguém esteja afirmando que a paralelização é tão automática. No entanto, quando (se) você escreveu uma versão funcional de um programa, já realizou grande parte do esforço necessário para paralelá-lo, e é por isso que aplicativos como o Mathematica podem automatizar a paralelização, geralmente com bastante eficiência. Se, em vez disso, você codificou um algoritmo de maneira processual, geralmente será muito mais difícil paralelizá-lo.
whuber

Respostas:

96

Eu acho que a chave será se as bibliotecas começam ou não a ser desenvolvidas para Julia. É bom ver exemplos de brinquedos (mesmo que sejam complicados) mostrando que Julia sopra R fora da água nas tarefas em que R é ruim.

Mas loops mal-feitos e algoritmos codificados à mão não são o motivo pelo qual muitas pessoas que conheço que usam R usam R. Eles o usam porque, para quase qualquer tarefa estatística sob o sol, alguém escreveu código R para ele. R é uma linguagem de programação e um pacote de estatísticas - atualmente, Julia é apenas a primeira.

Eu acho que é possível chegar lá, mas existem muito mais linguagens estabelecidas (Python) que ainda lutam por serem kits de ferramentas estatísticas utilizáveis.

Fomite
fonte
Você realmente olhou o código de referência (ou as referências) para saber que os métodos R estão mal escritos? Eu estou tentando encontrá-lo eu mesmo para ver como foram utilizadas as várias línguas ...
Josh Hemann
10
@ JoshHemann Analisei o suficiente para saber que, de maneira geral, R é "lento". Ele não perde sempre, e ocasionalmente sopra Python para fora da água, mas em todos esses casos a faixa "quem ganha" parece ir para a qual o programador Python ou R realmente escreveu a maioria de suas coisas em C .
fomite
5
O código de referência é terrível . Ganhos de velocidade de 2000x são possíveis para seus exemplos de R. Consulte stackoverflow.com/questions/9968578/… , especialmente os comentários.
Ari B. Friedman
12
Você está certo, @gsk. Por exemplo, pisum(em github.com/JuliaLang/julia/blob/master/test/perf/perf.R ) leva 7,76 segundos enquanto uma reescrita simples usando R ( replicate(500, sum((1 / (10000:1))^2))[500]) idiomático leva 0,137 segundos, mais do que uma aceleração de cinquenta vezes.
whuber
2
Uma das razões pelas quais o R decolou foi sua compatibilidade com o S-PLUS. As pessoas foram capazes de usar muitos códigos antigos. O código antigo muito usado tem menos bugs. Com coisas novas como Julia, que não são compatíveis com o código antigo, você precisa de uma situação de "aplicativo matador": algo que justifique todos os problemas de mudar para uma nova plataforma. É semelhante ao novo idioma do Google, Go - boa tentativa, mas por que eu aprenderia isso?
Aksakal
56

Eu concordo com muitos outros comentários. "Esperança"? Certo. Acho que Julia aprendeu muito com o que R e Python / NumPy / Pandas e outros sistemas fizeram certo e errado ao longo dos anos. Se eu fosse mais esperto do que sou e desejasse escrever uma nova linguagem de programação que seria o substrato para um ambiente de desenvolvimento estatístico no futuro, seria muito parecido com Julia.

Dito isto, serão necessários cinco anos para que esta pergunta possa ser respondida em retrospectiva. No momento, Julia não possui os seguintes aspectos críticos de um sistema de programação estatística que poderia competir com o R para usuários do dia-a-dia:

(lista atualizada ao longo do tempo ...)

  • tipos de fatores pedidos opcionalmente
  • maioria dos testes estatísticos e modelos estatísticos
  • suporte à programação alfabetizada / análise reproduzível
  • Plotagem da classe R ou mesmo da classe Matlab

Para competir com R, Julia e pacotes de estatísticas complementares precisam ser limpos o suficiente e completos o suficiente para que não programadores inteligentes, dizem estudantes de ciências sociais, possam usá-lo razoavelmente. Há muito trabalho para chegar lá. Talvez isso aconteça, talvez fracasse, talvez algo mais (R 3.0?) A substitua.

Atualizar:

Julia agora suporta DataFrames com dados / NAs ausentes, módulos / namespaces, formulatipos e model.matrixinfra - estrutura, plotagem (sorta), suporte a banco de dados (mas ainda não aos DataFrames ainda) e passando argumentos por palavras-chave. Agora também há um IDE (Julia Studio), suporte do Windows, alguns testes estatísticos e algum suporte de data / hora.

Harlan
fonte
literate programming/reproduce-able analysis support-> veja IJulia .
Piotr Migdal
1
Adicione o kernel iJulia ao ecossistema de notebooks iPython / Jupyter.
Thecity2 15/05
2
O Julia Studio está sendo desativado e o Juno agora é o IDE #
Antony
3
2,5 anos após a publicação desta resposta, dois terços dos itens da lista de "itens obrigatórios" agora estão implementados. Acho que é a melhor evidência que você pode achar de que Julia tem uma promessa real.
Senderle
5 anos devem ter passado. Já estamos lá, @Harlan?
StasK
35

Para mim, uma coisa muito importante para uma linguagem de análise de dados é ter uma funcionalidade de álgebra de consulta / relacional com padrões razoáveis ​​e design orientado à interatividade, e, idealmente, isso deve ser incorporado à linguagem. IMO, nenhuma linguagem FOSS que eu usei faz isso de forma eficaz, nem mesmo R.

O data.frame é muito desajeitado para trabalhar interativamente - por exemplo, imprime toda a estrutura de dados na chamada, é difícil trabalhar programaticamente com a sintaxe $ , a consulta requer uma auto-referência redundante (por exemplo, DF[DF$x < 10]), junções e agregação são estranhas. O Data.table resolve a maioria desses aborrecimentos, mas como não faz parte da implementação principal, a maioria dos códigos R não utiliza suas instalações.

Os pandas em python sofrem dos mesmos defeitos.

Essas queixas podem parecer exigentes, mas essas falhas se acumulam e, no final, são significativas em agregado, pois acabam custando muito tempo.

Acredito que, para que Julia seja bem-sucedida como um ambiente de análise de dados, é necessário dedicar esforços à implementação de operadores do tipo SQL (sem a bagagem da sintaxe SQL) em um tipo de dados de tabela amigável.

Yike Lu
fonte
1
+ 1 - Um ponto interessante, cuidadosamente explicado. Bem vindo à nossa comunidade!
whuber
4
Para ser exigente, os DataFrames grandes do Pandas, na verdade, não imprimem todo o seu conteúdo quando invocados, como acontece em R. Eles passam a exibir cabeçalhos de coluna junto com uma contagem de valores nulos / não nulos. Além disso, embora eu concorde que a sintaxe não é ideal, os problemas de escopo dificultam a eliminação da auto-referência para a filtragem no estilo de compreensão. É mais elaborado, mas também é resistente a colisões de namespace se um DataFrame tiver colunas extras em tempo de execução que você não esperava.
goodside
29

Eu posso assinar com o que Dirk e EpiGrad disseram; No entanto, há mais uma coisa que faz do R um idioma único em seu nicho - sistema de tipos orientados a dados.

Os R's foram projetados especialmente para manipular dados, é por isso que são centrados em vetores e possuem coisas como data.frames, fatores, NAs e atributos.
Os tipos de Julia são, por outro lado, orientados para o desempenho numérico, portanto, temos escalares, modos de armazenamento bem definidos, uniões e estruturas.

Isso pode parecer benigno, mas todo mundo que já tentou fazer estatísticas com o MATLAB sabe que realmente dói.

Então, pelo menos para mim, Julia não pode oferecer nada que eu não possa consertar com um pedaço C de poucas linhas e mata muita expressividade realmente útil.

user88
fonte
4
(+1) Bom ponto. Pensamentos adicionais: A falta de data.frameinstalações semelhantes em Python há muito me incomoda, mas agora o Pandas parece ter resolvido esse problema. A fórmula está entre algumas das extensões planejadas dos modelos de estatísticas (bem, sabemos que às vezes é melhor evitar a interface da fórmula em R). Há uma proposta data.frame para Julia (muito rápido em comparação com Python!), (...)
chl
5
Acho @mbq também tem um ponto sobre C. Se eu precisar de velocidade na mesma ordem de grandeza como C / C ++ ... eu posso usar C / C ++ com R.
fomite
4
@ EpiGrad, sim, você pode escrever C / C ++ e fazer uma interface limpa com R. Mas isso é uma fraqueza, não uma força da linguagem. Com Julia, os usuários finais nunca precisarão escrever C para obter velocidade.
Harlan
2
@ Harlan É apenas uma fraqueza se você já conhece Julia e C. Eu afirmaria o tempo gasto em C <tempo aprendendo um novo idioma e reimplementando tudo do zero.
fomite
9
@ Harlan E para ser franco, essas pessoas não vão reescrever suas coisas em Julia. R como um pacote estatístico, não uma linguagem de programação é o seu caso de uso .
fomite
26

Vejo Julia substituindo o Matlab, o que seria um grande serviço para a humanidade.

Para substituir o R, você precisa considerar todas as coisas que Neil G, Harlan e outros mencionaram, além de um grande fator que não acredito ter sido abordado: fácil instalação do aplicativo e de suas bibliotecas.

No momento, você pode baixar um binário do R para Mac, Windows ou Linux. Ele funciona imediatamente com uma grande variedade de métodos estatísticos. Se você deseja baixar um pacote, é um simples comando ou clique do mouse. Isso simplesmente funciona.

Fui baixar Julia e não é simples. Mesmo que você baixe o binário, é necessário ter o gfortran instalado para obter as bibliotecas apropriadas. Eu baixei a fonte e tentei makee falhou sem nenhuma mensagem realmente útil. Tenho graduação e pós-graduação em ciência da computação, para que eu pudesse bisbilhotar e fazê-lo funcionar se quisesse. (Não estou.) Joe Statistician fará isso?

O R não apenas possui uma grande variedade de pacotes, mas também um sistema bastante sofisticado que faz binários do aplicativo e quase todos os pacotes automaticamente. Se, por algum motivo, você precisar compilar um pacote da fonte, isso não será mais difícil (desde que você tenha um compilador apropriado, etc, instalado no seu sistema). Você não pode ignorar essa infraestrutura, fazer tudo via github e esperar ampla adoção.

Edição: Eu queria brincar com Julia - parece emocionante. Dois problemas:

1) Quando tentei instalar pacotes adicionais (esqueça o que eles chamam em Julia), ele falhou com erros obscuros. Evidentemente, meu Mac não tem uma ferramenta semelhante à que eles esperavam. Não apenas falha, mas deixa coisas por aí que eu tenho que excluir manualmente ou outras instalações falharão.

2) Eles forçam um certo espaçamento em uma linha de código. Não tenho os detalhes à minha frente, mas tem a ver com macros e não ter um espaço entre a macro e os parênteses abrindo seus argumentos. Esse tipo de restrição realmente me incomoda, já que desenvolvi minha formatação de código ao longo de muitos anos e linguagens e, na verdade, coloco um espaço entre um nome de função / macro e o parêntese de abertura. Algumas restrições de formatação de código eu entendo, mas espaço em branco dentro de uma linha?

Wayne
fonte
5
Julia ainda está muito na sua infância. Não sou historiador, mas aposto que binários limpos de R também não apareceram nos primeiros meses. Seu ponto de vista sobre o sistema de distribuição é algo que eu não vi mencionado até agora. Por outro lado, eu também apostaria que o CRAN não surgiu ao mesmo tempo que R. Um "CJAN" seria definitivamente bom para adoção em larga escala.
Christopher Aden
7
Você pode estar interessado, então, em saber, @Christopher, que R é realmente um clone independente de um pacote (S, depois S-Plus) que havia sido um sucesso comercial (moderado) e estava em desenvolvimento dez anos antes. Isso deu um avanço significativo que Julia (e muitos outros esforços desse tipo) nunca teve.
whuber
3
@ChristopherAden: Concordo que Julia ainda é jovem. Mas eu discordo veementemente que "um 'CJAN' seria definitivamente bom para adoção em larga escala": é uma necessidade absoluta. As únicas ferramentas em que consigo pensar que não possuem uma infraestrutura tipo CRAN são altamente especializadas - como o JAGS. Mas Julia, como R, é de propósito geral.
Wayne
10
O dia em que o Open Source Language substituirá o MATLAB será o melhor dia para o mundo da engenharia.
Royi 02/08/19
9
"Posso ver Julia substituindo o Matlab, o que seria um grande serviço para a humanidade." Eu não poderia concordar mais.
Davidav #
24

A linguagem da Julia é bem nova; é hora do ponto em que a luz pode ser medida em semanas (mesmo que seu tempo de desenvolvimento possa ser medido em anos). Agora, aquelas semanas em destaque foram semanas muito emocionantes - veja, por exemplo, a recente conversa em Stanford, onde "havia acabado de começar" -, mas o que você pede em termos de infraestrutura mais ampla e suporte a pacotes levará muito mais tempo para materializar.

Então, eu continuaria usando R e ficaria atento às alternativas em desenvolvimento. No ano passado, muitas pessoas ficaram loucas por Clojure; este ano, Julia é o novo sabor reinante. Vamos ver se fica.

Dirk Eddelbuettel
fonte
16
Por causa do que vi via Rcpp, fico ainda mais impressionado com Julia - cerca de 50, 60, 70 vezes mais para loop simples como no MCMC e várias centenas de vezes para exemplos "degenerados" como fibonacci são essencialmente os mesmos que Rcpp conseguiu! Mas também sei que, com o Rcpp, ainda tenho acesso aos pacotes 3700 CRAN - assim como inúmeras bibliotecas C ++ -, enquanto Julia agora não tem quase nada. Dito isto, a promessa de Julia é enorme. Mas talvez exista um "então" e um "agora". O tempo vai dizer.
precisa saber é o seguinte
2
E não se esqueça do Incanter, que deveria se tornar um ambiente estatístico baseado no Clojure. Como Julia é superior a isso?
317 Wayne
2
@ Wayne, não vamos enlamear as águas aqui. Abra uma nova questão para que (talvez um que pede para a comparação entre vários idiomas)
naught101
2
@ naught011: Estou simplesmente ecoando o ponto de Dirk de que Clojure era o sabor do mês, depois especificamente o Incanter, agora Julia. Não acho que Julia ou Incanter (ou Clojure) tenham chance de serem plataformas estatísticas generalizadas.
Wayne
2
Não tenho ideia, mas atualizo com satisfação o lado R: Atualmente, mais de 6400 pacotes no CRAN e agora mais de 350 dos que usam o Rcpp. Ainda funciona para mim. O pessoal da Julia parece ativo e feliz - e ter uma escolha é uma coisa boa. Não existe um idioma para todos os problemas: desculpe, Python .
precisa saber é o seguinte
19

Bruce Tate aqui, autor de Sete Idiomas em Sete Semanas. Aqui estão alguns pensamentos. Estou trabalhando em Julia para o livro de acompanhamento. A seguir, é apenas a minha opinião após algumas semanas de jogo.

Existem duas forças fundamentais em jogo. Primeiro, todos os idiomas têm uma vida útil. R será substituído algum dia. Nós não sabemos quando. Novos idiomas têm um tempo extremamente difícil de evoluir. Quando um novo idioma evolui, geralmente resolve algum ponto de dor avassalador.

Essas duas coisas estão relacionadas. Para mim, estamos começando a ver um tema tomando forma em torno de idiomas como R. Não é rápido o suficiente e é mais difícil do que precisa ser. Aqueles que podem viver dentro de um determinado envelope de desempenho e permanecer nas bibliotecas estabelecidas estão bem. Aqueles que não podem precisar de mais e estão começando a procurar mais.

O problema é que as arquiteturas de computadores estão mudando e, para tirar proveito delas, a linguagem e suas construções precisam ser construídas de uma certa maneira. A opinião de Julia sobre a concorrência é interessante. Otimiza a coisa certa para essa linguagem: distribuição transparente e movimento eficiente de dados entre processos. Quando uso Julia para tarefas típicas, mapas e transformações, estou apenas chamando funções. Não preciso me preocupar com o encanamento.

Para mim, o fato de Julia ser mais rápida em um processador é interessante, mas não é demais para R. O que é interessante para mim é que, como os processadores dependem cada vez mais de multicore para desempenho, os problemas técnicos de computação estão praticamente na posição ideal aproveitar a melhor vantagem possível, dada a linguagem correta.

O outro recurso que ajudará a acontecer é de fato macros. O ritmo do idioma é intenso agora. As macros permitem que você construa com blocos de construção maiores e mais limpos. Olhar para bibliotecas é interessante, mas não conta a imagem toda. Você precisa observar o crescimento das bibliotecas. A trajetória de Julia está bem aqui.

O Clojure é interessante para alguns, porque não existe uma linguagem técnica que faça o que R pode, então alguns procuram uma linguagem de propósito geral para preencher esse vazio. Na verdade, sou uma grande fã. Mas Clojure é uma distorção cerebral bastante séria. O Clojure estará lá para programadores que precisam fazer computação técnica. Não será para engenheiros e cientistas. Há muito a aprender.

Então, para mim, Julia, ou algo assim, substituirá R algum dia. É uma questão de tempo.

user1295658
fonte
Não há muitos idiomas novos que forneçam tipos de modelo e um macro ecossistema derivado de lisp de primeira classe - Julia fornece. Esse recurso, juntamente com seus recursos de simultaneidade e velocidade (que provavelmente melhorarão em versões futuras), proporcionam uma forte posição competitiva em relação a outros idiomas, na minha opinião. Eu raramente uso R, mas freqüentemente uso C ++ (com modelos) e Lisp (com macros). Julia pode fazer as duas coisas de maneira limpa e eficiente em um idioma único e claro. Estou convencido de que Julia será uma das principais línguas no futuro.
AsymLabs
15

Toda vez que vejo um novo idioma, pergunto-me por que um idioma existente não pode ser aprimorado.

As grandes vantagens do Python são

  • um rico conjunto de módulos (não apenas estatísticas, mas plotagem de bibliotecas, saída para pdf etc.)
  • construções de linguagem que você acaba necessitando a longo prazo (construções orientadas a objetos necessárias em um grande projeto; decoradores, fechamentos etc. que simplificam o desenvolvimento)
  • muitos tutoriais e uma grande comunidade de suporte
  • acesso ao mapreduce, se você tiver muitos dados para processar e não se importar em pagar alguns centavos para executá-los em um cluster.

Para ultrapassar R, Julia, etc., o Python poderia usar

  • desenvolvimento de compilação just-in-time para Python restrito para fornecer mais velocidade em uma única máquina (mas mapreduce ainda é melhor se você aguentar a latência)
  • uma biblioteca estatística mais rica
Neil G
fonte
3
Isso pode ser verdade, mas para um usuário muito casual, o design da linguagem do Python pode ser um pouco mais difícil de usar do que algo como Matlab, ou Julia, que possui uma sintaxe ainda mais matemática. Você pode dizer y = 3x+2em Julia e funciona!
Harlan
6
Isso é engraçado: quando vi Python pela primeira vez há mais de 10 anos, tive exatamente a mesma reação (por que isso é necessário? Por que não melhorar o que já existe? Por que aprender um novo conjunto de peculiaridades sintáticas bizarras, nomes de classes, métodos , procedimentos e todo o resto?). :-)
whuber
2
@ NeilG Não estatísticos profissionais, tanto quanto pesquisadores não programadores, especialmente nas ciências. O Python é ótimo para programadores, mas se tudo o que você quer fazer é carregar seus dados de psicologia e ajustar alguns modelos (rapidamente), uma sintaxe muito simples, semelhante a matemática, pode ser preferível ao elegante design baseado em objetos do Python.
Harlan
3
@ NeilG Lembre-se de que parte do sucesso do R é que ele não é usado apenas por estatísticos. É usado por pessoas que fazem estatísticas . E cientistas sociais, clínicos e estudantes do primeiro ano de ciências são usuários absolutamente casuais.
fomite
6
Acho que (membro da CrossValidated) John D Cook postou no blog: Prefiro programar matemática em uma linguagem de uso geral do que tentar codificar problemas de matemática e sistemas em uma linguagem matemática. Se a comunidade Julia puder ter isso em mente, há uma boa chance de o idioma permanecer na programação analítica em geral (as estatísticas são apenas uma parte disso). Veja johndcook.com/blog/2012/04/02/why-scipy
Josh Hemann
9

Julia não assumirá R muito em breve. Confira o Microsoft R aberto.

https://mran.revolutionanalytics.com/open/

Esta é uma versão aprimorada do R que usa automaticamente todos os núcleos do seu computador. É o mesmo R, o mesmo idioma, os mesmos pacotes. Quando você o instala, o RStudio também o usa no console. A velocidade do MRO é ainda mais rápida que a Julia. Faço muita computação pesada e utilizo Julia há mais de um ano. Mudei para o R recentemente porque o R tem um suporte melhor e o RStudio é um editor incrível. Julia ainda está em estágio inicial e, possivelmente, não está alcançando Python ou R muito em breve.

Milton Mai
fonte
8

Provavelmente o seguinte não merece ser uma resposta, mas é muito importante ser enterrado como um comentário à resposta de outra pessoa ...

Eu não ouvi muito falar sobre o consumo de memória, apenas velocidade. A semântica inteira de R ser passada por valor pode ser dolorosa, e essa foi uma crítica à linguagem (que é uma questão separada de quantos ótimos pacotes já existem). Um bom gerenciamento de memória é importante, assim como existem maneiras de lidar com o processamento fora do núcleo (por exemplo, matrizes ou tabelas de tabelas mapeadas pela memória do numpy ou o formato xdf da Revolution Analytics) Enquanto o compilador JIT do PyPy permite alguns benchmarks impressionantes do Python, o consumo de memória pode ser bastante alto. Então, alguém já tem experiência com Julia e uso de memória? Parece que há vazamentos de memória na versão "alpha" do Windows que, sem dúvida, serão abordadas, e ainda estou esperando o acesso a uma caixa do Linux para jogar com o idioma.

Josh Hemann
fonte
É verdade, mas existem maneiras de usar a passagem por referência em R (classes de referência, por exemplo).
Ari B. Friedman
1
E R não é realmente uma passagem estrita por valor. Uma avaliação preguiçosa e uma otimização inteligente significam que frequentemente os dados não são copiados, a menos que tenham que ser.
Ari B. Friedman
8

Eu acho improvável que Julia substitua R, por muitas das razões mencionadas anteriormente. Julia é uma substituição do Matlab, não uma substituição R; eles têm objetivos diferentes. Mesmo depois de Julia ter uma biblioteca de estatísticas completa, ninguém jamais ensinaria uma aula de Introdução à Estatística nela.

No entanto, uma área em que isso pode ser incrível é como uma linguagem de programação com velocidade otimizada que é menos dolorosa que o C / C ++. Se estivesse perfeitamente vinculado ao R (no estilo do Rcpp), seria bastante utilizado na escrita de segmentos críticos de velocidade. Infelizmente, esse link não existe atualmente:

https://stackoverflow.com/questions/9965747/linking-r-and-julia

Ari B. Friedman
fonte
Mas agora há um: comments.gmane.org/gmane.comp.lang.julia.devel/15153 ainda não experimentou.
Kjetil b Halvorsen
8

Eu sou uma novata Julia e sou R competente. As razões pelas quais acho interessante Julia até agora são orientadas para desempenho e compatibilidade.

Ferramentas de GPU. Eu gostaria de usar o CUSPARSE para um aplicativo estatístico. Os resultados do CRAN indicam que não há muito por aí. Julia tem ligações disponíveis que parecem funcionar sem problemas até agora.

using CUSPARSE
N = 1000
M = 1000
hA = sprand(N, M, .01)
hA = hA' * hA
dA = CudaSparseMatrixCSR(hA)
dC = CUSPARSE.csric02(dA, 'O') #incomplete Cholesky decomp
hC = CUSPARSE.to_host(dC)

Ferramentas HPC. Pode-se usar um cluster interativamente com vários nós de computação.

nnodes = 2
ncores = 12    #ask for all cores on the nodes we control
procs = addprocs(SlurmManager(nnodes*ncores), partition="tesla", nodes=nnodes)
for worker in procs
    println(remotecall_fetch(readall, worker, `hostname`))
end

Compatibilidade com Python. Há acesso ao ecossistema python. Por exemplo, foi fácil descobrir como ler dados de imagens cerebrais:

import PyCall
@pyimport nibabel

fp = "foo_BOLD.nii.gz"
res = nibabel.load(fp)
data = res[:get_data]();

Compatibilidade C. A seguir, gera um número inteiro aleatório usando a biblioteca padrão C.

ccall( (:rand, "libc"), Int32, ())

Rapidez. Pensei em ver como o pacote Distributions.jl se comportava no rnorm de R - que, presumo, é otimizado.

julia> F = Normal(3,1)
Distributions.Normal(μ=3.0, σ=1.0)

julia> @elapsed rand(F, 1000000)
0.03422067

Em R:

> system.time(rnorm(1000000, mean=3, sd=1))
   user  system elapsed 
  0.262   0.003   0.266 
conjecturas
fonte
1
@ NickCox, como já existem mais de uma dúzia de respostas, achei interessante destacar um ângulo alternativo. Além disso, publiquei um rascunho acidentalmente :)
conjectures
1
A pergunta era por que Julia poderia permanecer na comunidade estatística, minha resposta se concentra no aparentemente bom suporte para hpc + gpu, que muitas pessoas com trabalho intensivo em computação podem achar interessantes.
conjectures
7

O Julia 1.0 acabou de sair com um IDE muito útil (Juno). Chegou um pouco tarde para a festa, já que o Python já dominou o Machine Learning, enquanto o R continua dominando todos os outros tipos de análise estatística. Dito isto, Julia já está ganhando destaque na área de algoritmos de finanças e negociação, pois o rápido tempo de desenvolvimento e a execução são obrigatórios. Na minha opinião, a menos que outro idioma seja claramente melhor, a ascensão de Julia à proeminência provavelmente será algo como isto:

(1) Começa a comer o almoço do MATLAB. Os usuários do MATLAB gostam da sintaxe do MATLAB, mas odeiam praticamente todo o resto. A lentidão, as licenças caras, as maneiras muito limitadas de lidar com estruturas de dados complexas que não são matrizes. Lembro-me de uma citação em que se diz que "Se Julia substituir o MATLAB, será um grande serviço para a humanidade". Os usuários do MATLAB podem se tornar proficientes em Julia muito rapidamente e ficarão impressionados com a facilidade de escrever código de qualidade que faz muito mais do que o MATLAB pode fazer (estruturas rápidas que você pode colocar em matrizes e iterar rapidamente?). Além disso, os pesquisadores podem criar caixas de ferramentas sérias em Julia (uma pequena equipe de estudantes de doutorado escreveu um pacote de equações diferenciais de classe mundial) que seria impossível com o MATLAB.

(2) Começa a retomar a pesquisa em métodos numéricos e simulação. O MIT está jogando seu peso atrás de Julia, e a comunidade de pesquisa ouve o MIT. Simulações numéricas e novos métodos numéricos são problemas mal definidos que não possuem bibliotecas. É aqui que Julia como língua brilha; se não houver bibliotecas disponíveis, é muito mais fácil escrever código de qualidade rápida em Julia do que em qualquer outro idioma. Será uma linguagem numérica / de simulação escrita por matemáticos para matemáticos (som semelhante ao R ainda?)

(3) Outra inovação no Machine Learning acontece que dá a Julia a vantagem. Esse é um curinga que pode não acontecer. O TensorFlow é ótimo, mas é extremamente difícil de hackear. O Python já começou a mostrar rachaduras e o TensorFlow começou a adotar o Swift (com Julia recebendo uma menção honrosa). Se ocorrer outra inovação no aprendizado de máquina, será muito mais fácil implementar e invadir um pacote Julia como o Flux.jl.

(4) Julia começa a alcançar lentamente R, o que levará um tempo. Fazer estatísticas no MATLAB é doloroso, mas o Juila já está muito à frente do MATLAB com o Distributions.jl. O fato é que os fluxos de trabalho do R podem ser facilmente traduzidos para Julia. A única vantagem real que R tem é o fato de que existem tantos pacotes escritos por estatísticos para estatísticos. Esse processo, no entanto, também é fácil de ser feito em Julia. A diferença é que Julia é rápida e você não precisa usar outro idioma para obter desempenho (os pacotes R mais "sérios" são escritos em idiomas como C). O problema com o R é que os pacotes escritos em R são muito lentos para lidar com grandes conjuntos de dados. A única alternativa é traduzir os pacotes para outro idioma, tornando o desenvolvimento no R um processo mais lento que o Julia.

Dedução
fonte
2
A citação sobre a substituição do Matlab que você se lembra é deste tópico . :)
Dougal
5

Estou interessado na promessa de melhor velocidade e fácil paralelização usando diferentes arquiteturas. Por esse motivo, certamente assistirei ao desenvolvimento de Julia, mas é improvável que o use até que ele possa lidar com modelos mistos lineares generalizados, que possua um bom pacote de bootstrap genérico, uma linguagem de modelo simples para criar matrizes de design com a capacidade equivalente a ggplot2 e uma ampla variedade dos algoritmos de aprendizado de máquina.

Nenhum estatístico pode se dar ao luxo de ter uma atitude fundamentalista em relação à escolha de ferramentas. Usaremos o que nos permite fazer o trabalho com mais eficiência. Meu palpite é que continuarei com o R por alguns anos ainda, mas seria bom ser agradavelmente surpreendido.

Mervyn thomas
fonte
Olá Mervyn, e bem-vindo ao Stats.SE! Julia fez algumas melhorias substanciais no tempo desde que criei este post (quase um ano atrás!). Douglas Bates portou parte de seu código GLM (talvez GLMM?) Para Julia dmbates.blogspot.com/2012/04/r-programmer-looks-at-julia.html ), e a página principal do Github viu muitas atualizações no passado ano. Minha opinião sobre Julia até agora (usei e desativei desde o ano passado) tem sido uma boa ferramenta de velocidade, que uso em alguns MCMC rudes, mas ainda não substituiu R em minha cadeia de ferramentas. Mal posso esperar para que o R fique mais rápido ou a Julia seja mais difundida!
Christopher Aden
Doug ainda não portou GLMMs. Se alguém quiser ajudar com isso eu tenho certeza que ele ficaria feliz ...
Ben Bolker
4

O luxo de NA em R não vem sem penalidades de desempenho. Se Julia suporta NAs com uma penalidade de desempenho menor, torna-se interessante para um segmento da comunidade de estatísticas, mas as NAs também impõem um trabalho extra considerável ao usar código compilado com R.

Muitos dos pacotes no R dependem de rotinas escritas em linguagens herdadas (C, Fortran ou C ++). Em alguns casos, as rotinas compiladas foram desenvolvidas fora do R e posteriormente usadas como base para os pacotes da biblioteca do R. Em outros, as rotinas foram implementadas primeiro no R e, em seguida, segmentos críticos foram traduzidos para um idioma compilado quando o desempenho foi encontrado. Julia será atraente se puder ser usada para implementar rotinas equivalentes. Há uma oportunidade de projetar suporte de baixo nível para NAs de uma maneira que simplifique o manuseio de NA sobre o que temos agora ao usar R com código compilado.

O grande número de bibliotecas R representa os esforços de muitos usuários. Isso foi possível porque o R forneceu recursos que não estavam disponíveis / acessíveis. Para que a Julia seja amplamente usada, ela precisa de um grupo de usuários que ache o que precisam muito melhor do que as alternativas que valem o esforço necessário para fornecer coisas muito básicas (por exemplo, gráficos, classes de datas, NA etc.) ) disponível em idiomas existentes.

George N. White III
fonte
4

Estarei na frente, não tenho experiência com R, mas trabalho com muitas pessoas que acham que é uma excelente ferramenta para análise estatística. Minha formação é em data warehousing e, devido ao modelo de programação facilmente distribuído, mas mais padrão, de Julia, acho que poderia ser um substituto muito interessante para a parte de transformação das ferramentas ETL tradicionais que geralmente fazem o trabalho muito mal, a maioria não tem como criando facilmente uma transformação padronizada ou reutilizando os resultados de uma transformação já executada em um conjunto de dados anterior. Destaca-se o suporte para tuplas rigidamente definidas e digitadas, se eu quiser criar um cubo OLAP que basicamente precise criar tuplas mais detalhadas (tabelas de fatos) com base nas tuplas já calculadas, as ferramentas ETL atuais não têm 'blocos de construção' para falar disso pode ajudar, essa indústria já trabalhou com esse problema por vários meios no passado, mas existem compensações. As linguagens de programação tradicionais podem ajudar fornecendo transformações definidas centralmente, e Julia pode potencialmente simplificar as agregações e distribuições não padrão comuns em sistemas de data warehouse mais complexos.

Preston
fonte
3

Você também pode usar Julia e R. juntos. Há interface de Julia-to-R . Com esses pacotes, você pode brincar com Julia enquanto chama o R sempre que houver uma biblioteca necessária.

vasili111
fonte
2

Julia tem sem dúvida todas as chances de se tornar uma estatística que os usuários avançados sonham se tornar realidade, como o SAS, por exemplo, seu poder está nos inúmeros procs escritos em C - o que Julia pode fazer é fornecer os procs com o código-fonte, com matrizes como um tipo de dados incorporado que dispensa SAS / iml. Não tenho dúvidas de que os estatísticos vão se reunir com Julia quando souberem exatamente o que esse filhote pode fazer.

Jimbo He
fonte
1
Bem-vindo ao Stats.SE, Jimbo. Eu discordo de sua afirmação. Acho que vimos o que Julia é capaz de fazer, mas o problema neste momento é que não há tantos pacotes específicos de domínio para ele como existem na R. R continuará reinando supremo nas estatísticas de código aberto desde que os pesquisadores tenham mais benefícios em usar os inúmeros pacotes no universo R. Essa é a minha opinião, pelo menos.
Christopher Aden
2

Ah, sim, Julia ultrapassará R rapidamente. E os principais motivos serão "macros", 95% da linguagem é implementada em Julia e sua sintaxe parcimoniosa e sem ruído. Se você não possui experiência com linguagens do tipo lisp, talvez ainda não a entenda, mas verá rapidamente como a interface da fórmula R se tornará um mecanismo obsoleto e feio, e será substituída por micro linguagens de modelagem especializadas semelhantes ao CL macro de loop. O acesso a referências de baixo nível de um objeto também é uma grande vantagem. Eu acho que R ainda não entendeu que esconder internos do usuário realmente complica do que simplifica as coisas.

Como eu vejo agora (tendo anos de uso pesado de R atrasados ​​e acabado de ler o manual de Julia), as principais desvantagens de Julia em relação a R não são suporte à herança estrutural (isso foi intencional). O sistema de tipos de Julia é menos ambicioso que o S4; Ele também suporta múltiplos despachos e múltiplas heranças, mas com uma pegada - há apenas um nível de classes concretas. Por outro lado, raramente vejo hierarquias de classe em R mais profundas que 3 níveis.

O tempo dirá, mas será mais cedo do que a maioria dos usuários de R pensa :)

VitoshKa
fonte
2
Você defende bem as macros: décadas depois, as pessoas ainda subestimam o quão poderoso o Lisp realmente é. No entanto, como você sugere no ponto 1, esse idioma é essencialmente uma substituição do Matlab, não uma substituição R. Eu acho que você também ignora o fato de que é a linguagem mais as bibliotecas (pacotes) que as pessoas usam e Julia nem sequer tem 1% do que precisa lá.
Wayne
2
@Wayne, eu não ignoro nada, o OP era sobre o futuro e não sobre o que é agora. Em 5 anos, poderemos ver muito mais bibliotecas de estatísticas em Julia do que as atuais para R. E isso, apenas porque Julia tem uma boa chance de ser uma linguagem muito melhor.
Vitoshka
Se julia realmente se tornar um substituto do MATLAB, haverá enormes benefícios em usar a mesma linguagem para engenharia e estatística! As áreas sobrepostas (como séries temporais) são enormes.
Kjetil b Halvorsen
1

Os primeiros casos de uso de destino de Julia são problemas numéricos. Basicamente, você pode dividir esses campos de análise e ciência da computação em ciência de dados (orientada a dados) e ciência de simulação (orientada a modelo). Julia lida primeiro com os casos de uso da ciência da simulação. Eles também estão lidando com os casos de ciência de dados, mas mais lentamente. R nunca será muito útil para a ciência da simulação, mas Julia será muito útil para ambos em alguns anos.

Jamie Lawson
fonte
0

Ele precisa aplicar qualquer função a grandes conjuntos de dados que não cabem na memória de forma transparente para o usuário.
Isso inclui pelo menos a execução de modelos de efeitos mistos, modelos de sobrevivência ou MCMC em conjuntos de dados que cabem no disco, mas não na memória. E, se possível, em conjuntos de dados distribuídos em vários computadores.

skan
fonte