Использование R для уменьшения переменной / размера в большом наборе данных - PullRequest
4 голосов
/ 14 июля 2011

У меня есть некоторые данные в R с различными переменными для моих случаев:

          B T H G S Z
Golf      1 1 1 0 1 0
Football  0 0 0 1 1 0
Hockey    1 0 0 1 0 0
Golf2     1 1 1 1 1 0
Snooker   1 0 1 0 1 1

У меня также есть вектор ожидаемого результата для каждого случая:

1, 2, 3, 1, 4

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

Я рассмотрел использование множественной линейной регрессии, однако я не хочу отдельно вводить и манипулировать каждымпеременная / размерность, как в моих собственных данных, она исчисляется тысячами с десятками тысяч случаев.

Любая помощь по наилучшему подходу будет принята с благодарностью.

Кстати, я нестатистика, я разработчик программного обеспечения, поэтому извините, если терминология неверна.

Ответы [ 2 ]

5 голосов
/ 14 июля 2011

Вы задали довольно широкий вопрос, но я постараюсь быть максимально точным.Но предостережение: каждый метод статистического анализа имеет ряд предположений, которые являются неявными.Это означает, что если вы полагаетесь на результаты статистической модели, не понимая ограничений анализа, вы легко можете сделать неправильный вывод.

Мне также не совсем понятно, что вы подразумеваете под классификацией.Если бы кто-нибудь попросил меня провести классификационный анализ, я бы, вероятно, рассмотрел такие вещи, как кластерный анализ, факторный анализ или скрытый анализ классов.Есть несколько вариантов моделирования линейной регрессии, которые также могут быть применимы.

Тем не менее, вот как вы должны делать линейную регрессию с использованием ваших данных.

Во-первых, реплицируйте данные образца:

dat <- structure(list(B = c(1L, 0L, 1L, 1L, 1L), T = c(1L, 0L, 0L, 1L, 
            0L), H = c(1L, 0L, 0L, 1L, 1L), G = c(0L, 1L, 1L, 1L, 0L), S = c(1L, 
            1L, 0L, 1L, 1L), Z = c(0L, 0L, 0L, 0L, 1L)), .Names = c("B", 
        "T", "H", "G", "S", "Z"), class = "data.frame", row.names = c("Golf", 
        "Football", "Hockey", "Golf2", "Snooker"))
dat
         B T H G S Z
Golf     1 1 1 0 1 0
Football 0 0 0 1 1 0
Hockey   1 0 0 1 0 0
Golf2    1 1 1 1 1 0
Snooker  1 0 1 0 1 1

Затем добавьте ожидаемые значения:

dat$expected <- c(1,2,3,1,4)
dat
         B T H G S Z expected
Golf     1 1 1 0 1 0        1
Football 0 0 0 1 1 0        2
Hockey   1 0 0 1 0 0        3
Golf2    1 1 1 1 1 0        1
Snooker  1 0 1 0 1 1        4

и наконец, мы можем начать анализ.К счастью, lm имеет механизм ярлыков, который позволяет ему использовать все столбцы в вашем фрейме данных.Для этого используйте следующую формулу: expected~.:

fit <- lm(expected~., dat)
summary(fit)
Call:
lm(formula = expected ~ ., data = dat)

Residuals:
ALL 5 residuals are 0: no residual degrees of freedom!

Coefficients: (2 not defined because of singularities)
             Estimate Std. Error t value Pr(>|t|)
(Intercept)  2.00e+00         NA      NA       NA
B            1.00e+00         NA      NA       NA
T           -3.00e+00         NA      NA       NA
H            1.00e+00         NA      NA       NA
G           -4.71e-16         NA      NA       NA
S                  NA         NA      NA       NA
Z                  NA         NA      NA       NA

Residual standard error: NaN on 0 degrees of freedom
Multiple R-squared:     1,  Adjusted R-squared:   NaN 
F-statistic:   NaN on 4 and 0 DF,  p-value: NA 

И последнее слово предостережения.Так как данные образца содержали меньше строк, чем столбцов, в модели линейной регрессии недостаточно данных для функционирования.Так что в этом случае он просто отбрасывает последние два столбца.Ваше краткое описание ваших данных, кажется, указывает на то, что у вас гораздо больше строк и столбцов, поэтому это не должно быть проблемой для вас.

2 голосов
/ 14 июля 2011

Есть много разных подходов для рассмотрения.Одной из основных отправных точек будет регрессия основного компонента (один из примеров - http://rss.acs.unt.edu/Rdoc/library/pls/html/svdpc.fit.html).Множество открытых вопросов - какие распределения вы ожидаете, являются ли эти переменные всегда булевыми, или они представляют что-то вроде значений возраста или перечисления для демографических срезов.

https://stats.stackexchange.com/ имеет много экспертов для этих видоввопросов.

...