r - 如何修改我的代码以包含循环?
问题描述
我正在尝试创建一个函数来检查具有不同分布的变量如何影响 OLS 结果。我创建了两个 DV(y1 和 y2),但想将其扩展为包括五个左右。我正在尝试更改我的代码以包含一个循环,因此我不必多次复制和粘贴它,但我运气不佳。任何建议将不胜感激。
library(psych)
library(arm)
library(plyr)
library(fBasics)
regsim <- function(iter, n) {
ek1 <- rnorm(n, 0, 1)
ek2 <- rnorm(n, 0, 5)
x <- rnorm(n, 0, .5)
y1 <- .3*x + ek1
y2 <- .3*x + ek2
#y1
lm1 <- lm(y1 ~ x)
bhat1 <- coef (lm1)[2]
sehat1 <- se.coef (lm1) [2]
skewy1 <- skew(y1)
stdevy1 <- stdev(y1)
#y2
lm2 <- lm(y2 ~ x)
bhat2 <- coef (lm2)[2]
sehat2 <- se.coef (lm2) [2]
skewy2 <- skew(y2)
stdevy2 <- stdev(y2)
results <- c(bhat1, sehat1, stdevy1, skewy1,
bhat2, sehat2, stdevy2, skewy2)
names(results) <- c('b1', 'se1', 'sdy1', 'skewy1',
'b2', 'se2', 'sdy2', 'skewy2')
return(results)
}
iter <-1000
n <-500
results <- NULL
sims <-ldply(1:iter, regsim, n)
sims$n <- n
results <- rbind(results, sims)
解决方案
这减少了对包的依赖,只psych::skew
需要一个可选的ggplot2
调用:
library(psych)
regsim <- function(n, eks) {
x <- rnorm(n, 0, .5)
ek <- sapply(eks, function(x) rnorm(n, 0, x))
y <- 0.3 * x + ek
lms <- lm(y ~ x)
data.frame(b_hat = lms[['coefficients']][2,],
int = lms[['coefficients']][1, ],
skew_y = psych::skew(y),
se_hat = unlist(lapply(summary(lms), function(lst) lst[[4]][2,2]), use.names = FALSE),
sd_y = apply(y, 2, sd),
sd_eks = eks
)
}
iter <-1000
n <-500
eks_sd = c(1,5)
# do the simulations and make them into a nice data.frame
sims <- replicate(iter, regsim(n, eks_sd), simplify = FALSE)
results <- do.call(rbind, sims)
#next parts are optional
results$iter_id <- rep(seq_len(iter), each = length(eks_sd))
tibble::as_tibble(results)
# Random graph because everyone loves graphs
library(ggplot2)
ggplot(results, aes(x = iter_id, y = int)) + geom_point() + facet_grid(vars(sd_eks))
主要的是lm
可以接受多个y
参数。这就是我们创建使用矩阵的ek
原因sapply
。
推荐阅读
- java - 调用未知类的方法
- mysql - 带有单列表的 MySQL 错误 1064
- c# - 带有共享库的 C# 字符串
- python - XOR 带有键的消息:TypeError: 'int' object is not callable
- spring-cloud-stream - spring cloud dataflow kubernetes 部署 pass 属性
- javascript - useEffect、useState 的挑战
- python - 在 ubuntu 中作为服务运行循环 python 脚本
- css - 两个容器需要相同大小......但它们不是:为什么?
- python - python的新手,更改列表列表中的值?
- android - 如何在mapbox android中隐藏图层?