如何在 Matlab 中创建程序来计算 Hat 矩阵的 Hii

How to create a program in Matlab to compute the Hii of the Hat matrix

谁能帮我计算 Hii 矩阵

它应该得到一个单一的值。 但是,在我的代码中,它显示为 2x2 矩阵。 这是我在 Matlab 中的代码:

faithfuldat = xlsread('faithful.csv');
save faithful.mat faithfuldat       % command form

[N,dim]=size(faithfuldat);
fData = faithfuldat;

X_ones =[ones(length(fData(:,1)),1) fData(:,1)];
hii = zeros(N);
for i = 1:N
    hii(i)=X_ones(i,:)'.*(X_ones'*X_ones).*X_ones(i,:)
end

如果在Matlab中不使用csv文件的代码:

a = [1 20;1 30;1 40]

for i = 1:length(a)
    disp(a(i,:)'.*(a'*a).*a(i,:))
end

R 中的代码运行良好:

n <- 50
k <- 2
b0 <- 2
b1 <- 3
x0 <- rep(1,50)
x1 <- rnorm(50)
e <- rnorm(50)
y <- b0 + b1*x1 + e

design.data <- matrix(c(x0,x1), ncol=2, byrow=F)

hii <- numeric()
for(j in 1:n){
  hii[j] <- t(design.data[j,]) %*% solve(t(design.data)%*%design.data) %*% matrix(design.data[j,])
}

结果:

[1] 0.03400676 0.05641070 0.04553599 0.05094598 0.02047051 0.08695448 0.10619427 0.02375806 0.02633310 0.02397181 0.02502073 0.02974964 0.02450914 0.02973598 0.02074476 0.02040370
[17] 0.02659910 0.06028877 0.02028375 0.02121156 0.02727598 0.03565958 0.07047492 0.03275287 0.02680609 0.05062417 0.06499097 0.02712547 0.02000748 0.06958282 0.02309955 0.02000024
[33] 0.02278708 0.02289988 0.05388652 0.02394204 0.03543398 0.09602045 0.02398702 0.02824829 0.03135704 0.06346209 0.02002556 0.10706917 0.05999023 0.02174539 0.04032562 0.05597862
[49] 0.03750268 0.03380938

任何人都可以建议我如何改进我在 Matlab 中的代码,以便我可以获得 R 代码中产生的结果。

参考你的代码

a = [1 20;1 30;1 40]
for i = 1:length(a)
       disp(a(i,:)'.*(a'*a).*a(i,:))
end

有几个问题:

  • Matlab 中的矩阵乘积是 *,不是 .*
  • a(i,:) 是行向量,不是列向量。所以你需要移动转置。
  • 转置use .', not '。运算符 ' 是复共轭转置。
  • 更好not to use i as variable name

因此,将 thid 行更改为以下内容(另外考虑重命名 i):

disp(a(i,:)*(a.'*a)*a(i,:).')