线性回归:如何在协方差矩阵中创建推理依赖错误?

时间:2016-11-01 19:00:48

标签: r regression montecarlo

我是统计学的本科生,我正在撰写一篇关于我的科学启蒙的文章,该文章旨在成为教学中的教学工具,教授向初学者展示一种简单的方法,以图形方式显示线性的重要性回归假设。此工具不打算替换数学,而只是视觉上的帮助。

主要思想是将故意违反线性回归假设的回归模型复制1000次,将Betahat,P值,R2等统计数据存储在列表中。

之后,目的是创建直方图,表格和散点图等图表,以图形方式说明估算值逐渐被违反时估算器的行为。因此,其他人(学生或教授)可以改变参数,因为他们希望注意到假设的重要性。

我已经使代码以Mont Carlo方式运行模拟,以便R违反Homocesdasticy的假设和错误的正常性。 但是为了违反错误的独立性,我试图在相关错误的情况下尝试创建一个协方差矩阵,但它看起来效果不好。

这是我的代码的一部分,任何人都可以看看并帮助我改进它我真的很感激。

# Packages required to simulate multivariate normal distribution
install.packages("mvtnorm")
library(mvtnorm)

# Function that create the samples for the X:
X1 =  sample(0:20,30,T)
X2 =  sample(0:20,60,T)
X3 = sample(0:20,120,T)

# Function tha creates the vector with 1000 simulations for the Mont Carlo   

# Size of the samples

n1 <- 30
n2 <- 60
n3 <- 120

# Variations of the sigma to the simulation

S2.1 <- 0.5 
S2.2 <- 0.9

# Variations of the Ro to the function

Ro1 <- 0.8 
Ro2 <- 0.3
Ro3 <- - 0.8

# Base Zero Covariance matrix
cov1 <- matrix(0,n1,n1)
cov2 <- matrix(0,n2,n2)
cov3 <- matrix(0,n3,n3)

# Function that insert the dependence of errors in the covariance error Ei

M.Cov.Depen = function (n,cov,S2,Ro){
    diag(cov)= S2
    for (i in 1:n-1){
                    cov[i,i+1]= S2 * Ro
                    cov[i+1,i]= S2 * Ro
    }
    return(cov)
 }

# 1 - Covariance dependent Error Matrix with n=30, S2=0.5, Ro=0.8

 MCovD_n1_S2.1_Ro1 = M.Cov.Depen(n1,cov1,S2.1,Ro1)

# Function that creates the Dependece error with Normal Multivariate samples

Monte.Carlo.4 = function(X,n,Mcov){
    b0 = NULL;b1 = NULL;r2 = NULL;r2a = NULL;p = NULL;
    for (i in 1:1000) {
    Y = 1.4 + 0.8 * X + rmvnorm(1,mean=rep(0,n),sigma= Mcov)
    Y = as.vector(Y)
    s <- summary (lm(Y~X))
    b0 <- c(b0, s [[4]] [1])
    b1 <- c(b1, s [[4]] [2])
    r2 <- c(r2, s [[8]])
    p <- c(p, s[[4]] [8])
    }
    return (list(b0=b0,b1=b1,r2=r2,p=p))
}

# 1-  Vectors of Estimators with sigma=0.5, n=30, Ro=0.8:

Monte.4_n30_sig0.5_Ro0.8 <- Monte.Carlo.4(X1,30,cov1)
hist(Monte.4_n30_sig0.5_Ro0.8$r2)
dep.1 <- rmvnorm(30,sigma= cov1)
hist(dep.1)
cov1 <- matrix(Ro1 * S2.1,n1,n1)
diag(cov1)= 0.5
cov2 <- matrix(0,n2,n2)
cov3 <- matrix(0,n3,n3)

# Function that insert the dependence of errors in the covariance error Ei

M.Cov.Depen = function (n,cov,S2,Ro){
    for (i in 1:n){
                    cov[i,i]= S2 * Ro
    }
    diag(cov)= S2
    return(cov)
}

Y = 1.4 + 0.8 * X1 + rmvnorm(1,mean=rep(0,30),sigma= cov1)

plot(Y~X1)
dim(dep.1)
sigma <- matrix(c(4,2,2,3), ncol=2)
x <- rmvnorm(n=500, mean=c(1,2), sigma=sigma)
dim(Y)
plot(x)

我知道它在某种程度上是不寻常的尝试做一些数据年代不应该做的事情,但在相反的方向避免不惜任何代价。但是,解构这些假设可能是一种更好地理解和理解它的方法,并帮助其他人看到忽略它的后果并适合一个糟糕的模型。

我再次感激任何帮助。

0 个答案:

没有答案