R中的居中变量

yzuktlbb  于 2023-04-09  发布在  其他
关注(0)|答案(1)|浏览(119)

在回归方程中使用居中变量时,是否必须保持矩阵形式?
我使用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)

使变量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")
bkhjykvo

bkhjykvo1#

我会尽量回答你的两个问题
1.在回归方程中使用居中变量时,是否必须保持矩阵形式?
我不知道你是什么意思,但是你可以去掉从scale()得到的center和scale属性,如果这是你所指的。你可以在下面的例子中看到,无论它是否是“矩阵形式”,你都会得到相同的答案。
1.这两个有什么区别:

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

它将在data.frame中嵌入矩阵

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

scale()的帮助文件中,我们看到它返回:
对于scale.default,表示居中的缩放矩阵。
你得到的是一个包含scaled和center属性的矩阵。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()似乎返回相同的内容,因此它们看起来是相同的。

相关问题