【问题标题】:Using R for variable/dimension reduction on large data set使用 R 对大型数据集进行变量/降维
【发布时间】:2011-10-05 03:48:39
【问题描述】:

我在 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 几乎没有能力对数据进行分类,所以我想知道这个事实。

我研究过使用多元线性回归,但是我不想单独输入和操作每个变量/维度,因为在我的正确数据中它会遇到成千上万个案例。

任何关于最佳方法的帮助将不胜感激。

顺便说一句,我不是统计学家,我是软件开发人员,如果术语不正确,请见谅。

【问题讨论】:

    标签: r variables regression dimension reduction


    【解决方案1】:

    您提出了一个相当广泛的问题,但我会尽量做到准确。但请注意:每种统计分析方法都有一系列隐含的假设。这意味着,如果您在不了解分析局限性的情况下依赖统计模型的结果,您很容易得出错误的结论。

    我也不太清楚你所说的分类是什么意思。如果有人让我做分类分析,我可能会考虑聚类分析、因子分析或潜在类别分析。有一些线性回归模型的变体也可以适用。

    也就是说,您应该如何使用您的数据进行线性回归。

    首先,复制您的样本数据:

    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 
    

    最后一句要小心。由于您的样本数据包含的行数少于列数,因此线性回归模型没有足够的数据来运行。所以在这种情况下,它只是丢弃了最后两列。您对数据的简短描述似乎表明您有更多的行和列,所以这对您来说应该不是问题。

    【讨论】:

    • 感谢您的详尽回答。我自己试过了,它看起来很符合我的需要。我的差距是不知道如何在数据帧上使用 lm。我所说的“分类”是指变量在预测期望值方面很差。
    【解决方案2】:

    有很多不同的方法需要考虑。一个基本的起点是进行主成分回归(http://rss.acs.unt.edu/Rdoc/library/pls/html/svdpc.fit.html 就是一个例子)。 很多悬而未决的问题——你期望什么分布,这些变量是否总是布尔值,或者它们是否代表人口统计切片的年龄或枚举值。

    https://stats.stackexchange.com/ 有很多这类问题的专家。

    【讨论】:

    • 谢谢,我一定要试试。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-30
    • 2023-03-05
    • 2012-10-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多