在R中居中变量

时间:2015-06-25 13:51:49

标签: r anova

在回归方程中使用时,中心变量是否必须保持矩阵形式?

我使用scale函数与center=Tscale=F集中了一些变量。然后我将这些变量转换为数字变量,以便我可以为其他目的操纵数据框。但是,当我运行ANOVA时,我得到的F值略有不同,只是对于那个变量,所有其他都是相同的。

编辑:

这两者之间的区别是什么:

scale(df$A, center=TRUE, scale=FALSE)  

将在您的data.frame

中嵌入一个矩阵

scale(df$A, center=TRUE, scale=FALSE)
df$A = as.numeric(df$A)

哪个变量是数字,并删除变量中的矩阵表示法?

我正在尝试做的示例,但该示例并未导致我遇到的问题:

library(car)
library(MASS)
mtcars$wt_c <- scale(mtcars$wt, center=TRUE, scale=FALSE)
mtcars$gear <- as.factor(mtcars$gear)
mtcars1     <- as.data.frame(mtcars)
# Part 1
rlm.mpg   <- rlm(mpg~wt_c+gear+wt_c*gear, data=mtcars1)
anova.mpg <- Anova(rlm.mpg, type="III")
# Part 2
# Make wt_c Numeric
mtcars1$wt_c <- as.numeric(mtcars1$wt_c)
rlm.mpg2     <- rlm(mpg~wt_c+gear+wt_c*gear, mtcars1)
anova.mpg2   <- Anova(rlm.mpg2, type="III")

1 个答案:

答案 0 :(得分:0)

我会尝试回答你的两个问题

  1.   

    在回归方程中使用时,中心变量是否必须保持矩阵形式?

  2. 我不确定你的意思,但你可以剥离你从scale()获得的中心和比例属性,如果这是你所指的。您可以在下面的示例中看到,无论是否采用“矩阵形式”,您都会获得相同的答案。

    1.   

      这两者之间的区别是什么:

    2. scale(A, center=TRUE, scale=FALSE)  
      
           

      将在您的data.frame

      中嵌入一个矩阵      

       scale(df$A, center=TRUE, scale=FALSE)
       df$A = as.numeric(df$A)
      

      scale()的帮助文件中我们看到它返回

        

      “对于scale.default,居中的缩放矩阵。”

      您正在返回一个包含缩放和居中属性的矩阵。 as.numeric(AA)剥离了这些属性,这是第一种和第二种方法之间的差异。 c(AA)做同样的事情。我猜as.numeric()要么调用c()(通过as.double()),要么使用与它相同的方法。

       set.seed(1234)
      
       test <- data.frame(matrix(runif(10*5),10,5))
      
       head(test)
               X1        X2         X3        X4        X5
      1 0.1137034 0.6935913 0.31661245 0.4560915 0.5533336
      2 0.6222994 0.5449748 0.30269337 0.2651867 0.6464061
      3 0.6092747 0.2827336 0.15904600 0.3046722 0.3118243
      4 0.6233794 0.9234335 0.03999592 0.5073069 0.6218192
      5 0.8609154 0.2923158 0.21879954 0.1810962 0.3297702
      6 0.6403106 0.8372956 0.81059855 0.7596706 0.5019975
      
       # center and scale
       testVar <- scale(test[,1])
      
       testVar
                   [,1]
       [1,] -1.36612292
       [2,]  0.48410899
       [3,]  0.43672627
       [4,]  0.48803808
       [5,]  1.35217501
       [6,]  0.54963231
       [7,] -1.74522210
       [8,] -0.93376661
       [9,]  0.64339300
      [10,]  0.09103797
      attr(,"scaled:center")
      [1] 0.4892264
      attr(,"scaled:scale")
      [1] 0.2748823
      
       # put testvar back with its friends
       bindVar <- cbind(testVar,test[,2:5])
      
       # run a regression with 'matrix form' y var
       testLm1 <- lm(testVar~.,data=bindVar)
      
       # strip non-name attributes
       testVar <- as.numeric(testVar)
      
       # rebind and regress
       bindVar <- cbind(testVar,test[,2:5])
      
       testLm2 <- lm(testVar~.,data=bindVar)
      
       # check for equality
       all.equal(testLm1, testLm2)
      [1] TRUE
      

      lm()似乎返回相同的东西,因此看起来它们都是相同的。