119 lines
2.6 KiB
Plaintext
119 lines
2.6 KiB
Plaintext
---
|
|
title: "hw2"
|
|
author: "Mark Pearl"
|
|
date: "7/10/2021"
|
|
output: html_document
|
|
---
|
|
|
|
```{r setup, include=FALSE}
|
|
knitr::opts_chunk$set(echo = TRUE)
|
|
library(R.matlab)
|
|
library(rmatio)
|
|
library(fda)
|
|
library(pracma)
|
|
library(gglasso)
|
|
library(rTensor)
|
|
library(grpreg)
|
|
```
|
|
|
|
```{r q3 data files}
|
|
#Read in and cleanse the data
|
|
nsc_train_x <- read.mat('./data/NSC.mat')$x[[1]]
|
|
nsc_train_y <- read.mat('./data/NSC.mat')$y
|
|
```
|
|
|
|
|
|
```{r 3a plot the training data each sensor}
|
|
#Read in and cleanse the data
|
|
sensor_names <- c("air aspirated per cylinder","engine rotational speed","total quantity of fuel injected","low presure EGR valve",
|
|
"inner torque","accelerator pedal position","aperture ratio of inlet valve","downstreem intercooler preasure","fuel in the 2nd pre-injection","vehicle velocity")
|
|
p = 10 #Number of parameters
|
|
m = 150
|
|
n = 203
|
|
par(mfrow=c(2,5))
|
|
X_train = array(0,dim=c(m,n,p))
|
|
for(i in 1:p)
|
|
{
|
|
X_train[,,i]=nsc_train_x[[i]]
|
|
matplot(t(nsc_train_x[[i]]), type = "l", xlab = sensor_names[i],ylab = "")
|
|
}
|
|
```
|
|
|
|
```{r 3b create b-spline basis for x and y}
|
|
Z_train = array(0,dim=c(m,10,p))
|
|
Y_train = array(0,dim=c(m,n))
|
|
|
|
x = seq(0,1,length=203)
|
|
splinebasis_B=create.bspline.basis(c(0,1),10)
|
|
base_B=eval.basis(as.vector(x),splinebasis_B)
|
|
|
|
for (i in 1:10){
|
|
Z_train[,,i] = X_train[,,i] %*% base_B
|
|
}
|
|
|
|
YB_train = nsc_train_y %*% base_B
|
|
Z_matrix = matrix(Z_train ,150,100)
|
|
|
|
Z_stack=matrix(kronecker(diag(10),Z_train),1500,1000)
|
|
Y2B_stack = as.vector(YB_train)
|
|
```
|
|
|
|
```{r 3d create b-spline basis for x and y}
|
|
group = rep(1:10,each=100)
|
|
|
|
glasso = cv.grpreg(Z_stack,Y2B_stack,group)
|
|
```
|
|
|
|
```{r 3d create b-spline basis for x and y}
|
|
glasso_lambda <- min(glasso$lambda)
|
|
which(glasso$fit$beta[,glasso$min]==0)
|
|
```
|
|
|
|
#From the results we can see that the 6th variable related to "accelerator pedal position" has been pushed to 0 in the group coefficients, and all other have some correlation with the target variable.
|
|
|
|
|
|
```{r 3d create b-spline basis for x and y}
|
|
p = 10 #Number of parameters
|
|
m = 50
|
|
n = 203
|
|
nsc_test_x <- read.mat('./data/NSC.test.mat')$x[[1]]
|
|
nsc_test_y <- read.mat('./data/NSC.test.mat')$y
|
|
X_test = array(0,dim=c(m,n,p))
|
|
|
|
for(i in 1:p)
|
|
{
|
|
X_test[,,i]=nsc_test_x[[i]]
|
|
}
|
|
|
|
Z_test = array(0,dim=c(m,10,p))
|
|
Y_test = array(0,dim=c(m,n))
|
|
|
|
for (i in 1:10){
|
|
Z_test[,,i] = X_test[,,i] %*% base_B
|
|
}
|
|
|
|
YB_test = nsc_test_y %*% base_B
|
|
Z_matrix = matrix(Z_test ,50,100)
|
|
|
|
Z_stack=matrix(kronecker(diag(10),Z_test),500,1000)
|
|
Y2B_stack = as.vector(YB_test)
|
|
```
|
|
|
|
```{r 3d create b-spline basis for x and y}
|
|
y_pred_glasso <- predict(glasso,Z_stack,lambda=glasso_lambda)
|
|
mse_glasso = sum((Y2B_stack-y_pred_glasso)^2)/n
|
|
mse_glasso
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|