2

私はRで書かれた線形回帰コードを持っており、Javaでも同じことをしなければなりません。これには、 ApacheCommons数学ライブラリを使用しました。RコードとJavaコードで同じデータを使用しましたが、切片の値が異なります。コードで何をしたのか理解できませんでした。

Rコード:

test_trait <- c( -0.48812477 , 0.33458213, -0.52754476, -0.79863471, -0.68544309, -0.12970239,  0.02355622, -0.31890850,0.34725819 , 0.08108851)

geno_A <- as.factor(c("Sub_0001"=1, "Sub_0002"=0, "Sub_0003"=1, "Sub_0004"=2, "Sub_0005"=0, "Sub_0006"=0, "Sub_0007"=1, "Sub_0008"=0, "Sub_0009"=1, "Sub_0010"=0))

geno_B <- as.factor(c("Sub_0001"=0, "Sub_0002"=0, "Sub_0003"=0, "Sub_0004"=1, "Sub_0005"=1, "Sub_0006"=0, "Sub_0007"=0, "Sub_0008"=0, "Sub_0009"=0, "Sub_0010"=0) )

fit <- lm(test_trait ~ geno_A*geno_B)
fit

R出力

Call:
lm(formula = test_trait ~ geno_A * geno_B)

Coefficients:
    (Intercept)          geno_A1          geno_A2          geno_B1  
      -0.008235        -0.152979        -0.113192        -0.677208  
geno_A1:geno_B1  geno_A2:geno_B1  
             NA               NA 

Javaコード:

package linearregression;
import org.apache.commons.math3.stat.regression.SimpleRegression;
public class LinearRegression {
    public static void main(String[] args) {

        double[][] x = {{1,0},
                        {0,0},
                        {1,0},
                        {2,1},
                        {0,1},
                        {0,0},
                        {1,0},
                        {0,0},
                        {1,0},
                        {0,0}
        };

        double[]y = { -0.48812477,
                       0.33458213,
                      -0.52754476,
                      -0.79863471,
                      -0.68544309,
                      -0.12970239,
                       0.02355622,
                      -0.31890850,
                       0.34725819,
                       0.08108851
        };
        SimpleRegression regression = new SimpleRegression(true);
        regression.addObservations(x,y);

        System.out.println("Intercept: \t\t"+regression.getIntercept());

    }
}

Java出力:

Intercept:      -0.08732359363636362

よろしくお願いします。ありがとう !

4

1 に答える 1

3

Java は単純な回帰を行っており、最初の変数のみを数値として解釈しています。

> test_trait <- c( -0.48812477 , 0.33458213, -0.52754476, -0.79863471, -0.68544309, -0.12970239,  0.02355622, -0.31890850,0.34725819 , 0.08108851)
> geno_A <- c("Sub_0001"=1, "Sub_0002"=0, "Sub_0003"=1, "Sub_0004"=2, "Sub_0005"=0, "Sub_0006"=0, "Sub_0007"=1, "Sub_0008"=0, "Sub_0009"=1, "Sub_0010"=0)
> fit <- lm(test_trait ~ geno_A)
> fit$coef[1]
(Intercept) 
-0.08732359 
于 2013-01-29T13:30:57.427 に答える