2017-11-16 18 views
0

私は、このデータを持っている:R行列の合計浮動小数点合計マージンエラー

SEX LS GPA 
1 M DO 2.56 
2 M DO 2.70 
3 M DO 3.04 
4 M DO 1.42 
5 M FS 3.02 
6 M FS 2.67 
7 M FS 2.35 
8 M FS 1.80 
9 M CO 3.41 
10 M CO 2.97 
11 M CO 2.23 
12 M CO 2.31 
13 M AP 2.28 
14 M AP 3.73 
15 M AP 2.05 
16 M AP 2.61 
17 M HO 2.57 
18 M HO 2.81 
19 M HO 3.01 
20 M HO 3.40 
21 F DO 3.33 
22 F DO 1.80 
23 F DO 2.50 
24 F DO 3.04 
25 F FS 3.87 
26 F FS 3.00 
27 F FS 3.25 
28 F FS 2.76 
29 F CO 3.14 
30 F CO 4.00 
31 F CO 2.66 
32 F CO 2.91 
33 F AP 3.69 
34 F AP 2.55 
35 F AP 3.21 
36 F AP 2.86 
37 F HO 3.09 
38 F HO 1.99 
39 F HO 3.46 
40 F HO 3.61 

は、私がデータにANOVAを実行している、と私は次のことをやっているのパラメータを見つけるために:

を計算意味:

mu_grand <- mean(data$GPA) 
mu_alpha <- aggregate(data$GPA,list(data$SEX),mean)$x 
mu_beta <- aggregate(data$GPA,list(data$LS),mean)$x 
mu_alpha_beta <- matrix(aggregate(data$GPA,list(data$SEX,data$LS),mean)$x,nrow=2) 

は、付加的な効果

alpha <- mu_alpha - mu_grand 
beta <- mu_beta - mu_grand 
を計算私は、これは浮動小数点精度内間違いですが、私は

sum(alpha_beta) 
[1] -4.440892e-16 

取得alpha_betaの合計を検索したい場合は

ab1 0.0105 0.02925 -0.07575 0.1855 -0.1495 
ab2 -0.0105 -0.02925 0.07575 -0.1855 0.1495 

ここ
a1 <- rep(alpha[1],length(beta)) 
a2 <- rep(alpha[2],length(beta)) 

ab1 <- a1 + beta 
ab2 <- a2 + beta 

ab <- rbind(ab1,ab2) 

alpha_beta <- mu_alpha_beta - (mu_grand + ab) 

がalpha_betaでインタラクティブな効果を計算します私はあなたがすべての数字を手動で加算して0を得たときに何らかのエラーがなぜ発生するのだろうと思っていますか?ありがとう!

答えて

0

非常に小さい数字を見てください。 Rは約15桁までしか計算されないので、これは単なる丸め誤差です。パッケージgmpを使用すると、物理法則が壊れていないことがわかります。データ

data<- read.table(text="SEX LS GPA 
1 M DO 2.56 
        2 M DO 2.70 
        3 M DO 3.04 
        4 M DO 1.42 
        5 M FS 3.02 
        6 M FS 2.67 
        7 M FS 2.35 
        8 M FS 1.80 
        9 M CO 3.41 
        10 M CO 2.97 
        11 M CO 2.23 
        12 M CO 2.31 
        13 M AP 2.28 
        14 M AP 3.73 
        15 M AP 2.05 
        16 M AP 2.61 
        17 M HO 2.57 
        18 M HO 2.81 
        19 M HO 3.01 
        20 M HO 3.40 
        21 F DO 3.33 
        22 F DO 1.80 
        23 F DO 2.50 
        24 F DO 3.04 
        25 F FS 3.87 
        26 F FS 3.00 
        27 F FS 3.25 
        28 F FS 2.76 
        29 F CO 3.14 
        30 F CO 4.00 
        31 F CO 2.66 
        32 F CO 2.91 
        33 F AP 3.69 
        34 F AP 2.55 
        35 F AP 3.21 
        36 F AP 2.86 
        37 F HO 3.09 
        38 F HO 1.99 
        39 F HO 3.46 
        40 F HO 3.61", header=T,row.names=1) 

コード

data$GPA<-as.bigq(data$GPA) #Converts to class `bigq` 

#Special function because sapply was converting data to raw format 
meanL<-function(L){ 
    x<-rep(0,length(L)) 
    x<-as.bigq(x) 

    for(i in 1:length(L)){ 
    x[i]<-mean(L[[i]]) 
    } 
    return(x) 
} 

#This section is changed to handle the new class `bigq` 
mu_grand <- mean(data$GPA) 
mu_alpha <- meanL(split(data$GPA,data$SEX)) 
mu_beta <- meanL(split(data$GPA,data$LS)) 
mu_alpha_beta <- matrix(meanL(split(data$GPA,as.factor(paste(data$SEX,data$LS,sep="-")))),nrow=2) 



alpha <- mu_alpha - mu_grand 
beta <- mu_beta - mu_grand 

a1 <- rep(alpha[1],length(beta)) 
a2 <- rep(alpha[2],length(beta)) 

ab1 <- a1 + beta 
ab2 <- a2 + beta 

ab<-matrix(c(ab1,ab2),ncol=5,byrow=T) #The same as rbind but needed to work with objects of class 'bigq'. 
alpha_beta <- mu_alpha_beta - (mu_grand + ab) 
sum(alpha_beta) 

Big Rational ('bigq') : 
[1] 0 

ロードに必要なパッケージ

require("gmp") #Required package 

読むこれは素敵トンでありますあなたはaggregatesapplyのような機能を見ることができるので、それをうまくいっていないので、gmpを動作させるには** sの痛みがあります。あなたが信じられないくらい小さな数、すなわち1e-16を見て、あなたが0であると思っていると話すと、彼らはそれらが0であると見なすことができます。

関連する問題