2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу 1, 2  След.
 
 Помогите с R
Сообщение10.11.2013, 19:29 
Аватара пользователя


15/11/08
502
London, ON
Здраствуйте,
Вот мой код:
Код:
n=10
w=0.5
Yit=1
Yic=1
Yr=0

'создание переменных'
Z<-runif(n)
U<-runif(n)

'определение влияния плацебо:'

for (i in 1:n){
  if (U[i]>0.253)
    Yic[i]<-1
  else if (U[i]>(-0.253)&&U[i]<0.253)
    Yic[i]<-w
  else
    Yic[i]<-0
}

'влияние лекарства:'

for (i in 1:n){
  if (U[i]+Z[i]>0.321553)
    Yit[i]<-1
  else if (U[i]+Z[i]>-0.314919&&U[i]+Z[i]<0.321553)
    Yit[i]<-w
  else
    Yit[i]<-0
}

'рандомизация:'

  s<-sample(1:n,0.75*n,FALSE)
  X <-rep(0,n)
  X[s]<-1

  Y <-X*Yit+(1-X)*Yic

  for (j in 1:n){
    if (Y[j]==0)
      Yr[j]<-1
    else if (Y[j]==w)
      Yr[j]<-2
    else
      Yr[j]<-3
  }

dat<-data.frame(Yr=as.factor(Yr),X=X,Z=Z)
datM<-data.frame(Y=Y,X=X,Z=Z)
Bm<-mlogit(Y ~ X + Z, data = datM, choise="Y", shape="wide")


Но в конечном итоге, выпадает такое сообщение:

Код:
Error in `row.names<-.data.frame`(`*tmp*`, value = value) :
  invalid 'row.names' length


Я уже перечитал все возможные форумы, но на них объясняют решения проблем с уже готовой базой данных, и мне не понятно, что у меня не правильно. До этого пользовался всегда функцией multinom() из nnet package и все работало, но сейчас мне нужен аутпут именно из mlogit.

 Профиль  
                  
 
 Re: Помогите с R
Сообщение10.11.2013, 19:31 
Заслуженный участник
Аватара пользователя


18/01/13
12065
Казань
Пока только мельком взглянула и очень удивилась. Зачем столько циклов? Идеология R - векторные вычисления.

 Профиль  
                  
 
 Re: Помогите с R
Сообщение10.11.2013, 20:01 
Аватара пользователя


15/11/08
502
London, ON
А у меня по-другому не работает :-(

 Профиль  
                  
 
 Re: Помогите с R
Сообщение10.11.2013, 20:21 
Заслуженный участник
Аватара пользователя


18/01/13
12065
Казань
А как делали? Я переделала начало, вроде работает. Но функции mlogit у меня нет. Она из какого-то доп. пакета?

Код:
Код:
n=10
w=0.5
'создание переменных'
Z<-runif(n); U<-runif(n)
'начальные значения векторов'
Yic<-Yit<-rep(w,n)
Yr<-rep(2,n)

'определение влияния плацебо:'
Yic[U>0.253]<-1
Yic[U<(-0.253)]<-0

'влияние лекарства:'
Yit[U+Z>0.3215253]<-1
Yit[U+Z<(-0.321553)]<-0

'рандомизация:'
  s<-sample(1:n,0.75*n,FALSE)
  X <-rep(0,n)
  X[s]<-1

  Y <-X*Yit+(1-X)*Yic
  Yr[Y==0]<-1
  Yr[Y==1]<-3

dat<-data.frame(Yr=as.factor(Yr),X=X,Z=Z)
datM<-data.frame(Y=Y,X=X,Z=Z)
#Bm<-mlogit(Y ~ X + Z, data = datM, choise="Y", shape="wide")


-- 10.11.2013, 21:24 --

Не очень понятно, зачем загонять данные в таблицу, а потом обрабатывать.

 Профиль  
                  
 
 Re: Помогите с R
Сообщение10.11.2013, 20:38 
Аватара пользователя


15/11/08
502
London, ON
Я в R учился сам и не долго, в основном работал в Matlab и SAS, поэтому пробовал по разному и не верно. Спасибо, теперь буду знать как можно делать без циклов, а то полуторачасовые симуляции утомляют.
Да, mlogit это функция из пакета mlogit() для создания мультиномиальной логистической регрессии. До этого я пользовался multinom() - она не привередливая и её аутпут просто интерпретировать, но сейчас мне нужно высчитать оценку Хьюбера, а для этого нужен mlogit(). А он работать не хочет, постоянно какие-то ошибки выдает.

 Профиль  
                  
 
 Re: Помогите с R
Сообщение10.11.2013, 20:42 
Заслуженный участник
Аватара пользователя


18/01/13
12065
Казань
Какой пакет-то надо подключать? Я бы хоть справку почитала.

 Профиль  
                  
 
 Re: Помогите с R
Сообщение10.11.2013, 20:45 
Аватара пользователя


15/11/08
502
London, ON
Пакет mlogit: http://www.rdocumentation.org/packages/ ... ons/mlogit

 Профиль  
                  
 
 Re: Помогите с R
Сообщение10.11.2013, 20:46 
Заслуженный участник
Аватара пользователя


18/01/13
12065
Казань
Что касается задания исходных данных, думаю, все можно сделать гораздо компактнее, но пока в этом нет необходимости.

-- 10.11.2013, 22:01 --

Справку посмотрела, там вроде другие параметры. Не сказано,какие данные должны быть $data$ . А как подключить эту функцию? Я подключила пакет $mlogit$, но он тоже такой функции не знает. Может, надо еще какую-нибудь библиотеку открыть?

 Профиль  
                  
 
 Re: Помогите с R
Сообщение10.11.2013, 21:08 
Аватара пользователя


15/11/08
502
London, ON
Там вводят формулу, базу данных, choise - как я понял это зависимая переменная, shape="wide" поскольку каждая строчка это отдельный, независимый индивид. Скорее всего пакет MASS тоже нужен.

-- Вс ноя 10, 2013 20:10:15 --

Я не уверен насчёт пакетов, я работаю через R Studio, там дополнительные пакеты скачиваются и устанавливаюся автоматически.

 Профиль  
                  
 
 Re: Помогите с R
Сообщение10.11.2013, 21:13 
Заслуженный участник
Аватара пользователя


18/01/13
12065
Казань
Видимо, придется научиться тоже. Мне студенты его советовали :roll:

 Профиль  
                  
 
 Re: Помогите с R
Сообщение10.11.2013, 21:19 
Аватара пользователя


15/11/08
502
London, ON
Он удобнее. :-)

