R中{sem}包中的tsls()函数在用户定义的函数中不起作用

时间:2019-05-14 11:01:02

标签: r

我尝试将{sem}包的tsls()函数的估算值嵌入到通过使用“ function(){}”定义的函数中,但是tsls()不能按预期工作。 (重复相同的数字。) 请在下面查看示例代码和结果。 我也尝试了其他一些用户定义的函数,但是发生了相同的事情。

library(sem)

set.seed(1)
X <- rnorm(n=100, mean=0, sd=3)
Y <- rnorm(n=100, mean=1, sd=4)
Z <- rnorm(n=100, mean=2, sd=5)
tsls(Y ~ X, ~Z)$coefficients[1]
# output:
(Intercept) 
    2.10047 

set.seed(2)
X <- rnorm(n=100, mean=0, sd=3)
Y <- rnorm(n=100, mean=1, sd=4)
Z <- rnorm(n=100, mean=2, sd=5)
tsls(Y ~ X, ~Z)$coefficients[1]
# output:
(Intercept) 
   1.213307 

set.seed(3)
X <- rnorm(n=100, mean=0, sd=3)
Y <- rnorm(n=100, mean=1, sd=4)
Z <- rnorm(n=100, mean=2, sd=5)
tsls(Y ~ X, ~Z)$coefficients[1]
# output:
(Intercept) 
   1.036149 

semtsls <- function(n){
  for (i in 1:n){
    set.seed(i)
    X <- rnorm(n=100, mean=0, sd=3)
    Y <- rnorm(n=100, mean=1, sd=4)
    Z <- rnorm(n=100, mean=2, sd=5)
    print(tsls(Y ~ X, ~Z)$coefficients[1])
  }
}

> semtsls(3)
(Intercept) 
   1.036149 
(Intercept) 
   1.036149 
(Intercept) 
   1.036149 
> semtsls(5)
(Intercept) 
   1.036149 
(Intercept) 
   1.036149 
(Intercept) 
   1.036149 
(Intercept) 
   1.036149 
(Intercept) 
   1.036149

0 个答案:

没有答案