我在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几乎没有能力对数据进行分类,因此我希望被告知这一事实。
我查看了使用多元线性回归,但是我不想单独输入和操作每个变量/维度,因为在我的数据中它运行成千上万,有数万个案例。
非常感谢任何有关最佳方法的帮助。
顺便说一下,我不是统计学家,我是软件开发人员,如果术语不正确,请原谅。
答案 0 :(得分:5)
你提出了一个相当广泛的问题,但我会尽力而为。但需要注意的是:每种统计分析方法都有一系列隐含的假设。这意味着如果您在不了解分析限制的情况下依赖统计模型的结果,您很容易得出错误的结论。
我也不太清楚你的分类是什么意思。如果有人让我做分类分析,我可能会考虑像聚类分析,因子分析或潜在类分析这样的事情。有一些线性回归建模的变体也可以适用。
也就是说,您应该如何使用数据进行线性回归。
首先,复制样本数据:
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
最后一句谨慎。由于样本数据包含的行少于列,因此线性回归模型的数据不足以运行。所以在这种情况下,它只是丢弃了最后两列。您对数据的简要描述似乎表明您有更多的行和列,因此对您来说不应该是一个问题。
答案 1 :(得分:2)
有许多不同的方法需要考虑。一个基本的出发点是进行主成分回归(http://rss.acs.unt.edu/Rdoc/library/pls/html/svdpc.fit.html就是一个例子)。 很多未解决的问题 - 您期望的分布,这些变量是否始终是布尔值,或者它们是否代表人口统计切片的年龄或枚举值。
https://stats.stackexchange.com/有很多专家来处理这类问题。