Files
tunmnlu/task_2/others-answer/omsa-main/ISYE-8803-OAN/hw4/hw4_q3.Rmd
louiscklaw 9035c1312b update,
2025-02-01 02:09:32 +08:00

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
```