Как правильно использовать гофстат в R?

Я пытаюсь написать немного кода на R, который берет образцы данных из Excel и определяет наиболее подходящее распределение для данных, а затем параметры для указанного распределения. После небольшого поиска в Google я решил попробовать fitdistrplus для подгонки дистрибутивов и увидел, что gofstat - это функция, которую можно использовать для проверки соответствия. Я хотел сравнить статистику GOF, чтобы найти наиболее подходящее распределение в цикле.

Начальная часть моего кода буквально просто импортирует мои образцы данных из Excel (я создал 1000 значений, обычно распределенных в Excel, и сохранил их как один столбец в формате CSV), и пытаюсь подогнать их под распределение и график. результаты, достижения.

library(fitdistrplus)
testData = read.table("C:\\Users\\Havok\\Documents\\Skripsie\\Excel\\NormalTest1.csv", header=FALSE)
(func <- apply(testData, 2,  fitdist, "norm"))
gofstat(func)
for(i in 1:1000)
  plot(f[[i]])

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

gofstat (func) Ошибка в gofstat (func): аргумент f должен быть объектом 'fitdist' или списком объектов 'fitdist'. for (i in 1: 1000) + plot (f [[i]]) Ошибка в f [[i]]: индекс за пределами

Графики все еще появляются, несмотря на ошибку «индекс вне границ» (я думаю, это может быть из-за случайных отрицательных значений в импортированных данных), но я действительно хочу выяснить, что не так с моим использованием gofstat. Любые идеи?

P.S. Мой опыт работы с R ограничен одним модулем, который у нас был в университете, и он был довольно простым. Так что любые продвинутые приемы будут оценены по достоинству.


person Martin    schedule 18.03.2015    source источник


Ответы (2)


Я не думаю, что вам нужно использовать apply, это делает его скользящей функцией.

library(fitdistrplus)
set.seed(1234)
testData = rnorm(1000)
fit <- fitdist(testData, "norm")

plot(fit)
gofstat(fit)
person screig    schedule 18.03.2015

Мартин, вот несколько общих советов и примеры кода, которые могут вам помочь.

  1. Удобно просто использовать rnorm() для создания списка случайных чисел в R. Я использую set.seed для закрепления той же серии случайных чисел во время тестирования.

    testData <- rnorm(1000)
    head(testData) 3 see first few elements
    [1] -0.6264538  0.1836433 -0.8356286  1.5952808  0.3295078 -0.8204684
    
  2. Вы смотрели документацию к этому пакету? использовать ? за помощью

    ?fitdistrplus
    ?gofstat
    
  3. Вам нужно построить график по типам распределения, а не по данным.

So:

library(fitdistrplus)
# setting where random number sequence starts so you can reproduce results. 
set.seed(1)
testData <- rnorm(1000)
# list of distributions
#   see help  for full list e.g. "norm", "lnorm", "exp" and "pois",
#   "cauchy", "gamma", "logis", "nbinom" (parametrized by mu and size),
#   "geom", "beta", "unif", and "weibull"
dist <- c("norm", "unif")

# Loop through your list of distributions
for(i in length(dist)){
  x <- fitdist(testData, dist[i])
  gofstat(x)
  plot(x)
}

Добавить в список раздач в расст. Обратите внимание, что некоторые распределения предполагают, что все значения будут положительными (например, Пуассон - поскольку речь идет о счетчиках).

Вы используете RStudio? Стрелка назад на вкладке «Графики» позволит вам перемещаться между графиками.

M

person micstr    schedule 18.03.2015
comment
Большое спасибо за ваш ответ. Я действительно просмотрел документацию к пакету, но не мог понять свою проблему оттуда, поэтому эти ответы действительно помогают. И f должен был быть func - просто опечатка с моей стороны. Прости за это. - person Martin; 18.03.2015
comment
Я добавил код для циклического просмотра дистрибутивов, поскольку я думаю, что это то, что вы пытаетесь сделать. Спасибо. - person micstr; 18.03.2015
comment
Вы только что сэкономили мне ТАК много времени. Большое спасибо за это! - person Martin; 18.03.2015