R - Ошибка T-test для команды цикла между переменными - PullRequest
0 голосов
/ 24 ноября 2018

В настоящее время в процессе написания цикла For Loop, который будет рассчитывать и выводить результаты t-теста, я проверяю разницу во всех переменных (faminc, fatheduc, motheduc, white, cigtax, cigprice) между курильщикамии некурящие («курить»; 0 = не курить, 1 = курить)

Текущий код:

type <- c("faminc", "fatheduc", "motheduc", "white", "cigtax", "cigprice")
count <- 1
for(name in type){
  temp <- subset(data, data[name]==1)
  cat("For", name, "between smokers and non, the difference in means is: \n")
  print(t.test(temp$smoke))
  count <- count + 1
}

Однако я чувствую, что «temp» здесь не относится и когдазапустив код, который я получаю:

For faminc between smokers and non, the difference in means is: 
Error in t.test.default(temp$smoke) : not enough 'x' observations

Простой код

t.test(faminc~smoke,data=data)

делает то, что мне нужно, но я хотел бы получить некоторую практику / лучшее понимание циклов for.

Ответы [ 2 ]

0 голосов
/ 24 ноября 2018

Сравните ваш код, который работает ...

t.test(faminc~smoke,data=data)

Вы указываете связь между переменными (faminc~smoke), что означает, что вы думаете, что среднее значение faminc отличается между значениями smoke и вы хотите использовать набор данных data.

Эквивалентная строка в вашем цикле ...

  print(t.test(temp$smoke))

... дает только один столбец temp$smoke послевыбрав тех, кто имеет значение 1 для каждого из faminc, fatheduc и т. д. Так что даже если вы написали ...

print(t.test(faminc~smoke, data=data))

Далее ваш count ничего не делает.

Если вы хотите выполнить ряд тестов таким способом, вы можете

type <- c("faminc", "fatheduc", "motheduc", "white", "cigtax", "cigprice")
for(name in type){
  cat("For", name, "between smokers and non, the difference in means is: \n")
  print(t.test(name~smoke, data=data))
}

Является ли это тем, чем вы хотите заниматься, хотя мне не ясно, ваши переменные предполагают семейство (faminc), отец (fatheduc), мать (motheduc), этническая принадлежность (white), налог (cigtax) и цена (cigprice).

Я не могу понять, почему вы хотели бы сравнить среднюю цену на сигареты или налог между курильщиками и некурящими, потому что последние не будут иметь никакого значения для этого, так как они не курят!

Ваш код предполагает, что это, возможно, двоичные переменные (поскольку вы фильтруете по каждому значению 1), что, как мне кажется, вовсе не то, что вы хотите сделать.

Если вы хотите просмотреть подмножества данных, тогда подход tidier к регрессии, а не к циклам, заключается в использовании purrr .

.данных вместе с полной копией и вставленным выводом, как описано в Как создать пример минимального, полного и проверяемого - Справочный центр - Переполнение стека .Потому что это позволяет людям более подробно видеть, что вы делаете (например, я только догадывался о ваших переменных).Со статистикой также полезно указать, какая у вас гипотеза, чтобы помочь людям понять, чего именно вы пытаетесь достичь в целом.

0 голосов
/ 24 ноября 2018

Вот решение, которое генерирует вывод, запрошенный в OP, используя lapply() с набором данных mtcars.

data(mtcars)
varList <- c("wt","disp","mpg")
results <- lapply(varList,function(x){
  t.test(mtcars[[x]] ~ mtcars$am)
})
names(results) <- varList
for(i in 1:length(results)){
      message(paste("for variable:",names(results[i]),"difference between manual and automatic transmissions is:"))
      print(results[[i]])
}

... и вывод:

> for(i in 1:length(results)){
+   message(paste("for variable:",names(results[i]),"difference between manual and automatic transmissions is:"))
+   print(results[[i]])
+ }
for variable: wt difference between manual and automatic transmissions is:

    Welch Two Sample t-test

data:  mtcars[[x]] by mtcars$am
t = 5.4939, df = 29.234, p-value = 6.272e-06
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 0.8525632 1.8632262
sample estimates:
mean in group 0 mean in group 1 
       3.768895        2.411000 

for variable: disp difference between manual and automatic transmissions is:

    Welch Two Sample t-test

data:  mtcars[[x]] by mtcars$am
t = 4.1977, df = 29.258, p-value = 0.00023
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
  75.32779 218.36857
sample estimates:
mean in group 0 mean in group 1 
       290.3789        143.5308 

for variable: mpg difference between manual and automatic transmissions is:

    Welch Two Sample t-test

data:  mtcars[[x]] by mtcars$am
t = -3.7671, df = 18.332, p-value = 0.001374
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -11.280194  -3.209684
sample estimates:
mean in group 0 mean in group 1 
       17.14737        24.39231 

> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...