-- Вс ноя 10, 2013 20:28:25 --

Вот список пакетов, которые он использует: Formula, graphics, grDevices, MASS, maxLik, methods, statmod, utils.
Но я сам уже убил на это 6 часов и не смею просить вашей помощи. Эта функция очень сложная.

 Профиль  
                  
 
 Re: Помогите с R
Сообщение10.11.2013, 21:36 
Заслуженный участник
Аватара пользователя


18/01/13
12065
Казань
Ну. подключила я R Studio, никакой разницы. Вы какие-нибудь install.packages делали?

-- 10.11.2013, 22:37 --

Neytrall в сообщении #787269 писал(а):
Но я сам уже убил на это 6 часов и не смею просить вашей помощи. Эта функция очень сложная.

Ничего, мне самой полезно.

(Оффтоп)

Тем более я на второй половине экрана шоу "Повтори" смотрю :wink:

 Профиль  
                  
 
 Re: Помогите с R
Сообщение10.11.2013, 21:38 
Аватара пользователя


15/11/08
502
London, ON
Я установил только $mlogit$. Остальные скачались автоматом.

-- Вс ноя 10, 2013 20:48:48 --

Я попробовал запустить ещё раз вот так:
Код:
datM<-data.frame(Y=Y,X=X,Z=Z)
dat<-mlogit.data(data = datM,choice="Y",shape="wide")
Bm<-mlogit(Y ~ X + Z, data = dat)


И в итоге получил такое сообщение:

Код:
Error in solve.default(H, g[!fixed]) :
  Lapack routine dgesv: system is exactly singular: U[2,2] = 0

 Профиль  
                  
 
 Re: Помогите с R
Сообщение10.11.2013, 23:31 
Заслуженный участник
Аватара пользователя


18/01/13
12065
Казань
Уже что-то осмысленное. Может. просто решения нет? Жаль, что я плохо знаю эту часть статистики. Кстати, с какими данными должна работать команда, бинарными или действительными? Переменная $Z$ - не бинарная.

-- 11.11.2013, 00:32 --

Кстати. у меня команда так и не запустилась :-(

 Профиль  
                  
 
 Re: Помогите с R
Сообщение11.11.2013, 01:29 
Аватара пользователя


15/11/08
502
London, ON
$Z$ - не бинарная.
$X$ - бинарная $X\in\{0,1\}$
$Y$ - категориальная $Y \in\{0,w,1\}$.

Я попробовал
Код:
Bm<-mlogit(Y ~ 1|X + Z, data = dat)

И оно заработало, но не так как надо. Итогом должна быть матрица 2Х3, а мне выдаёт лишь один вектор. Она каким-то образом из мультиномиальной логистической регрессии делает обычную логистическую...

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 16 ]  На страницу 1, 2  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group